諸事情によりまたしばらく基礎的な内容になります。
クラウドサービス含め、サーバに接続する時にはセキュリティ面を考えて公開鍵方式のSSHを利用するのが一般的です。 公開鍵については過去に記事にしています。
しかしサーバに接続するたびにパスワードを入力するのは面倒ですね。だからと言って、短く簡単なパスワードにしてしまう(あるいはパスワードなしにしてしまう)のはセキュリティ面で大きな問題になります。
そんな時にはssh-agentを使うと、パスワードの入力を省略することができるようになります。
参考記事
- 【SSH】ssh-agent の使い方 – ラボラジアン
- Linux|パスフレーズを省略!ssh-agentの使い方 - わくわくBank
- Mac OS X以降のssh-agent事情 - Qiita
Linuxの場合
Linux (Windows WSL含む) では、以下のコマンドで起動します。
$ eval `ssh-agent`
次に、以下のコマンドで公開鍵のパスワードをssh-agentに登録します。
$ ssh-add <秘密鍵のファイル名> (秘密鍵のパスワード入力)
こうすると、以後サーバログイン時に公開鍵のパスワード入力が不要になります。
ただこの方法では、ターミナルを立ち上げるたびに自分でssh-agentを起動しなければなりません。 ターミナル起動時(またはログイン時)にssh-agentが自動起動されるようにするには、ホームディレクトリにある .bashrc (または.bash_profile)に以下の内容を追記します。
if [ -f ~/.ssh-agent ]; then . ~/.ssh-agent fi if [ -z "$SSH_AGENT_PID" ] || ! kill -0 $SSH_AGENT_PID; then ssh-agent > ~/.ssh-agent . ~/.ssh-agent fi ssh-add -l >& /dev/null || ssh-add
ここでの記述方法には色々あるのですが、ひとまずこのままコピー&ペーストしてしまって大丈夫です。
Macの場合
上の参考記事によれば、Mac OS X Leopard 〜 El Capitan まではssh-agentのかわりにKeychainというプログラムが自動的に実行されており、ssh-agentのマニュアル起動は不要でしたが、macOS Sierra では自動では実行されない設定になったそうです。 自動起動のため、Sierra では以下の設定を行います。
(実機で確認していないため、訂正あればコメントをお願いします。)
~/.ssh/config
に以下を追記(ファイルがなければ新規作成)
Host * AddKeysToAgent yes UseKeychain yes IdentityFile <秘密鍵のパス>
なお最後の行 IdentityFile <秘密鍵のパス>
は秘密鍵の場所を毎回 -i
オプションで指定しなくてもよい設定にするためのもので、ssh-agentとは直接関係はありません。
サーバ上にも設定を反映する:ForwardAgent
使っているサーバが複数ある場合、例えばローカルPCからサーバAにssh接続し、サーバAからサーバBにsshでログインする、あるいはscpでデータを送りたいというケースが発生します。
そうなるとサーバ上にも秘密鍵を置く必要がありますが、それはセキュリティ的に問題です。
ここでForwardAgent
という仕組みを使うと、ローカルPCのssh設定をそのままログインしたサーバに反映させることができます。
具体的には ~/.ssh/config
に以下を追記するだけでOKです。(ファイルがなければ新規作成)
ForwardAgent yes
こうするとローカルのssh-agent設定がサーバに引き継がれますので、サーバ間のssh, scpをする際に秘密鍵、パスワードの入力が不要になります。
注意点
ssh-agentを起動している間はパスなしでサーバにログインできてしまうため、共用PCなどで設定する際は注意が必要です。
他の人が使う可能性がある環境、職場で席を長く離れる場合などは ssh-add -D
で登録した秘密鍵を削除するなどするとより安心です。