我有(并且需要)多个 ssh 密钥。我经常在一个会话中需要所有这些,并且我配置 ssh,以便它自动为正确的服务器选择正确的一个,所以我想我应该编写一个脚本在登录时将它们全部添加。我把这个放进去.profile
:
eval $(ssh-agent)
ssh-add ~/list/of/ ~/paths/to/keys
效果很好,因为它尝试在登录时添加密钥并询问我使用的密码ssh-askpass
(注意小写:我的意思是程序,而不是环境变量)。
不过,我也用来pass
存储我的密码,包括我的各种 ssh 密钥的密码。我知道 的 gpg 身份验证的密码pass
,但是我当然不会记住 pass 中存储的所有密码,这使得 ssh 提示输入这些密码毫无用处。
我如何ssh-add
询问pass
不同密码的密码(然后pass
提示我输入 gpg 身份验证密码,而不是 ssh 提示我输入单独的 ssh 密码)?
中的密码pass
与 ssh id 文件的命名方式不同,而是以类似模式的方式命名(例如,对于 ssh id,id_rsa_personal
相应的密码为 (~/.password-store/) ssh/personal
)。
也许完全绕过 pass 包装器的原始 gpg 脚本会更好?
感谢所有帮助!
答案1
这对我有用:
if [[ -v PASS_PATH ]]; then
pass $PASS_PATH
exit $?
fi
for I in \
"$HOME/.ssh/id_key_1_ed25519;your/path/in/pass/for/key1" \
"$HOME/.ssh/id_key_2_rsa;your/path/in/pass/for/key1"
do
SSHKEYPATH=${I%;*}
PASS=${I#*;}
SSH_ASKPASS_REQUIRE="force" SSH_ASKPASS="$0" PASS_PATH="$PASS" ssh-add $SSHKEYPATH < /dev/null
done
这主要是基于如何使 ssh-add 从文件中读取密码?并使用< /dev/null
强制ssh-add
真正调用askpass程序。