Capistrano:使用 git server 和 ssh 进行部署



我有一个Capistrano脚本,可以将一些rails代码部署到ubuntu盒子中。 我的 git 存储库不在 github 上,而是在我们公司的服务器上。 我已经像这样配置了卡皮斯特拉诺...

设置:存储库,"ssh://non-root-user@mydomain.com/opt/git/hub/app.git">

当我使用复制功能进行部署时...

设置:d eploy_via, :copy

它可以毫无问题地工作。 但是当我使用远程缓存进行部署时...

set :deploy_via, :remote_cache

它失败并显示错误消息

 Permission denied, please try again.←[0m
 Permission denied, please try again.←[0m
  Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).←[0m
 fatal: The remote end hung up unexpectedly

这是在deploy:update_code任务期间。 我的猜测是此错误出现的原因可能如下?

1 - 也许我需要设置一些密钥? 我的 git 存储库服务器与目标部署服务器不同,但两者都由我公司托管。 建议赞赏。

编辑:我试过ssh_options[:forward_agent] = 真default_run_options[:p ty] = true,它会提示我输入密码,我会输入正确的密码,但它会说无论如何权限被拒绝。 我不再以 root 身份部署。

我认为你的假设都是正确的。卡皮斯特拉诺正在尝试以root身份登录。您可以执行2个选项。

  1. 打开 root 密码(假设 PermitRootLogin 在/etc/ssh/sshd_config 中默认为"是"(

(remote)$ sudo passwd root

    在本地
  1. 计算机上复制 id_rsa.pub 的内容,并附加到远程计算机上的/root/.ssh/authorized_keys 文件。

如果你没有 ~/.ssh/id_rsa.pub,你可以在本地计算机上设置密钥,如下所示:

(local)$ ssh-keygen -t rsa

第二个选项是首选,因为除了authorized_keys之外,您不必在远程计算机上配置任何其他内容。

参考链接1 链接2

部署服务器上的可用密钥可能无法对存储库进行身份验证。

可以将更新的密钥注册到部署服务器,就像注册其他密钥一样,但也可以使用代理转发(Github 文章(:

它允许您使用本地SSH密钥,而不是将无密码密钥留在服务器上。

Capistrano 告诉您的 ssh 客户端使用代理转发:

set :ssh_options, :forward_agent => true

最新更新