Ruby NET :: SSH - 无法连接到远程服务器

时间:2015-06-15 10:38:31

标签: ruby net-ssh

我一直在尝试用.NET :: SSH gem将我的应用程序连接到远程服务器,但没有成功。问题似乎源于我需要使用私钥文件来验证登录。

require 'net/ssh'


def SSH(host, user, psw, keys, cmd)
  Net::SSH.start( host,
                   user,
                  :password => psw,
                  :host_key => "ssh-rsa",
                  :encryption => ["blowfish-cbc","aes256-cbc"],
                  :keys => keys,
                  :verbose => :debug,
                  :auth_methods => ["publickey","password"]
                  ) do|ssh|

    @result = ssh.exec!(cmd)
    puts @result
  end
  return @result
end

调试输出给出了错误:

  

无法加载私钥文件`C:/path_to_key/key.ppk':ArgumentError(无法解析PKey)

我已经看到很多关于此错误的示例,其中附加了No start line,但是没有找到任何建议的解决方法。我甚至卸载并重新安装了.NET :: SSH gem。

使用相同的凭据连接puTTY / WinSCP没问题,所以我确定没有远程身份验证问题。

任何帮助表示赞赏

3 个答案:

答案 0 :(得分:0)

可能是SSLv3的问题。重新生成您的ssl证书,然后重试。

答案 1 :(得分:0)

对我来说,问题是私钥的格式。对于某些(仍然无法解释的)原因,Ruby不喜欢.ppk扩展名。

绕过它

  1. ssh-keygen -t rsa(或dsa,如果您想要更安全的格式)在远程复选框上生成公钥/私钥对。给它一个文件夹,放置两个键。

  2. 将公钥添加到〜/ .ssh / authorized_keys文件

  3. 使用WinSCP将私钥移动到本地计算机并将其用作NET :: SSH的密钥或key_data

答案 2 :(得分:0)

我目前的解决方案是要求用户将密钥添加到用户代理:

eval `ssh-agent -s`
ssh-add

虽然某些用户可能不知道上述内容,但这是让您的 shell 知道用于远程访问的密钥的标准方法。它处理输入密码,以便在处理带有密码的凭据时进行更多的单点登录。

最新版本的 net ssh 可能不再有这个问题