Capistrano SSH :: AuthenticationFailed,不提示输入密码

时间:2014-02-04 18:19:46

标签: ruby-on-rails ruby deployment capistrano

我现在已经成功使用了capistrano一段时间,而且在我失去部署能力的每个项目中突然间。

环境:

  • os X(Mavericks)
  • ruby​​ 1.9.3p194
  • rvm(本地,不在服务器上)
  • rails 3.2 and up
  • RubyGems 1.8.25

我没有使用rsa_keys或任何我想要capistrano来提示用户和密码。突然它决定不要求密码,但确实要求用户。然后它回滚并给我以下错误。

[deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: sub.example.com (Net::SSH::AuthenticationFailed: Authentication failed for user user@sub.example.com)
connection failed for: sub.example.com (Net::SSH::AuthenticationFailed: Authentication failed for user user@sub.example.com)

这发生在我的个人笔记本电脑和我的iMac上。它在部署到两个不同的服务器(都是linux)时发生。

我在这里完全不知所措。有什么想法吗?

9 个答案:

答案 0 :(得分:94)

想出来!显然这个问题出现在net-ssh gem上。我最近安装了2.8.0版本,对我的开发环境进行了一些更新,这是原因。

我不确定为什么会失败,但gem uninstall net-ssh -v 2.8.0<为我修好了。

如果有人真正知道这是一个问题,或者我如何使用较新版本的net-ssh更正此问题,我会有兴趣听到它。

答案 1 :(得分:18)

由于宝石的依赖性,答案可能会破坏你的应用程序。

问题在于net-ssh正如Sparkmasterflex正确回答的那样,但是虽然这会让capistrano工作正常但它可能会破坏你的应用程序:

这些步骤为我修复了capistrano和rails ......

  1. 在您的Gemfile中添加gem 'net-ssh', '2.7.0'
  2. 运行bundle update net-ssh
  3. 运行bundle(只是为了确保一切正常“
  4. 运行gem uninstall net-ssh -v 2.8.0
  5. 如果您是rails用户,您现在应该可以同时运行rails服务器和capistrano。

答案 2 :(得分:11)

根据link发布的Zach Lipton的评论,我有一个不需要降级net-ssh的解决方法。将此代码放在config/deploy.rb

set :ssh_options, {
  config: false
  #Other options...
}

在我这样做之后,我又遇到了另一个错误,Error reading response length from authentication socket.找到了here的解决方案。在Bash提示符下执行以下命令:

$ eval $(ssh-agent)
$ ssh-add

答案 3 :(得分:8)

将net-ssh版本升级到2.8.1将解决问题。他们在2014年2月19日发布了一个版本,解决了这个问题和其他问题。

  1. 卸载您当前的net-ssh gem(gem install net-ssh -v'version')
  2. 只需将其粘贴到您的Gemfile:

    gem'net-ssh','〜&gt; 2.8.1',:git =&gt; “https://github.com/net-ssh/net-ssh

  3. 运行捆绑安装

答案 4 :(得分:8)

使用capistrano部署时遇到了同样的问题 Net :: SSH :: AuthenticationFailed:用户部署者@ IP

的身份验证失败

ssh-copy-id deployer @ ip

这会将您的密钥添加到服务器,您无需密码即可登录。

答案 5 :(得分:1)

这段代码对我有用:

group :development do
  #.....
  gem 'capistrano', "~> 2.15"
  gem "net-ssh", "~> 2.7.0"
  #.....
end

答案 6 :(得分:1)

set :ssh_options, {
 verbose: :debug
}

......帮了很多忙!

我遇到了一个问题,即我使用puttygen生成了公钥和私钥,并将私钥导出为OpenSSH,名称为<somename>.id_rsa。然后保存名为<somename>.id_rsa.pub的公钥。

(!)公钥puttygen保存是RFC 4716格式而不是PEM。公共密钥文件使用public后缀而不是pub -

答案 7 :(得分:1)

首先尝试使用以下命令连接到带有证书(file.pem)的服务器:

ssh -i "file.pem" user@yourServerIp

然后尝试运行cap production deploy。它解决了我的错误。我认为这是因为证书的时间限制已过期。

答案 8 :(得分:0)

如果以上所有解决方案都不起作用,请重启系统,因为net-ssh主机连接可能会遇到问题。当您重新启动并输入部署命令时,它会要求添加标识已知的主机。