objective-c - 查找适当的 key 以用于验证与 Objective-C 的 SSH 连接

标签 objective-c macos cocoa ssh libssh

我使用过的几个打开 SSH 连接的 native Mac 应用程序似乎具有这种神奇的能力,可以找到用于连接的适当的公钥+私钥(如果存在),然后显示系统钥匙串(keychain)对话框以要求用户输入解密私钥的密码。我想在我的应用程序中执行此操作。这到底是如何工作的?

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

最佳答案

它对 native 应用程序的工作方式是ssh-agent。自 Leopard 起,MacOS 就内置了随系统启动的自定义代理。

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

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

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

我不确定代理是否有库接口(interface);它使用 Unix Domain Socket 与 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

关于objective-c - 查找适当的 key 以用于验证与 Objective-C 的 SSH 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31795168/

相关文章:

objective-c - 我应该如何内存管理实例方法返回的对象?

objective-c - Objective C 将所有权设置为文件

objective-c - iOS Voip Socket 不会在后台运行

iphone - 我的浏览器应用程序在 iPad 模拟器中不断崩溃

python - 通过 Python 连接 CISCO Anyconnect VPN

objective-c - NSTextView,附加文本和平滑滚动

ios - 如何使用 Instagram API 获取我的关注者的关注者列表

ios - GPUImageView 的别名问题

macos - macports 构建错误

c - 为什么此代码在pow函数方面产生错误?