システム課 黒田です。
仕事柄何台ものサーバに接続している毎日ですが、
特に面倒となるのが秘密鍵の管理です。
複数の鍵を如何に意識せず使うかを
考え続けた結果を共有したいと思います。
秘密鍵の管理はPageant等のツールを使うのが一般的かと
思いますが、パスフレーズを入力するのも億劫な自分は
ssh-agentを使った方法で簡略化しています。
一般的なPageantの使い方ですが、
WindowsでWinSCPを標準インストールしてあれば
Windosスタートメニューから「WinSCP」-「鍵関連ツール」-「Pageant」で起動、
タスクトレイのPageantアイコンを右クリックし、[鍵の追加] を選択します。
そして、ローカルに保存してある秘密鍵のファイルを指定し、パスフレーズを入力して登録出来ます。
これで登録した秘密鍵はパスフレーズの入力が不要になります。
※スタートアップフォルダにPageant.exeのショートカットを作成し、
そのショートカットの起動パラメータに秘密鍵のフルパスをダブルクォートで括って指定すると
パソコン起動時に自動的に秘密鍵が登録されます。(要パスフレーズ)
以下はエンジニア向けのssh-agentを使った方法になります。
※基本ターミナルからの接続でログインシェルはbashです
※仮想端末(screen)でも認証エージェントは引き継がれます
※CentOS 7にて動作確認
まず、「.bash_profile」に以下を追加
# 仮想端末なら実行しない
if [ $TERM != 'screen' ]; then
eval `ssh-agent`
# 秘密鍵ファイル1
KEY_FILE01='id_rsa_01'
# パスフレーズ
PASSPHRASE01='xxxxxxxxxx'
expect -c "
set timeout -1
spawn ssh-add $HOME/.ssh/$KEY_FILE01
expect {
\"Enter passphrase for\" {
send \"$PASSPHRASE01\r\"
}
}
expect {
\"denied\" { exit 1 }
eof { exit 0 }
}
"
# 秘密鍵ファイル2
KEY_FILE02='id_rsa_02'
# パスフレーズ
PASSPHRASE02='xxxxxxxxxxx'
expect -c "
set timeout -1
spawn ssh-add $HOME/.ssh/$KEY_FILE02
expect {
\"Enter passphrase for\" {
send \"$PASSPHRASE02\r\"
}
}
expect {
\"denied\" { exit 1 }
eof { exit 0 }
}
"
# スクリーン起動
screen
fi
さらに、ログアウト時にssh-agentを終了するため
「.bash_logout」に以下を追加
ssh-agent -k
これでログイン時に秘密鍵1と2がssh-agentに登録され
パスフレーズの入力が必要無くなり、仮想端末の状態で始まります。
さらに新規仮想端末を立ち上げてもパスフレーズは必要無し。
ネックとしては登録出来る鍵の数が限られます。。
登録してる鍵の数が6を超えると
「Too many authentication failures for ...」と
エラーが出る時があります。
これは接続するサーバ側の設定で
MaxAuthTries が6回(デフォルト)となっているからです。
この制限があっても、だいぶ効率化出来たので
物ぐさな自分でも十分です。
秘密鍵を沢山抱えている方の
作業が少しでも効率化しますように…。