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

Ruby NET::SSH - Unable to connect to remote server

几天来我一直在尝试使用 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

调试输出给我错误:

Could not load private key file `C:/path_to_key/key.ppk': ArgumentError (Could not parse PKey)

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

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

感谢任何帮助

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

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

绕过它

  1. ssh-keygen -t rsa(如果您想要更安全的格式,则为 dsa)以生成 public/private 密钥对。给它一个文件夹,在其中放置两个密钥。

  2. 将 public 密钥添加到 ~/.ssh/authorized_keys 文件

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

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

eval `ssh-agent -s`
ssh-add

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

最新版本的 net ssh 可能不再存在此问题