Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ruby和net ssh,如何使用net::ssh.start的key_数据参数进行身份验证?_Ruby_Authentication_Net Ssh - Fatal编程技术网

使用Ruby和net ssh,如何使用net::ssh.start的key_数据参数进行身份验证?

使用Ruby和net ssh,如何使用net::ssh.start的key_数据参数进行身份验证?,ruby,authentication,net-ssh,Ruby,Authentication,Net Ssh,我已经阅读了netssh文档,但仍然感到困惑。我可以手动进行身份验证(使用ssh-I…),也可以将密钥放在文件中并使用:keys参数。但是,我不想使用:keys参数,我想使用:key\u数据参数。有人能举一个有效的例子吗?出于某种原因,直接将字符串馈送到:key_数据中是不起作用的,它会给出错误:“既不是PUB键也不是PRIV键::nested asn1 error”。当然我在谷歌上搜索过了,它基本上告诉我要确保密钥是PEM格式的。当然是这样。有什么想法吗?如果需要,我可以提供更详细的信息…我看

我已经阅读了netssh文档,但仍然感到困惑。我可以手动进行身份验证(使用ssh-I…),也可以将密钥放在文件中并使用:keys参数。但是,我不想使用:keys参数,我想使用:key\u数据参数。有人能举一个有效的例子吗?出于某种原因,直接将字符串馈送到:key_数据中是不起作用的,它会给出错误:“既不是PUB键也不是PRIV键::nested asn1 error”。当然我在谷歌上搜索过了,它基本上告诉我要确保密钥是PEM格式的。当然是这样。有什么想法吗?如果需要,我可以提供更详细的信息…

我看到这个问题已经很老了,但我还是要把答案扔给你,以防万一,因为我遇到了同样的问题,我刚刚解决了它

在下面的代码中,请注意,包含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

我正在添加更多的信息,这些信息是我在图书馆里翻找后发现的

从2.9.2开始,如果您打算只使用key_数据中提供的密钥,则在加载key_数据之前,还必须指定一组空白密钥,否则将加载一些默认密钥

在我的例子中,它试图加载的身份文件中有一个是受密码保护的,所以它要求我输入密码,尽管我根本不打算使用该身份文件

使用上面的例子,在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

获取
/usr/share/ruby/2.0/socket.rb:232:in'getaddrinfo':没有将数组隐式转换为字符串(TypeError)