这很奇怪。我在主机上添加了我的公钥。我可以简单地运行
ssh -p <port> -l <username> hostt.com
只打开远程shell。我甚至可以在同一台机器上运行我的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)
这里有什么我想念的吗?
感谢您的帮助。
答案 0 :(得分:2)
好的,现在几天后我回头看看问题,我通过以下调整取得了快速的成功:
Net::SSH.start("<host>", "<user>", :port => "<port>") { |ssh|
puts "logged in"
puts ssh.exec!("ls -l")
} rescue puts "failed to connect."
所以与前一个的区别在于用户名,在这种情况下,用户名作为第二个参数而不是像选项键一样传递。
答案 1 :(得分:0)
您可能需要提供SSH密钥的位置或密码才能与您在SSH.start参数中提供的用户名一起使用。对于键,您需要将映射值作为数组:keys => ["path_to_key"]
传递。我不确定api为什么会这样设置,但确实如此。