在我的日常生活中,我需要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 循环的问题(如已接受的答案中所示)是,即使所有密钥使用相同的密码,您仍将需要输入密码。