使用Ruby的Net :: SSH检查代理是否有私钥可用

我使用Net :: SSH来自动化访问,使用密钥认证从ruby程序中删除主机。 该程序并没有规定用户应该把私钥放在哪里,而是依靠用户的SSH代理来提供所需的密钥(它应该)。

问题是如果所需的私钥不可用,连接将失败 - 这可能会在程序中发生很长的一段路(SSH连接是我们做了很多其他事情之后做的最后一件事情之一 - 不容易可逆 - 操作)。

假设我知道用户应该拥有什么私钥(如密钥指纹所指定的那样),那么如何从ruby执行此检查 - 除此之外,执行ssh-add -l并刷新输出?

我查看过Net :: SSH KeyFactory类,但只有在知道存储它们的文件的名称时才允许加载私钥。


我想通了 - Net::SSH::Authentication::KeyManager有我需要的:

hasidentity = false
Net::SSH::Authentication::KeyManager.new(nil?).each_identity do |i| 
  hasidentity |= i.fingerprint == 'my:ke:ys:fi:ng:er:pr:in:t'
end

KeyManager也有一个名为identities的集合,但据我所知,它只保存直接加载到Net :: SSH中的密钥,而each_identity遍历所有可用的身份,包括代理可用的身份。

链接地址: http://www.djcxy.com/p/25277.html

上一篇: Check if a private key is available from an agent using Ruby's Net::SSH

下一篇: how to dowload a file with PubkeyAuthentication=no option