在我们开始之前,让我们澄清几点:
- macOS将允许您将私钥密码存储在macOS 密钥链中。
- ssh-agent(在macOS或任何系统上)将解密的私钥保存在内存中。
区别对于回答您的问题非常重要。
- 似乎有两种选择:ssh-agent或Keychain Access。
不完全是。见上文澄清。如果你UseKeychain yes
在你的指令中使用该指令~/.ssh/config
,那么连接到ssh-agent
套接字的任何程序都将允许ssh-agent
进入密钥链以便密码来解密你的私钥。如果您还使用该AddKeysToAgent yes
指令,则该解密密钥将存储在代理中以供将来使用。查看其他相关问题也很有用。
...如果您需要临时存储密码短语的便利,标准是什么?
有(据我所知)没有办法让macOS 临时存储密码。然而,可以获得几乎相同效果的部分令人满意的解决方案 - 参见下面问题3的答案。
- 如何识别和清除Keychain Access中默认私钥的密码?我看到一个未命名的私钥,但我不想删除它而不确定它是我存储的SSH密钥。
如果您在Mac上打开Keychain Access并搜索ssh
,则可能无法看到您的ssh密钥密码。从macOS Sierra(10.12)开始,Apple移动了ssh
存储的钥匙串密钥。要查看它,您需要选择“查看>>显示不可见项目”,然后将显示ssh密钥密码条目。
机会是您看到的“未命名的私钥”是其他一些RSA(或DSA)密钥。
- 如果我想定期清除任何私钥密码,最好的选择是什么?我可以
ssh-add -D
在cron工作下使用。
虽然你可以投入ssh-add -D
一个cron工作,它可能会做你想要的一些,但它不会删除钥匙串中的密码。它只会清除ssh-agent
所有解密私钥的运行记忆。如果您UseKeychain yes
在配置中,ssh-agent
将在下次需要时再次重新解密密钥(请参阅上面对问题1的回答)。
一个替代方案,以满足您的隐含的欲望没有解密的密钥提供所有的时间是关闭两个UseKeychain
和AddKeysToAgent
,如:
Host *
UseKeychain no
AddKeysToAgent no
然后,ssh-agent
使用-t <lifetime>
选项to ssh-add
,在有限的生命周期内手动为您的运行添加密钥,如:
ssh-add -t 4h ~/.ssh/id_rsa
这会将您的(默认)RSA密钥添加到代理,生命周期为4小时。四小时后,密钥将自动删除。
据我所知,您的用户没有指示~/.ssh/config
指定添加到代理的任何密钥的默认生存期,系统中也没有办法sshd_config
。但是,可能有一种方法可以告诉macOS使用该-t <lifetime>
选项以默认生存期启动代理。对于intrepid,启动代理plist文件存储在/System/Library/LaunchAgents/com.openssh.ssh-agent.plist
。
另一种较旧的,可能仍然相关的方法是在睡觉时锁定钥匙串。