我现在已经成功使用了capistrano一段时间,而且在我失去部署能力的每个项目中突然间。
环境:
我没有使用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)时发生。
我在这里完全不知所措。有什么想法吗?
答案 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 ......
gem 'net-ssh', '2.7.0'
bundle update net-ssh
bundle
(只是为了确保一切正常“gem uninstall net-ssh -v 2.8.0
如果您是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日发布了一个版本,解决了这个问题和其他问题。
只需将其粘贴到您的Gemfile:
gem'net-ssh','〜&gt; 2.8.1',:git =&gt; “https://github.com/net-ssh/net-ssh”
运行捆绑安装
答案 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主机连接可能会遇到问题。当您重新启动并输入部署命令时,它会要求添加标识已知的主机。