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
扩展。
绕过它
ssh-keygen -t rsa
(如果您想要更安全的格式,则为 dsa)以生成 public/private 密钥对。给它一个文件夹,在其中放置两个密钥。
将 public 密钥添加到 ~/.ssh/authorized_keys 文件
使用 WinSCP 将私钥移动到本地计算机并将其用作密钥或 key_data for NET::SSH
我目前的解决方案是要求用户将密钥添加到用户代理:
eval `ssh-agent -s`
ssh-add
虽然某些用户可能不知道以上内容,但这是让您的 shell 知道使用哪些键进行远程访问的标准方法。它处理输入密码以获得更多单点登录处理带密码的凭据。
最新版本的 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
调试输出给我错误:
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
扩展。
绕过它
ssh-keygen -t rsa
(如果您想要更安全的格式,则为 dsa)以生成 public/private 密钥对。给它一个文件夹,在其中放置两个密钥。将 public 密钥添加到 ~/.ssh/authorized_keys 文件
使用 WinSCP 将私钥移动到本地计算机并将其用作密钥或 key_data for NET::SSH
我目前的解决方案是要求用户将密钥添加到用户代理:
eval `ssh-agent -s`
ssh-add
虽然某些用户可能不知道以上内容,但这是让您的 shell 知道使用哪些键进行远程访问的标准方法。它处理输入密码以获得更多单点登录处理带密码的凭据。
最新版本的 net ssh 可能不再存在此问题