ssh-agentで手元の公開鍵をリモートサーバから使う
ssh-agentは公開鍵を保持して、認証処理を代行するデーモンプロセスである。
パスフレーズの入力を一度で済ませる
ssh-agent経由でシェルを起動し、鍵を登録しておくことで、以降シェルを抜けるまでパスフレーズなしで認証できる。
$ ssh-agent bash $ ssh-add Enter passphrase for /home/user/.ssh/id_rsa: [type a passphrase here] $ ssh-add -l 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx /home/user/.ssh/id_rsa (RSA) $ ssh user@server # パスフレーズを聞かれない
手元の公開鍵をリモートサーバで使う
手元のPCから共有サーバAに接続し、さらに個人サーバBに接続することを考える。 個人サーバBに公開鍵認証で接続したい場合、個人サーバBには共有サーバAの公開鍵を登録する必要がある。 しかし、共有サーバAのroot権限を複数のユーザが持っているとき、自分以外のユーザも共有サーバAにある秘密鍵を使い、個人サーバBにログインすることができてしまう。
ssh-agentを使うと、手元のPCの鍵をネットワーク経由で共有サーバA上でも使うことができる。
このとき、個人サーバBには手元のPCの公開鍵を登録しておけばよい。
エージェントの転送を有効にするには、sshコマンドの引数として-A
を指定する。
$ ssh-agent bash $ ssh-add Enter passphrase for /home/user/.ssh/id_rsa: [type a passphrase here] $ ssh-add -l 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx /home/user/.ssh/id_rsa (RSA) $ ssh -A user@server (user@server)$ ssh-add -l # リモートサーバでも手元のPCの鍵を扱えている 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx /home/user/.ssh/id_rsa (RSA)
個人サーバBからさらに別のサーバへ接続する場合も、同様にsshコマンドの引数として-A
を指定すればよい。
screen上のすべてのシェルで使う
ssh-agentを立ち上げる際bashの代わりにscreenを引数に与えれば、その上で作られるすべてのシェルでssh-agentが使われるようになる。
$ ssh-agent screen -U $ ssh-add
仕組み
ssh-agentはUNIXドメインソケットを利用し、ssh等の他のプロセスとのプロセス間通信を行う。
このソケットへのパスは、シェルを起動した際に環境変数$SSH_AUTH_SOCK
に設定される。
また、エージェントの転送を有効にした場合は、リモートサーバからsshを経由し、手元のssh-agentが認証処理を行う。