SSHKit::Runner::ExecuteError

24

$ bundle exec cap production deploy

(仅限于导入的任务的回溯)cap中止!
SSHKit :: Runner :: ExecuteError:
当作为Psara@sakura执行时发生异常:git退出状态:128 git stdout:未写入 git stderr:Permission denied (publickey)。
致命错误:远程端意外断开

SSHKit :: Command :: Failed:
git退出状态:128
git stdout:未写入
git stderr:Permission denied (publickey)。
致命错误:远程端意外断开

Tasks:TOP => git:check(使用--trace运行任务以获取完整跟踪)出现错误,部署失败:
当作为Psara @sakura执行时发生异常:
git退出状态:128 git stdout:未写入
git stderr:Permission denied (publickey)。

致命错误:远程端意外断开

*

deploy.rb

set :application,'Psara'
set :repo_url,'git@bitbucket.org:CBLaughter/psara.git'
set :deploy_to,'/home/Psara/Psara'
set :default_run_options,:pty => true

namespace :deploy do

after :restart, :clear_cache do on roles(:web), in: :groups, limit: 3, wait: 10 do # 在此处我们可以执行任何操作,例如: # 在release_path中执行 # 执行:rake,'cache:clear' # end end end

end

set :ssh_options,{
forward_agent:true, paranoid:true, keys:“〜/.ssh/id_rsa” }

*

production.rb

set :stage,:staging
set :rails_env,:production

role:app,%w{sakura}
role:web,%w{sakura}
role:db,%w{sakura}

server 'sakura',user:'Psara',roles:%w {web app},my_property:>:my_value

set :ssh_options,{
keys:%w(〜/.ssh/id_rsa),
forward_agent:false, }

如果您能教我如何解决这个问题,我会很高兴。

我已经在Bitbucket上添加了一个公钥,但它没有起作用。

*

SSH代理转发报告


  1. [成功] repo_url 设置正确

  2. [成功] ssh私钥文件存在

  3. [成功] ssh-agent 进程在本地运行

  4. [成功] ssh-add 命令识别 ssh-agent 进程

  5. [成功] ssh私钥已添加到 ssh-agent

  6. [成功] 应用程序存储库可以从本地计算机访问

  7. [成功] 所有主机使用无密码登录

  8. [成功] 对于所有主机来说 forward_agent 设置正确

  9. [成功] ssh代理成功转发到远程主机

  10. [成功] 应用程序存储库可以从远程主机访问


看起来SSH代理转发已经正确设置了!您可以继续部署流程。

虽然所有测试都成功了,但仍然出现相同的错误。


请编辑您的问题,使用代码块以便我们阅读。同时清晰地定义您的错误。 - Philip Hallstrom
@Shion Yamaguchi:你是怎么解决这个问题的?我也卡住了!和你当时在同一页上。 - Gupta
2个回答

60

确保您的机器上正在运行ssh-agent,因为您使用ssh转发,您的本地密钥应该能够访问并克隆您在Bitbucket上的repo。您可以使用以下命令运行代理:

请确保您的机器上正在运行ssh-agent,因为您使用ssh转发,您的本地密钥应该能够访问并克隆您在Bitbucket上的repo。您可以使用以下命令运行代理:

eval `ssh-agent`
ssh-add ~/.ssh/id_rsa

关于ssh转发的更多信息,您可以在这里找到。

另外需要手动检查的事情是您是否能够通过ssh登录到您的服务器(在服务器上应该添加您的公钥至~/.ssh/authorized_keys),当然还有你是否能够从本地克隆你的仓库(这可能是您能做到的)。

更新:

现在我意识到您为生产环境开启了转发,因此您应该确保在您的服务器上有一个密钥对(因为转发被关闭),能够从Bitbucket克隆代码库,您也可以手动尝试在服务器上克隆。


嘿,Rastasheep,我也遇到了同样的问题...我研究了一下,但是没能解决。 - Gupta
@rastasheep 我这里也有类似的问题:http://stackoverflow.com/questions/36900222/ssh-agent-forwarding-with-capistrano-3-not-working-when-deploying-rails-app。Capistrano是否登录到生产服务器,然后尝试从存储库中拉取代码到生产服务器?如果是这样,是否有一种方法可以让Capistrano将代码从存储库推送到生产服务器? - massaskillz
@massaskillz,是的,Capistrano只需通过SSH登录到您的计算机,然后执行由其DSL生成的命令。您可以创建自定义Capistrano任务来执行任何操作。不幸的是,我认为无法从存储库“推送”,但可以通过scp命令将代码从主机复制到服务器。 - rastasheep

3
根据回溯信息,这很可能与SSH公钥有关。我建议使用capistrano-ssh-doctor来解决问题。您将获得一份报告,准确地说明安装过程中出了什么问题。
免责声明,我是capistrano-ssh-doctor插件的作者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接