SSHの鍵の生成

たまにしかやらなくて忘れてしまうので備忘録

ssh で別のサーバへログインする場合は、公開鍵を接続先のサーバへ登録してやると、いちいちパスワードを入力しなくてもログインできるようになって便利です。(但し秘密鍵が漏洩しないよう管理する必要があります)


鍵は接続元で保持する秘密鍵と、接続先に配置する公開鍵が必要になります。
どちらも、接続元のマシンで生成します。
鍵は通常、ホームディレクトリの.sshディレクトリに置きます。
ログインする側のマシンで、ssh-keygen コマンドを使って生成します。



[接続元]
$ cd ~/.ssh
$ ssh-keygen

コマンドを入力すると、鍵を生成する場所と、パスワード(バスフレーズ)を聞かれます。
そのままリターンすると、デフォルトとして表示された場所に生成されます。
パスワードを入力すると秘密鍵にパスワードを設定することができます。設定しなくても構いませんが、設定しておくと、秘密鍵が漏洩した場合のリスクを抑えられます。(ここで入力するパスワードは、接続先へログインするためのパスードではなく、秘密鍵自体に設定するパスワードです。)


コマンドが終了すると、指定した場所に、id_rsa と id_rsa.pub という2つの鍵が生成されます。



[接続元]
$ ls
$ id_rsa      id_rsa.pub

id_rsa が秘密鍵で、id_rsa.pub が公開鍵です。どちらも中身はテキストエディタで開けるテキストファイルです。
作成された公開鍵 を接続先のホストへ持っていきます。
ここでは、scpコマンドで接続先へコピーします。(下の例では、yyyyyyy.zzz.jpという接続先の、xxxxxユーザのホームディレクトリの下のtmpというディレクトリに、my_pub_keyという名前でコピーしています)



[接続先]
$ scp id_rsa.pub  xxxxx[at]yyyyyyy.zzz[dot]jp:tmp/my_pub_key

接続先で公開鍵をホームディレクトリの.ssh/authorized_keys へ追記します。

[接続先]
$ cat $HOME/tmp/my_pub_key >> $HOME/.ssh/authorized_keys

>> を使って、登録済みの公開鍵を上書きしないよう、追記しています。
authorized_keys への追記が終わったら、id_rsa.pub は不要なので削除します。



[接続先]
$ rm $HOME/tmp/my_pub_key

これで、鍵を作成した接続元からこのホストへ、sshを使ってログインパスワードの入力無しでログインができるようになりました。

接続元のホストから、



[接続元]
$ ssh xxxxx[at]yyyyyyy.zzz[dot]jp 

のように入力してログインできます。秘密鍵にパスワードを設定していた場合、秘密鍵のパスワードの入力を求められますが、この時、Macの場合、キーチェーンに登録するかどうかの確認ダイアログが表示されます。キーチェーンに登録しておけば、以降パスワードの入力は不要になります。
dialog.png

また、それ以外の環境(Linux等)でも、ssh-agent というプログラムを起動しておくことで、パスワードの入力を省くことができます。



[接続元]
$ ssh-agent bash

認証エージェントに監視対象のプログラムを指定します。ここでは、bash を指定して、以降のシェルを通じたコマンドの入力を監視させます。



[接続元]
$ ssh-add ~/.ssh/id_rsa

認証エージェントに秘密鍵を追加します。



[接続元]
$ ssl-add -l

追加された秘密鍵を確認します。


これで、ssh-agent の起動中は、パスワードの入力無しで、sshでの接続ができるようになります。