ssh-agent / ssh-copy-id 利用方法

サーバーの構築・運用や Web アプリケーションの開発をしている方は、
仕事をするうえで ssh を使わない日は基本無いと思います。

ただ、そういう普段使いのコマンドは、一旦使い方を覚えてしまうと、
新しい便利な使い方が有っても中々そっちに移行できないんですよね…

という事で、私自身があまり使ったことが無かった ssh-copy-idssh-agent について、
利用方法の簡単なメモ。(あとおまけで ssh-keygen も)

試した環境は CentOS 7.2 です。

鍵ペア作成 : ssh-keygen

鍵ペア (公開鍵・秘密鍵) を作成します。
以前は -t rsa というオプションを付けないと SSH1 用の鍵が作成されていましたが、
今はデフォルトで SSH2 用の鍵が作成されるため、
通常用途ならオプション無しのコマンドのみを叩けば OK です。

$ ssh-keygen

鍵の保存場所やパスフレーズを聞かれますので、適切に設定しましょう。
デフォルトなら $HOME/.ssh/ に id_rsa (秘密鍵) と id_rsa.pub (公開鍵) が作成されます

接続先サーバーへの公開鍵転送 : ssh-copy-id

作成した鍵ペアでログインできるように、接続先サーバーへ公開鍵を登録します。

手動で実施する場合は以下のような手順を踏みますが、
ssh-copy-id コマンドはこの辺を一発で済ませる事ができます。
・接続先で .ssh ディレクトリの作成
・公開鍵を接続先に登録 (.ssh/authorized_keys への記載)
・パーミッション調整

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.11

接続情報のキャッシュ : ssh-agent

秘密鍵のパスフレーズを設定していなければコレは不要なのですが、
「パスフレーズ無しは良くないよね」という大義が有ると思うので使い方を。

引数にコマンドを与えれば、ssh-agent が利用できる状態でそのコマンドが起動します。
普通は bash などのシェルを指定。

$ ssh-agent bash

この起動方法の場合、bash を抜けると ssh-agent も死ぬので、
意図せずに秘密鍵の情報がキャッシュに残る可能性がグンと減ります。ここ重要。

ssh-add で秘密鍵を登録します。登録時にはパスフレーズを聞かれるので入力。

$ ssh-add .ssh/id_rsa

ssh-add 後に ssh を利用すれば、パスフレーズが聞かれずに接続先へログインする事ができます。

ssh-agent をコマンド指定なしで起動すると…

ssh-agent をコマンド指定なしで起動すると、
下記のような表示をして、普通にデーモンとして起動します。

$ ssh-agent
 SSH_AUTH_SOCK=/tmp/ssh-ySUeUkCTgdtH/agent.7179; export SSH_AUTH_SOCK;
 SSH_AGENT_PID=7180; export SSH_AGENT_PID;
 echo Agent pid 7180;

ここで環境変数 SSH_AUTH_SOCK にソケットのパスを設定すれば、
このエージェントが利用できる事になりますが、
この場合、登録した鍵の情報はログアウトしてもそのまま残っています。
(ssh-agent が止まったり、OS がリブートされるまで)

これを便利と取るか、危険と取るかはあなた次第…?
というか、こんな使い方するなら keychain を使うべきなのでしょうけど。

シェルが終わったら情報も消える、ぐらいがちょうどいい情報保持期間だと思うので、
個人的には ssh-agent bash が有れば OK で、keychain までは要らない感じでした。