【问题标题】:Ruby NET::SSH - Unable to connect to remote serverRuby NET::SSH - 无法连接到远程服务器
【发布时间】:2021-04-13 00:07:15
【问题描述】:

几天来,我一直在尝试使用 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 (Could not parse PKey)

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

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

任何帮助表示赞赏

【问题讨论】:

    标签: ruby net-ssh


    【解决方案1】:

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

    【讨论】:

    • 如果这是问题,肯定会影响通过 puTTY 连接的能力?
    • 我认为putty在解析key_pair文件时更加健壮。
    【解决方案2】:

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

    绕过它

    1. ssh-keygen -t rsa(或 dsa,如果您想要更安全的格式)以生成公钥/私钥对。给它一个文件夹来放置两个密钥。

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

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

    【讨论】:

      【解决方案3】:

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

      eval `ssh-agent -s`
      ssh-add
      

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

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

      【讨论】:

        猜你喜欢
        • 2017-08-01
        • 2015-10-09
        • 2023-01-30
        • 1970-01-01
        • 1970-01-01
        • 2020-06-17
        • 1970-01-01
        • 2021-05-18
        • 2020-07-05
        相关资源
        最近更新 更多