我一直在尝试用.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没问题,所以我确定没有远程身份验证问题。
任何帮助表示赞赏
答案 0 :(得分:0)
可能是SSLv3的问题。重新生成您的ssl证书,然后重试。
答案 1 :(得分:0)
对我来说,问题是私钥的格式。对于某些(仍然无法解释的)原因,Ruby不喜欢.ppk
扩展名。
绕过它
ssh-keygen -t rsa
(或dsa,如果您想要更安全的格式)在远程复选框上生成公钥/私钥对。给它一个文件夹,放置两个键。
将公钥添加到〜/ .ssh / authorized_keys文件
使用WinSCP将私钥移动到本地计算机并将其用作NET :: SSH的密钥或key_data
答案 2 :(得分:0)
我目前的解决方案是要求用户将密钥添加到用户代理:
eval `ssh-agent -s`
ssh-add
虽然某些用户可能不知道上述内容,但这是让您的 shell 知道用于远程访问的密钥的标准方法。它处理输入密码,以便在处理带有密码的凭据时进行更多的单点登录。
最新版本的 net ssh 可能不再有这个问题