(以前社内のLTで発表したネタをそのまま書いています)

あちこちのサーバーにsshするときに、まさか毎回パスフレーズやパスワード打ったりしてないですよね? サーバー上に秘密鍵をおいたりしていないですよね?まだssh-agentつかってない人はぜひ使いましょう。

ssh-agentの使い方

Windows環境

  • PuTTY, Tera Term

    • Pageant.exeを使う
      • 起動時の引数に秘密鍵のパスを与えると便利。
      • ショートカットを作って、スタートアップ登録すると更に便利。
      • 例: “C:\Program Files (x86)\PuTTY\pageant.exe” “C:\hoge\fuga.ppk”
    • ssh-agent.exeを使う
  • Poderosa

    • メニュー「ツール」「エージェントフォワーディング」から設定をする

Mac OS X環境

※ssh-agentの起動は不要

秘密鍵の登録状況の確認

$ ssh-add -l
The agent has no identities.

秘密鍵の登録

$ ssh-add hoge/fuga
Enter passphrase for hoge/fuga: Identity added: hoge/fuga (hoge/fuga)

確認してみる

$ ssh-add -l
2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hoge/fuga (RSA)

-Aオプション付きでsshすると、接続先でも秘密鍵の情報が引き継がれる

$ ssh -A ホスト名
$ ssh-add -l
2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hoge/fuga (RSA)

Linux環境

ssh-agentの起動

$ eval `ssh-agent`
$ ssh-add -l
The agent has no identities.

秘密鍵の登録

$ ssh-add hoge/fuga
Enter passphrase for hoge/fuga: Identity added: hoge/fuga (hoge/fuga)

確認してみる

$ ssh-add -l
2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hoge/fuga (RSA)

-Aオプション付きでsshすると、接続先でも秘密鍵の情報が引き継がれる

$ ssh -A ホスト名
$ ssh-add -l
2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hoge/fuga (RSA)

ログアウトすると UNIXドメインソケットが消える対策

  • screenやtmuxを使っている環境では、ssh-agentを起動しているホストでログアウトすることはよくある。しかしログアウト時に、UNIXドメインソケットが消えてしまう。
  • そんなときは、SSH_AUTH_SOCKを固定化する。
  • 環境変数SSH_AUTH_SOCKに設定される値 /tmp/ssh-xxxxx/agent.[sshd PID] このパスにUNIXドメインソケットが作られる。これは、ログインのたびに値は変化する。 そのため、screen, tmuxをアタッチしなおした際にソケットに接続できなくなってしまう。
  • 環境変数SSH_AUTH_SOCKを固定化させれば問題は起きない。
  • 毎回作られる/tmp以下のパスから固定化させたパスへシンボリックリンクを作っておき、環境変数SSH_AUTH_SOCKが参照するように.bashrcや.zshrcで設定する。

.ssh/configの活用

~/.ssh/configを設定しておくと便利です。

例えば、MacOS XやLinuxでの設定

% vi ~/.ssh/config
ForwardAgent yes
Host hogehost
    User fuga

こうしておくと、hogehostへsshする際に -Aオプションとユーザー名の指定が省略できます

SSHにまつわるトラブルシューティング

Software Design 2015年4月号に寄稿した内容をWebで閲覧できるようになっていますので、ぜひご参考にどうぞ。

第2回 [サーバ・インフラ・ネットワーク編]SSHでありがちなトラブルとその対策―不都合なくSSHを使えていますか? http://gihyo.jp/admin/feature/01/trouble-shooting/0002