41

我很难尝试配置 Capistrano 3.1 来部署托管在 Github 上的应用程序。

我正在关注Capistrano 文档,我已经成功完成了第一步(从工作站到服务器的 SSH 密钥),在第二步(从我们的服务器到存储库主机)我能够成功运行ssh -A deploy@one-of-my-servers.com 'git ls-remote git@github.com:my_user/my_repo.git'

18f38afz261df35d462f7f4e2ca847d22f148a06    HEAD
18f38afz261df35d462f7f4e2ca847d22f148a06    refs/heads/master

但是,ssh deploy@one-of-my-servers.com 'git ls-remote git@github.com:my_user/my_repo.git'失败了:

Permission denied (publickey).

Capistrano 文档建议

如果您收到错误“主机密钥验证失败”。登录到您的服务器并以部署用户身份运行命令 ssh git@github.com 以将 github.com 添加到已知主机列表中。

所以,我试过了,但我明白了

ssh git@github.com
Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hosts.
Permission denied (publickey).

而且我基本上无法成功访问 Github 存储库。

SSH 文档指出:

-A      Enables forwarding of the authentication agent connection.  This
         can also be specified on a per-host basis in a configuration
         file.

如何在配置文件中按主机指定?

我的本地机器运行 Mac OSX Mavericks。VPS 运行 Ubuntu 12.04

谢谢。

4

4 回答 4

83

您是否已将 ssh 密钥添加到代理身份列表中?

你可以检查一下ssh-add -L,你应该看到你用来连接到 github 的密钥:

$ ssh-add -L
ssh-rsa AAAAB3N.....0VmSiRvTzBrbU0ww== /Users/youruser/.ssh/id_rsa

如果您没有看到用于 github 的 ssh 密钥或类似的消息

代理没有身份。

然后你应该添加你的密钥:

ssh-add ~/.ssh/id_rsa

(替换为您用于 github 的密钥的路径)

有关更多信息,请参阅ssh-add 文档

于 2014-04-19T14:52:15.183 回答
35

将以下行添加到本地计算机上的 .ssh/config 文件中

  Host Server_Address
     ForwardAgent yes

检查您的本地密钥是否列在 ssh-add 列表中

ssh-add -L

如果不添加密钥到 SSH 代理

ssh-add -K

连接到远程服务器

ssh -v username@Server_Address

通过运行以下命令检查 SSH 代理转发是否启用。它应该列出一个套接字文件

echo "$SSH_AUTH_SOCK"

针对 GitHub 运行连接测试

ssh -T git@github.com

针对目标 git 存储库运行 ls 远程测试

git ls-remote --heads git@github.com:account/repo.git

最后从您的本地机器注销并运行以下命令

cap production git:check
于 2016-08-17T01:43:32.120 回答
8

将以下内容添加到 ~/.ssh/config

Host one-of-my-servers.com
    ForwardAgent yes
于 2014-02-04T21:18:52.660 回答
1

还有一个原因:如果目标主机的指纹与您的指纹不匹配~/.ssh/known_hosts,SSH 会自动禁用代理转发。

解决方案是:

$ ssh -A -o UserKnownHostsFile=/dev/null  my-target-host
于 2020-09-01T18:11:57.497 回答