我已经阅读了 net-ssh 文档,但我仍然感到困惑。我可以手动进行身份验证(使用 ssh -i ...),也可以将密钥放在文件中并使用 :keys 参数。但是,我不想使用 :keys 参数,我想使用 :key_data 参数。任何人都可以举一个工作的例子吗?出于某种原因,直接将字符串输入 :key_data 不起作用,它会给出错误:“既不是 PUB key 也不是 PRIV key::nested asn1 错误”。当然,我用谷歌搜索过,它基本上告诉我确保密钥是 PEM 格式。而且,当然是。有任何想法吗?如果需要,我可以提供更详细的信息...
问问题
4695 次
2 回答
13
我看到这个问题已经很老了,但无论如何我都会把答案告诉你,以防万一我遇到同样的问题并且我刚刚解决了它。
在以下代码中,请注意包含 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
于 2012-07-01T00:29:02.443 回答
9
我正在添加更多信息,这些信息是我在图书馆周围挖掘后发现的......
从 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
于 2015-02-13T17:14:36.290 回答