CentOS に ssh で公開鍵認証できるように設定する方法について説明します。
.ssh/config の設定
リモートへ接続するための ssh 接続の設定をします。
以下の設定をすることで ssh ユーザ名@ホスト名
の代わりに ssh centos
のように、自分のつけた名前で ssh 接続できるようになります。
$ vim ~/.ssh/config
Host centos
HostName 127.0.0.1
User myname
IdentityFile ~/.ssh/id_ed25519
秘密鍵と公開鍵を生成する
ssh-keygen
コマンドで秘密鍵と公開鍵の生成します。
鍵の種類を楕円曲線暗号 ed25519 に変えると安全性が上がります。
古い環境でも使う必要がある場合は rsa を指定します。
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
上記コマンドを実行すると、秘密鍵と公開鍵が以下のパスに作成されます。
- 秘密鍵 : ~/.ssh/id_ed25519
- 公開鍵 : ~/.ssh/id_ed25519.pub
サーバに公開鍵を登録する
サーバに公開鍵を登録する際は ssh-copy-id コマンドを使用します (ssh-copy-id がない場合は補足を参照)。 生成した公開鍵をリモートの ~/.ssh/authorized_keys に追加して、ディレクトリの作成や権限の設定なども行います 1。
ssh-copy-idコマンド
ssh-copy-idコマンドでローカルにある秘密鍵を指定すると、 リモートへ公開鍵を送信し、~/.ssh/authorized_keys の作成や権限を適切に設定してくれます。 権限の設定は特に間違えやすいので、このコマンドを使うのがおすすめです。
$ ssh-copy-id -i ~/.ssh/id_ed25519 centos
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "~/.ssh/id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@127.0.0.1's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'centos'"
and check to make sure that only the key(s) you wanted were added.
パスワードを聞かれずにログインできることを確認する
$ ssh centos
以上です。
-
ssh-copy-id コマンドがない場合は、以下を直打ちします。
cat ~/.ssh/id_ed25519.pub | ssh ユーザ名@ホスト名 'mkdir -p ~/.ssh; chmod 700 ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys'
上記を1行ずつ実行する場合は以下のようになります。
cat ~/.ssh/id_ed25519.pub # 出力はクリップボードにコピーしておく ssh ユーザ名@ホスト名 mkdir -p ~/.ssh chmod 700 ~/.ssh cat >> ~/.ssh/authorized_keys # 貼り付けてCtrl+Cで抜ける chmod 600 ~/.ssh/authorized_keys
最近のLinux環境であれば ssh-keygen と一緒に入っています。 ただし、Windowsの環境では ssh-copy-id は存在しないので、上記のコマンド群で対応するしかありません。 ↩