我使用Net :: SSH自动访问,使用密钥身份验证从ruby程序中删除主机。该程序没有规定用户应该放置私钥的位置,而是依靠用户的SSH代理来提供所需的密钥(应该如此)。
问题是如果所需的私钥不可用,连接将失败 - 这可能会在程序中发生很长时间(SSH连接是我们做很多其他事后我们做的最后一件事 - 不是容易逆转 - 操作)。
假设我知道用户应该拥有什么私钥(由密钥指纹指定),我如何从ruby执行此检查 - 然后执行ssh-add -l
并轻击输出?
我查看了Net :: SSH KeyFactory类,但只有在知道存储它们的文件名时才允许加载私钥。
答案 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
遍历所有可用的标识,包括那些可以从代理商那里获得的。