ssh-add 添加 .ssh 目录中的所有私钥

ssh-add 添加 .ssh 目录中的所有私钥

在我的日常生活中,我需要SSH到各种机器,我对所有这些机器都有不同的私钥。

当我启动新的 shell 会话时 - 只有我的默认 id_rsa 被添加到 ssh 密钥链 - 我一直在运行

ssh-添加 ~/.ssh/*

然而,当添加诸如〜/ .ssh /配置

使用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

您实际上并不需要find,您可以使用递归 grep 使用该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 循环的问题(如已接受的答案中所示)是,即使所有密钥使用相同的密码,您仍将需要输入密码。

相关内容