为了方便起见,我希望 MacOS 保留我的 RSA 密码,但不是无限期地保留(出于安全考虑)。我相信 SSH 将使用钥匙串访问使用此 SSH 配置
Host *
UseKeychain true
我相信它将利用ssh 代理使用以下配置:
Host *
AddKeysToAgent yes
几个问题:
- 似乎有两个选择:ssh 代理或者钥匙串访问. 如果您需要便利暂时地存储密码,标准是什么?
- 如何在 Keychain Access 中识别和清除默认私钥的密码?我看到一个未命名的私钥,但我不想在不确定它是我存储的 SSH 密钥的情况下删除它
- 如果我想定期清除任何私钥密码,最好的选择是什么?我可以使用ssh-添加-D在 cron 任务下
答案1
在开始之前,我们先澄清几点:
- macOS 允许你存储私钥密码短语在 macOS 钥匙串中。
- ssh-agent(在 macOS 或任何系统上)保存解密私钥在记忆中。
区别对于回答您的问题很重要。
- 似乎有两个选项:ssh-agent 或 Keychain Access。
不完全是。请参阅上面的说明。如果您UseKeychain yes
在 中使用指令~/.ssh/config
,则任何连接到套接字的程序ssh-agent
都将允许ssh-agent
进入 Keychain 获取密码以解密您的私钥。如果您还使用指令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>
ssh-add
ssh-add -t 4h ~/.ssh/id_rsa
这会将您的(默认)RSA 密钥添加到代理,有效期为 4 小时。四小时后,密钥将被自动删除。
据我所知,没有指令让用户~/.ssh/config
指定添加到代理的任何密钥的默认生存期,系统中也没有方法sshd_config
。但是,可能可以使用选项来告诉 macOS 以默认生命周期启动代理-t <lifetime>
。对于勇敢者来说,启动代理 plist 文件存储在 中/System/Library/LaunchAgents/com.openssh.ssh-agent.plist
。
其他较旧的、可能仍然相关的方法睡觉时锁上钥匙链。