查找用于验证与 Objective-C 的 SSH 连接的适当密钥

Finding appropriate keys to use for authenticating an SSH connection with Objective-C

我使用过的几个打开 SSH 连接的本机 Mac 应用程序似乎具有这种神奇的能力,可以找到合适的 public+ 私钥用于连接(如果存在)然后呈现系统钥匙串对话框要求用户输入密码来解密私钥。我想在我的应用程序中这样做。这究竟是如何工作的?

我目前正在使用 https://github.com/Lejdborg/NMSSH 作为 libssh 的 Objective-C 包装器,它提供了通过 public+私钥进行身份验证的方法,但据我所知我会必须弹出一个文件打开对话框并让用户 select 需要的密钥(不理想)并显示我自己的密码对话框来代替系统的。

它为原生应用程序工作的方式是 ssh-agent。自 Leopard 以来的 MacOS 内置了随系统启动的自定义代理。

ssh 应用程序会自动尝试加载到代理中的身份,一旦添加了受密码保护的身份,代理就会显示钥匙串访问对话框。

您可以使用 ssh-add 程序向代理添加身份,然后 ssh 就可以正常工作了。

请注意,代理中的密钥优先于命令行中提供给 ssh 的密钥(通过 -i 参数)。有时这会使 ssh 失败,因为错误尝试太多(在尝试所有加载的 ssh 代理密钥时)

我不确定代理是否有库接口;它使用 Unix 域套接字与 sshssh-add 程序通信。

https://help.github.com/articles/working-with-ssh-key-passphrases/ https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ssh-agent.1.html