我想使用钥匙串来管理 SSH 密钥的密码提示,但它应该 1) 仅在我实际使用密钥时询问它,2) 之后将其保存一段时间。目前我有2个选择:
$ eval `keychain --eval --agents ssh id_rsa`
——启动时总会要求输入密码,但随后它会保存它。$ eval `keychain --eval --noask --agents ssh id_rsa`
-- 启动时不会要求任何内容,但每次我使用该密钥时都会继续要求输入密码。
有没有办法结合这些方法的优点呢?
答案1
ssh-agent
OpenSSH 的最新版本让这一切变得简单:
正常启动
ssh-agent
,添加的键使用默认超时(例如 60 分钟):eval `ssh-agent -t 60m`
配置您
ssh
以将实际使用的密钥添加到代理中。添加新行到 ~/.ssh/config`:AddKeysToAgent yes
最新的 OpenSSH 7.2 中包含此功能。在以前的版本中,如果超时,您需要手动将密钥添加到代理,但可以使用 bash 函数非常简单地自动添加密钥,如下所示:
ssh() { /bin/ssh -o BatchMode=yes $* || \ ssh-add path/to/the-key && /bin/ssh $* }
想法:尝试在批处理模式下使用密钥进行连接(如果密钥不存在,则不会提示输入密码并失败),失败时,将密钥添加到代理并重新运行 ssh 命令。