Ruby on rails SSHKit::Runner::ExecuteError

Ruby on rails SSHKit::Runner::ExecuteError,ruby-on-rails,bitbucket,capistrano3,Ruby On Rails,Bitbucket,Capistrano3,$bundle exec cap生产部署 (回溯仅限于导入的任务)cap已中止! SSHKit::Runner::ExecuteError: 作为执行时发生异常 Psara@sakura:git退出状态:128 git标准输出:未写入git stderr:权限被拒绝(公钥)。 致命:远程端意外挂起 SSHKit::命令::失败: git退出状态:128 git stdout:什么都没写 git stderr:权限被拒绝(公钥)。 致命:远程端意外挂起 Tasks:TOP=>git

$bundle exec cap生产部署

(回溯仅限于导入的任务)cap已中止!
SSHKit::Runner::ExecuteError:
作为执行时发生异常 Psara@sakura:git退出状态:128 git标准输出:未写入git stderr:权限被拒绝(公钥)。
致命:远程端意外挂起

SSHKit::命令::失败:
git退出状态:128
git stdout:什么都没写
git stderr:权限被拒绝(公钥)。
致命:远程端意外挂起

Tasks:TOP=>git:check(通过使用--trace运行task查看完整跟踪) 部署失败,出现错误:
作为执行时发生异常Psara@sakura:
git退出状态:128 git标准输出:未写入任何内容
git stderr:权限被拒绝(公钥)。

致命:远程端意外挂起

*

部署.rb

设置:应用程序“Psara”
集合:repo_url,'git@bitbucket.org:cblough/psara.git'
设置:将_部署到“/home/Psara/Psara”
设置:默认运行选项:pty=>true

名称空间:deploydo

在:重新启动后,:清除缓存do 在角色(:web)上,在::组中,限制:3,等待:10 #在这里,我们可以做任何事情,例如: #在release_路径中 #执行:rake,“缓存:清除” #结束 结束

结束

set:ssh_选项,{forward_代理:true,paranoid:true,键: “~/.ssh/id\u rsa”}

*

production.rb

设置:stage,:staging
设置:rails_env,:生产

角色:应用程序%w{sakura}
角色:web,%w{sakura}
角色:db,%w{sakura}

服务器“sakura”,用户:“Psara”,角色:%w{web app},my_属性:>:my_值

set:ssh_选项,{
密钥:%w(~/.ssh/id\u rsa),
转发代理:false,}



如果您能教我如何解决这个问题,我将非常高兴。

我已经在bitbucket上添加了公钥,但它不起作用。

*

SSH代理转发报告


  • [成功]
    repo\u url
    设置正常

  • [成功]ssh私钥文件存在

  • [成功]
    ssh代理程序
    进程似乎正在本地运行

  • [成功]
    ssh-agent
    进程被
    ssh-add
    命令识别

  • [成功]将ssh私钥添加到
    ssh代理

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

  • [成功]所有使用无密码登录的主机

  • [成功]
    转发\u代理
    所有主机都正常

  • [成功]ssh代理已成功转发到远程主机

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


  • 看来SSH代理转发设置正确!你可以继续 使用部署过程

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


    正如回溯所说,这可能与ssh公钥有关。我建议您使用进行故障排除。您将得到一份报告,精确地说明设置中出现了什么问题


    免责声明,我是
    capistrano ssh doctor
    插件的作者。

    请确保您的计算机上运行了ssh代理,因为您正在使用ssh转发,您的本地密钥应该能够从bitbucket访问和克隆您的repo。您可以通过以下方式运行代理程序:

    eval `ssh-agent`
    ssh-add ~/.ssh/id_rsa
    
    有关ssh转发的更多信息,请访问

    您应该手动检查的另一件事是您可以使用ssh连接到服务器(您的公钥应该添加到服务器上的
    ~/.ssh/authorized_keys
    ),当然,您可以在本地克隆您的repo(这可能是您能够做到的)

    更新:


    现在我已经意识到,您将转发用于生产,在这种情况下,您应该确保服务器上的密钥对(您必须拥有它,因为转发已关闭)能够从bitbucket克隆repo,您也可以尝试手动在服务器上克隆。

    请编辑您的问题以使用代码块,以便我们可以阅读它。也要清楚地定义你的错误。@Shion Yamaguchi:你是如何解决你的问题的,因为我也卡住了!!!和你在同一页上吗?嘿,拉斯塔谢普,甚至我也面临着同样的问题。。我经历了,但无法解决。@拉斯塔谢普,我在这里有一个类似的问题:。Capistrano是否登录到生产服务器,然后尝试将代码从存储库拉到生产服务器?如果是这样的话,有没有办法让Capistrano将代码从存储库推送到生产服务器?@massaskillz是的,Capistrano只是通过SSH登录到您的机器,然后执行由其DSL生成的命令。您可以创建自定义Capistrano任务来执行任何您想要的操作。不幸的是,我认为从存储库“推送”代码是不可能的,可以(通过scp命令)将代码从主机复制到服务器。