MacOS 钥匙串访问无限期保留 SSH 密码

Cha*_*ieH 1 security ssh keychain rsa macos

为了方便起见,我希望 MacOS 保留我的 RSA 密码,但不是无限期地保留(为了安全起见)。我相信 SSH 将使用此 SSH 配置的钥匙串访问

Host *
     UseKeychain true
Run Code Online (Sandbox Code Playgroud)

我相信它将使用具有以下配置的ssh-agent :

Host *
     AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)

几个问题:

  1. 似乎有两个选项:ssh-agentKeychain Access如果您需要临时存储密码的便利,标准是什么?
  2. 如何识别并清除钥匙串访问中默认私钥的密码?我看到一个未命名的私钥,但我不想在不确定它是我存储的 SSH 密钥的情况下删除它
  3. 如果我想定期清除任何私钥密码,最好的选择是什么?我可以在 cron 作业下使用ssh-add -D

cri*_*ret 5

在开始之前,我们先澄清几点:

  • macOS 将允许您将私钥密码存储在 macOS 钥匙串中。
  • ssh-agent(在 macOS 或任何系统上)将解密的私钥保存在内存中

这种区别对于回答您的问题很重要。

  1. 似乎有两个选项:ssh-agent 或 Keychain Access。

不完全是。请参阅上面的说明。UseKeychain yes如果您在 中使用该指令~/.ssh/config,则连接到ssh-agent套接字的任何程序都将允许ssh-agent访问钥匙串以获取密码以解密您的私钥。如果您使用该AddKeysToAgent yes指令,那么解密的密钥将存储在代理中以供将来使用。查看另一个相关问题也很有用。

...如果您需要临时存储密码的便利,标准是什么?

(据我所知)macOS 无法暂时存储密码。然而,可以得到一个部分令人满意的解决方案,达到几乎相同的效果——请参见下面问题 3 的答案。

  1. 如何识别并清除钥匙串访问中默认私钥的密码?我看到一个未命名的私钥,但我不想在不确定它是我存储的 SSH 密钥的情况下删除它。

如果您在 Mac 上打开“钥匙串访问”并搜索ssh,您可能不会看到 ssh 密钥密码。从 macOS Sierra (10.12) 开始,Apple 移动了ssh存储的钥匙串密钥。要查看它,您需要选择“查看>>显示不可见项目”,然后 ssh 密钥密码条目将可见。

您看到的“未命名私钥”很可能是其他 RSA(或 DSA)密钥。

  1. 如果我想定期清除任何私钥密码,最好的选择是什么?ssh-add -D我可以在 cron 作业下使用。

虽然您可以执行ssh-add -Dcron 作业,并且它可能会执行您想要的一些操作,但它不会从钥匙串中删除密码短语。ssh-agent它只会清除所有解密私钥运行的内存。如果您UseKeychain yes的配置中有该密钥,ssh-agent下次需要时会很乐意重新解密该密钥(请参阅上面问题 1 的答案)。

满足您不希望解密密钥始终可用的隐含愿望的一种替代方法是关闭UseKeychainAddKeysToAgent,如下所示:

Host *
  UseKeychain no
  AddKeysToAgent no
Run Code Online (Sandbox Code Playgroud)

然后,使用选项手动将ssh-agent具有有限生命周期的密钥添加到运行中,如下所示:-t <lifetime>ssh-add

ssh-add -t 4h ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

这会将您的(默认)RSA 密钥添加到代理,其生命周期为 4 小时。四小时后,钥匙将自动移除。

据我所知,没有指令让您的用户~/.ssh/config指定添加到代理的任何密钥的默认生命周期,系统中也没有办法sshd_config。但是,可能有一种方法可以告诉 macOS 使用该选项以默认生命周期启动代理-t <lifetime>。对于勇敢者来说,启动代理 plist 文件存储在/System/Library/LaunchAgents/com.openssh.ssh-agent.plist.

另一种较旧的、可能仍然相关的方法是在睡觉时锁定钥匙链。