【问题标题】:Changing remote of git does not work on digital ocean更改 git 的遥控器在数字海洋上不起作用
【发布时间】:2016-02-16 05:49:39
【问题描述】:

我正在遵循this link 在数字海洋上部署一个 Rails 应用程序。当我遵循确切的步骤时,它工作得很好。但后来我意识到 github 存储库是公开的。我应该把它作为私人的。我创建了一个私有存储库并在本地更改了远程源。我将 ssh 密钥放在新的私有存储库中。删除了服务器中的旧应用程序文件夹。然后尝试从远程存储库克隆,但它要求输入密码。 (它应该使用 ssh 密钥??)。

我还更改了 deploy.rb 和 nginx.conf 以反映远程存储库的更改,然后给出了这个命令,cap production deploy:initial,但由于 git 中的身份验证失败,它失败了。

为什么会失败?为什么ssh key不生效?

【问题讨论】:

  • 我没有使用过digitalocean,但是如果您使用https://github.com/... 地址而不是git://,就会出现这种情况
  • 你在这方面有什么进展吗?找到解决方案还是仍有问题?

标签: ruby-on-rails git nginx ssh digital-ocean


【解决方案1】:

可能是因为您没有为数字海洋启用 ssh 转发?要验证,首先在本地电脑上编辑$HOME/.ssh/config:

host *
  ForwardAgent yes

现在尝试运行cap production deploy:initial。如果它现在无需密码也能工作,那么您应该更改 host * 以实际匹配您的 ssh 主机的主机名,因此 ForwardAgent 仅设置为数字海洋:

host digitalocean.com
  ForwardAgent yes

对于您的用例:ForwardAgent 使服务器能够使用您的本地 ssh 密钥,因此您的部署用户与您的本地用户具有相同的“ssh 权限”。

【讨论】:

    【解决方案2】:

    这看起来capistrano 仍在使用旧的 git 远程地址。当您更改远程 url 时,仅在 deploy.rb 等内部执行此操作是不够的,但是当您已经使用旧远程 url 部署它时,您必须手动更改服务器上 capistrono 部署目录中的文件repo/config之前。

    所以,如果您的deploy.rb(或deploy/production.rb)中有以下内容

    set :deploy_to, '/var/www/path/to/deploy'
    

    您必须手动编辑服务器上的文件

    /var/www/path/to/deploy/repo/config
    

    并修改遥控器的url = XXX 条目以匹配新的。

    【讨论】:

    • set deploy to 就是这样设置的 - set :deploy_to, "/home/#{fetch(:user)}/apps/#{fetch(:application)}"
    • user 和 application 之前也必须用 set 声明过。
    • 是的,我实际上也更改了存储库名称,因此也更改了应用程序名称,但忘记在设置的应用程序中更改它。但即便如此,它在克隆时也会要求输入密码。或使用 capistrano
    • 在您的本地机器上,它不会在克隆时询问,而是在您运行 cap production deploy:initial?
    • 在本地 git clone 工作。即使设置了 ssh 密钥,在服务器上 git clone 也会要求输入密码。在本地运行 cap production deploy:initial 时由于身份验证失败而失败。
    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2014-10-28
    • 2017-12-03
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多