2

这很奇怪。我在主机上添加了我的公钥。我可以简单地运行

ssh -p <port> -l <username> hostt.com

它只是打开远程外壳。我什至可以在同一台机器上运行我的 capistrano 脚本进行部署。但是当我尝试连接下面这个简单的 ruby​​ 脚本时

require 'rubygems'
require 'net/ssh'

Net::SSH.start("hostt.com", 
               :port => <port>, 
               :username => <username>
              ) do |session|
  puts session.pwd
end

它立即拒绝,但有以下例外:

`initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)

我在这里有什么遗漏吗?

感谢你的帮助。

4

2 回答 2

3

好的,几天后,当我回顾这个问题时,我通过以下调整获得了快速成功:

Net::SSH.start("<host>", "<user>", :port => "<port>") { |ssh|
  puts "logged in"
  puts ssh.exec!("ls -l")  
} rescue puts "failed to connect."

所以与前一个的区别在于用户名,在这种情况下,它作为第二个参数而不是像选项键一样传递。

于 2011-01-17T11:22:57.753 回答
0

您可能需要提供 SSH 密钥的位置,或与您在 SSH.start 参数中提供的用户名一起使用的密码。对于键,您需要将映射值作为数组传递:keys => ["path_to_key"]。我不确定为什么要以这种方式设置 api,但确实如此。

于 2011-01-10T14:30:31.670 回答