SSH 代理转发不起作用

Posted

技术标签:

【中文标题】SSH 代理转发不起作用【英文标题】:SSH Agent Forwarding not working 【发布时间】:2014-02-26 15:03:41 【问题描述】:

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

我正在关注Capistrano Documentation,并且我已经成功完成了第一步(从工作站到服务器的 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

谢谢。

【问题讨论】:

查看另一个可能的原因(和解决方案):serverfault.com/questions/404447/… 【参考方案1】:

您是否已将 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 doc了解更多信息

【讨论】:

这解决了我的问题!谢谢!如果这是我的问题,我会接受你的回答。 谢谢,这成功了!是否有可能因为我复制粘贴的密钥文件而不是使用 bash 命令创建它们而遇到此问题?【参考方案2】:

将以下行添加到本地计算机上的 .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

【讨论】:

很好的详细答案!谢谢 嗯,如果一切都检查出来(SSH 密钥已添加到代理并验证,代理转发已启用并在远程主机上验证),我仍然在测试 ssh -T git@github.com 时得到 Permission denied (publickey).(实际上gitlab.com 在我的特殊情况下)?但它仅不适用于特定主机。 看看gitlab.com/gitlab-com/support-forum/issues/171。有一些有用的建议。从运行ssh -vT git@github.com 开始以查看更多详细信息 附注:根据ssh_config(5),“对于每个参数,将使用第一个获得的值。”...我的 ssh 配置中有一个特定于主机的 ForwardAgent yes,它我以为会覆盖我最上面的ForwardAgent no,但这不是它的工作原理!我将ForwardAgent no 移动到.ssh/config 的底部,并且我已经确认它在默认情况下仍处于禁用状态,但现在每个主机的启用都有效。此外,ssh-add -K 不仅是 MacOS 特有的,而且很可能是不受欢迎的。 “添加身份时,每个密码也将存储在您的钥匙串中”——我不希望这样! YMMV。【参考方案3】:

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

Host one-of-my-servers.com
    ForwardAgent yes

【讨论】:

感谢您的回复。不幸的是我忘了提到我已经添加了它Host 111.222.222.44:24566 ForwardAgent yes【参考方案4】:

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

解决办法是:

$ ssh -A -o UserKnownHostsFile=/dev/null  my-target-host

【讨论】:

您可能只想用ssh-keyscan添加主机密钥 ssh-keyscan 在您计划稍后手动执行ssh 时会是一个很好的解决方案。对于包含ssh 的自动化作业(cron 作业、CI/CD 管道脚本等),您不会想处理ssh-keyscan 对于您想要验证指纹的自动化作业,或使用 SSHFP / SSH 证书。覆盖安全检查绝不是一个好主意。

以上是关于SSH 代理转发不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通过堡垒主机到 VPC 中的 Elasticsearch 集群的 ssh 端口转发不起作用

SSH -L 连接成功,但 localhost 端口转发不起作用“通道 3:打开失败:连接失败:连接被拒绝”

WebMvcConfigurer addCorsMappings 不起作用

Github git push origin main 不起作用

rsyslog 转发器似乎不起作用

Vagrant的端口转发不起作用[关闭]