ssh-add は、.ssh ディレクトリにすべての秘密鍵を追加します。

ssh-add は、.ssh ディレクトリにすべての秘密鍵を追加します。

日常生活で必須SSH私はそれらすべてに対して異なる秘密鍵を持っています。

新しいシェルセッションを開始すると、デフォルトのid_rsaのみがSSHキーチェーンに追加されます。引き続き実行されます。

SSH を追加 ~/.ssh/*

しかし、次のようなものを追加すると~/.ssh/config

find/を使用してgrepこれを行うにはどうすればよいですか?ただ有効な秘密鍵ファイルを追加しますか?

答え1

少し複雑ですが:

for possiblekey in ${HOME}/.ssh/id_*; do
    if grep -q PRIVATE "$possiblekey"; then
        ssh-add "$possiblekey"
    fi
done

追加することもできます。みんな鍵は~/.ssh/config独自のIdentityFile指示に従って提供されます。外部指示Host

# 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

正直なところ、より良い後者のアプローチは、「キーリング」に明示的に追加せずに追加した新しいキーを突然選択しないという追加の利点があります。

答え2

実際には必要はありません。再帰 grep を使用して、次のフラグを使用して一致するファイル名のみを送信findできます。l

grep -slR "PRIVATE" ~/.ssh/ | xargs ssh-add

答え3

これを行うには、次のコマンドを考えました。

find ~/.ssh/ -type f -exec grep -l "PRIVATE" {} \; | xargs ssh-add &> /dev/null

これ findです.ssh含めるディレクトリPRIVATE、秘密鍵ファイルの名前/パスをssh-add

答え4

id_正規表現を使用して、ドットサフィックスで始まるが終了しないすべてのファイルを一致させます.pub

find ~/.ssh -type f -regextype egrep -regex '.*/id_[^.]+$' | xargs ssh-add

forループを使用する際の問題(許可された回答に示されている)は、すべてのキーが同じパスワードを使用してもパスワードを入力する必要があることです。

関連情報