MB blog

こちらは主に自分用のメモです。

パスワードなしの公開鍵認証でssh接続


スポンサードリンク

expectで対話型シェルでは、bashの中でexpectスクリプトを読み込ませていますが、このサンプルには以下のような弱点があります。

これらをクリアするために、ssh-agentで公開鍵を生成して、パスワードなしでsshが使えるようにしておきます。

1. 鍵の生成

以下のコマンドで鍵を生成します。

ssh-keygen -t rsa

-tは、暗号方式を指定しています。

Enter file in which to save the key (/home/username/.ssh/id_rsa):

デフォルトでは、ホームディレクトリの.ssh以下に生成されます。何も入力せずエンターを押せばデフォルトを受け入れます。
次に、パスフレーズを訊かれるので、

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

何も入力せずエンターを押すと、パスワードなしで接続可能な設定になります。

.ssh以下に、鍵が生成されます。

Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xxxx:xx:xx:xx:xx:xx:xx:xx username@hostname

id_rsaが公開鍵, id_rsa.pubが秘密鍵です。

2. 秘密鍵をリモートマシンへ配置

sshログインしたいリモートマシンに、先ほど作成した秘密鍵(id_rsa.pub)を配置します。

scp id_rsa.pub username@remote_host:.ssh
cat id_rsa.pub >> authorized_keys

リモートでも.ssh以下に送っておきます。送りつけたid_rsa.pubの内容を、authorized_keysに追記します。
以上で、パスワードを訊かれずにssh接続できるようになりました。Pythonスクリプトの中などからも1文でログインが可能です。