web-dev-qa-db-ja.com

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

私の日常では、さまざまなマシンにsshする必要があります。

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

ssh-add〜/ .ssh/*

ただし、これは〜/ .ssh/configのようなものを追加しようとすると失敗します

find/grepを使用して、どうすればonly有効な秘密鍵ファイルを追加できますか?

6
Matt Clark

少し複雑ですが:

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

後者の正直に優れた方法には、「キーリング」に明示的に追加せずに、追加した新しいキーを突然取得しないという特典があります。

13
DopeGhoti

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

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

これは、findを含む。sshディレクトリ内のすべてのファイルをPRIVATEし、秘密鍵ファイルの名前/パスをssh-addに渡します。

1
Matt Clark

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

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

0
user2245192