我已经阅读了net-ssh文档,我仍然感到困惑。我可以手动验证(使用ssh -i ...),也可以将密钥放在文件中并使用:keys参数。但是,我不想使用:keys参数,我想使用:key_data参数。谁能举一个有效的例子?由于某种原因,直接将字符串输入:key_data不起作用,并且它给出错误:“既不是PUB键也不是PRIV键::嵌套asn1错误”。当然我用Google搜索了,它基本上告诉我要确保密钥是PEM格式的。而且,当然是。有任何想法吗?如果需要,我可以提供更详细的信息......
答案 0 :(得分:11)
我看到这个问题很老了,但我还是要把答案给你,以防万一我遇到同样的问题,我就解决了。
在下面的代码中,注意包含RSA密钥的字符串在任何地方都没有缩进。键的第二行没有任何前导空格。当我粘贴密钥时,TextMate把它放在那里。我删除了它,它就像一个魅力。
#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
HOST = '172.20.0.31'
USER = 'root'
KEYS = [ "-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAqccvUza8FCinI4X8HSiXwIqQN6TGvcNBJnjPqGJxlstq1IfU
kFa3S9eJl+CBkyjfvJ5ggdLN0S2EuGWwc/bdE3LKOWX8F15tFP0=
-----END RSA PRIVATE KEY-----" ]
Net::SSH.start( HOST, USER, :key_data => KEYS, :keys_only => TRUE) do|ssh|
result = ssh.exec!('ls')
puts result
end
答案 1 :(得分:7)
我添加了一些我在挖掘图书馆后发现自己的信息......
从2.9.2开始,如果你打算只使用key_data中提供的密钥,你还必须在加载key_data之前指定一组空白的密钥,否则它会加载一些默认密钥。
在我的情况下,它试图加载的其中一个身份文件是密码保护的,所以它问我我的密码,尽管我的意图是根本不使用该识别文件。
使用上面的示例,在2.9.2中,您可以通过执行以下操作获得相同的效果:
#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
HOST = '172.20.0.31'
USER = 'root'
KEYS = [ "-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAqccvUza8FCinI4X8HSiXwIqQN6TGvcNBJnjPqGJxlstq1IfU
kFa3S9eJl+CBkyjfvJ5ggdLN0S2EuGWwc/bdE3LKOWX8F15tFP0=
-----END RSA PRIVATE KEY-----" ]
Net::SSH.start( HOST, USER, :keys => [], :key_data => KEYS, :keys_only => TRUE) do|ssh|
result = ssh.exec!('ls')
puts result
end