我正在尝试使用Capistrano 3.x进行部署。
我在〜/ .ssh / config 文件中配置了代理转发:
Host git-codecommit.*.amazonaws.com
Hostname xxxx
ForwardAgent yes
IdentityFile /path/to/codecommit_rsa
我对ForwardAgent yes
的服务器连接做了同样的事情。
我验证了我的服务器允许在 / etc / ssh / sshd_config 文件中转发代理:
AllowAgentForwarding yes
INFO ----------------------------------------------------------------
INFO START 2017-11-18 16:09:44 -0500 cap production deploy
INFO ---------------------------------------------------------------------------
INFO [b43ed70f] Running /usr/bin/env mkdir -p /tmp as deploy@50.116.2.15
DEBUG [b43ed70f] Command: /usr/bin/env mkdir -p /tmp
INFO [b43ed70f] Finished in 1.132 seconds with exit status 0 (successful).
DEBUG Uploading /tmp/git-ssh-testapp-production-blankman.sh 0.0%
INFO Uploading /tmp/git-ssh-testapp-production-blankman.sh 100.0%
INFO [b1a90dc1] Running /usr/bin/env chmod 700 /tmp/git-ssh-testapp-production-blankman.sh as deploy@50.116.2.15
DEBUG [b1a90dc1] Command: /usr/bin/env chmod 700 /tmp/git-ssh-testapp-production-blankman.sh
INFO [b1a90dc1] Finished in 0.265 seconds with exit status 0 (successful).
INFO [b323707d] Running /usr/bin/env git ls-remote ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/fuweb HEAD as deploy@50.116.2.15
DEBUG [b323707d] Command: ( export GIT_ASKPASS="/bin/echo" GIT_SSH="/tmp/git-ssh-testapp-production-blankman.sh" ; /usr/bin/env git ls-remote ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/fuweb HEAD )
DEBUG [b323707d] Permission denied (publickey).
DEBUG [b323707d] fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我在这里缺少什么?
答案 0 :(得分:1)
正如评论中所讨论的,SSH代理必须在远程服务器以及包含密钥的本地计算机上运行,因为每端的代理需要合作转发密钥信息。代理(ssh-agent
)与SSH服务器(sshd
)不同。服务器接受连接,而(否则是可选的)代理管理凭证。
某些系统在登录时自动启动代理。要检查是否是这种情况,请登录服务器并运行:
$ env | grep SSH
...寻找SSH_AGENT_PID
或SSH_AGENT_SOCK
等变量。如果未启动,我们可以执行以下命令在服务器上启动代理:
$ eval "$(ssh-agent)"
正如我们所看到的,这个评估 ssh-agent
命令的输出,因为ssh-agent
返回一个脚本,在会话中设置一些所需的环境变量。
我们需要确保代理在登录时自动启动,以便它不会干扰部署过程。如果我们检查并确定代理不,实际上,从登录开始,我们可以将最后一个命令添加到“deploy”用户的〜/ .profile 文件中(或〜/ .bash_profile )。
另请注意,本地〜/ .ssh / config 中指定的主机必须与我们要将凭据转发到的主机的名称或IP地址匹配,不是最终使用转发密钥进行身份验证的主机。我们需要改变:
Host git-codecommit.*.amazonaws.com
......来:
Host 50.116.2.15
我们可以通过检查详细输出来验证SSH客户端是否执行代理转发:
$ ssh -v deploy@50.116.2.15
...
debug1: Requesting authentication agent forwarding.
...
当然,请务必使用ssh-add
向本地座席注册任何所需的密钥(这也可以在登录时自动完成,如上所示)。我们可以随时检查代理加载的密钥:
$ ssh-add -l
答案 1 :(得分:1)
您需要让Capistrano知道您希望它转发您的本地密钥。这可以通过进入项目的config/deploy.rb
并添加以下行来完成:
ssh_options[:forward_agent] = true
IIRC,Capistrano通过SSHKit远程执行命令,因此即使您调用ssh-agent
并在本地添加密钥,我也不能说它是否会持续存在于下一个命令中。