私の日常では、さまざまなマシンにsshする必要があります。
新しいシェルセッションを開始すると、デフォルトのid_rsaのみがsshキーチェーンに追加されます。
ssh-add〜/ .ssh/*
ただし、これは〜/ .ssh/configのようなものを追加しようとすると失敗します
find
/grep
を使用して、どうすればonly有効な秘密鍵ファイルを追加できますか?
少し複雑ですが:
for possiblekey in ${HOME}/.ssh/id_*; do
if grep -q PRIVATE "$possiblekey"; then
ssh-add "$possiblekey"
fi
done
allのキーを~/.ssh/config
にそれぞれIdentityFile
ディレクティブで追加することもできますoutsideHost
ディレクティブの:
# Global SSH configurations here will be applied to all hosts
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_project1
IdentityFile ~/.ssh/id_someotherkey
Host somespecifichost.example.com
IdentityFile ~/.ssh/id_specifichostonlykey
後者の正直に優れた方法には、「キーリング」に明示的に追加せずに、追加した新しいキーを突然取得しないという特典があります。
これを行うには、次のコマンドを考え出しました。
find ~/.ssh/ -type f -exec grep -l "PRIVATE" {} \; | xargs ssh-add &> /dev/null
これは、find
を含む。sshディレクトリ内のすべてのファイルをPRIVATE
し、秘密鍵ファイルの名前/パスをssh-add
に渡します。
実際にはfind
は必要ありません。l
フラグを使用して再帰的なgrepを使用するだけで、一致するファイル名のみを送信できます。
grep -slR "PRIVATE" ~/.ssh/ | xargs ssh-add