はじめに
長らくハマってたssh鍵作成~sshログインまでの流れがようやく理解&成功したので
メモっとく。
参考
元々は↓↓の記事作ってた。でもこのやり方は、接続先サーバのauthorized_keysに公開鍵をコピペで張り付けるっていう力技。
よそのサイトで紹介してるssh-copy-idを使ってのスマートなやり方がわからなかったための苦肉の策でした。
先に結論
クライアント側からssh-copy-idを使ってサーバ側へ公開鍵を渡すためには、前提として 「そのユーザーはそもそもクライアント~サーバ間でパスワード認証でssh接続できること」 が必須。
今までずっと「鍵を渡すためにはssh通信できないといけないのにどうやってほかの人はssh鍵を渡しているんだ…」とおもってたけど、
わかってしまえば何のことはない話だった。。。
あと、ssh接続時に使うユーザー名はクライアント側とサーバ側でそろえておいたらいいです。
そろってなくてもできる気もするけど検証する気が起きないのでそこは割愛。
↓↓のサイトのおかげでようやく結論にたどり着けた。。。感謝
改めて手順の説明
構成
HOST名 | IPアドレス | 使用するユーザー名 | 備考 |
---|---|---|---|
nbfr151v | 10.1.0.5 | nabehiro | クライアント |
nbfr152v | 10.1.0.6 | nabehiro | サーバ |
1. パスワード認証設定にする(サーバ / root)
/etc/ssh/sshd_configを確認して、以下のようにパスワード認証を有効にする
#PasswordAuthentication yes
PasswordAuthentication no
sshdを再起動。これやってもssh接続が切れることは無いので安心してください。
systemctl restart sshd
2. ssh鍵を作成する(両方 / nabehiro)
新規でユーザーをつくったケースを想定しているので.sshは新規で作る
受け入れ側も.sshないと公開鍵を受け取る場所がないのでサーバ側にも作った
$ mkdir ~/.ssh && chmod 700 ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096
実行後の.ssh/
秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作られる。
名前指定してないとid_rsaって名前になる
3. パスワード認証で接続(クライアント / nabehiro)
ここが前半のクライマックス。
パスワード認証できれば次の認証鍵でのパスワード不要な認証へチャレンジできる。
秘密鍵がデフォルトの場所ならサーバとログインアカウントの指定だけでOK。
ssh nabehiro@10.1.0.6
4. 公開鍵の転送(クライアント / nabehiro)
ssh-copy-idを使って転送する
## dry-runで確認
ssh-copy-id -n nabehiro@10.1.0.6
## -nを外して実行
ssh-copy-id nabehiro@10.1.0.6
なお、ssh-copy-idに成功すると↓↓のようにauthorized_keysが作成され、そこに公開鍵がコピーされる
5.鍵認証を使ってログイン(クライアント / nabehiro)
ログインコマンドはこちら。-iは鍵ファイル名を指定する
ssh -i id_rsa nabehiro@10.1.0.6
ちなみに、試しでid_rsaを複製して.ssh/id_rsa2を使ってログインしようとしたら-i ~/.ssh/id_rsaと指定しないとダメだった。
id_rsaだけが特別なんだなと思いました。
オマケ:サンプルユーザーの作り方
また同じ要領でハマったときにつるっと検証できるようにユーザー追加コマンドを置いておく
検証用の使い捨てユーザーなのでBAD PASSWORDと叱られても気にしないのがコツ。
useradd -m -d /home/nabehiro nabehiro
passwd nabehiro
nabehiro
nabehiro
# 削除したいときはuserdel。-r使ってホームディレクトリごと消す
userdel -r nabehiro