我正在尝试在远程服务器上执行几个命令,并且作为身份验证方法,我正在使用公钥。
公钥在服务器上配置正确,我可以连接到它,而系统没有系统提示我输入密码:
ssh root@example.com
所以这就是我在代码中所做的:
Net::SSH.start(host, user, :keys=>["~/.ssh/id_rsa","~/.ssh/id_rsa.pub"]) do |ssh|
ssh.exec "service nginx reload"
end
在本地计算机上,一切正常,在生产服务器上,我收到错误。
Net::SSH::AuthenticationFailed: Authentication failed for user root@example.com
我做了一些谷歌搜索,我已经尝试回溯到net_ssh 2.7.0,但没有运气,同样的问题。我也尝试将相对路径替换为绝对路径,在我的例子中是/root/.ssh / ... 我尝试添加一个选项
:auth_methods => ['publickey']
但仍然没有运气。
我也确定密钥位于正确的路径中。
编辑1
值得注意的是,在生产rails控制台中运行时,这非常有效。
编辑2
此处的症状类似于此问题中的症状:Net::SSH works from production rails console, AuthenticationFailed from production webapp 除了我的应用程序从root运行,因此不应该是权限问题。
编辑3
我暂时回到密码验证功能正常但我真的很想使用密钥验证。
非常感谢您对此问题的任何帮助。