SSHの公開鍵・秘密鍵のペアが複数あり、ホストに送った公開鍵に合わせて使い分けたい。
##-i
オプションで使用したい秘密鍵のファイルを指定する
$ ssh -i ~/.ssh/id_rsa_hostA -p ポート番号 ユーザ@ホスト
このコマンドでリモートサーバにアクセスしようとしたところ、次のエラーが発生。
$ ssh -i ~/.ssh/id_rsa_hostA -p ポート番号 ユーザ@ホスト
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '~/.ssh/id_rsa_hostA' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "~/.ssh/id_rsa_hostA": bad permissions
調べたところ、パーミッションを600に変更すれば良いそうなので実行。
$ chmod 600 ~/.ssh/id_rsa_hostA
再度アクセスを試みると無事できた。
##.ssh/configを編集して秘密鍵を使い分け
毎回-i
オプションを入力するのは面倒なので、.ssh/configにホストと秘密鍵の対応を書いておく。
Host hostA
HostName 192.168.0.1
User user_a
IdentityFile ~/.ssh/id_rsa_hostA
Port 1111
Host hostB
HostName hostb.com
User user_b
IdentityFile ~/.ssh/id_rsa_hostB
IdentityFile
にそれぞれのホストで使用したい秘密鍵を指定する。HostName
はホスト名でもIPアドレスでも可能。Port
でポート番号もしてできる。configが編集できたら、
$ ssh hostA
とするだけでホストごとに秘密鍵を切り替えて接続できる。
##自分用メモ
scpコマンドでローカルのファイルをホストに送信する際も同様に-i
オプションが使用できる。
$ scp -P ポート番号 -i ~/.ssh/id_rsa_hostA -r ローカルパス ユーザ@ホスト:リモートパス
configを設定したものにオプションを付けたい時は、ssh
とホストの間に書く。
$ ssh -p 8888:8888 hostA