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の場合、キーチェーンに登録するかどうかの確認ダイアログが表示されます。キーチェーンに登録しておけば、以降パスワードの入力は不要になります。
また、それ以外の環境(Linux等)でも、ssh-agent というプログラムを起動しておくことで、パスワードの入力を省くことができます。
[接続元]
$ ssh-agent bash
認証エージェントに監視対象のプログラムを指定します。ここでは、bash を指定して、以降のシェルを通じたコマンドの入力を監視させます。
[接続元]
$ ssh-add ~/.ssh/id_rsa
認証エージェントに秘密鍵を追加します。
[接続元]
$ ssl-add -l
追加された秘密鍵を確認します。
これで、ssh-agent の起動中は、パスワードの入力無しで、sshでの接続ができるようになります。