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

时间:2014-05-18 11:10:15

标签: ruby ssh

我使用Net :: SSH自动访问,使用密钥身份验证从ruby程序中删除主机。该程序没有规定用户应该放置私钥的位置,而是依靠用户的SSH代理来提供所需的密钥(应该如此)。

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

假设我知道用户应该拥有什么私钥(由密钥指纹指定),我如何从ruby执行此检查 - 然后执行ssh-add -l并轻击输出?

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

1 个答案:

答案 0 :(得分:1)

我想出来了 - 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遍历所有可用的标识,包括那些可以从代理商那里获得的。