可以使用ssh -A ...
来完成。
我发现的大多数参考都表明,本地计算机必须配置~/.ssh/config
以启用使用以下代码的代理方面:
Host <trusted_ip>
ForwardAgent yes
Host *
ForwardAgent no
但是,使用这种配置,我仍然能够在使用ssh -A user@remote_not_trusted_ip
的远程计算机中看到我的本地机器钥匙,并运行ssh-add -l
。
从上面介绍的配置中,我希望SSH代理转发会失败,并且本地计算机的键不会由ssh-add -l
列出。
为什么@remote_not_trusted_ip
即使~/.ssh/config
文件表示以下?
Host *
ForwardAgent no
我如何防止SSH-Engent将密钥转发到~/.ssh/config
中未明确定义的机器?
我如何防止SSH-Engent将密钥转发到
~/.ssh/config
中未明确定义的机器?
这是默认行为。如果您在~/.ssh/config
中不允许它,则不会转发。但是命令行的参数具有较高的优先级,因此它覆盖了配置中定义的内容,如ssh_config
的手册页:
ssh(1)
按以下顺序从以下来源获取配置数据:
- 命令行选项
- 用户的配置文件(〜/.ssh/config(
- 系统范围的配置文件(/etc/ssh/ssh_config(
如已经说过的,您只需要向ssh
提供正确的论点。
回到问题:
为什么即使〜/.ssh/config文件表示以下内容,为什么机器@remote_not_trusted_ip能够访问SSH-Agent转发键?
Host * ForwardAgent no
因为命令行参数 -A
的优先级高于配置文件。
我如何防止SSH-Engent将密钥转发到
~/.ssh/config
中未明确定义的机器?
如果您不希望转发ssh-agent
,请勿使用-A
命令行选项。使用-a
命令行选项。
您正在使用-a连接的选项。男人SSH说:
- 启用身份验证代理连接的转发。
您应该在没有-a的情况下连接,只需使用:
ssh user@remote_not_trusted_ip
CLI ARGS将在SSH配置文件上优先。
顺便说一句,如果您想在不转发的情况下连接到信任的IP,也可以使用:
ssh -a user@trusted_ip
- 禁用身份验证代理连接的转发。
这已经过去一年了,但是我遇到了同样的问题并降落在有效的配置选项上。
当我将家用计算机连接到工作计算机时,我遇到了问题,而git命令不再有效。我发现这是因为转发了连接家用计算机的公钥,该键没有为该GitHub帐户配置。
-a
命令行选项通过不转发身份验证代理连接解决了问题。我还认为等效的~/.ssh/config
选项将是:
ForwardAgent no
当不起作用时,我寻找其他配置变量,最后发现该变量有效。
IdentityAgent none
该页面的这一部分至关重要:
由于使用了每个参数的第一个获得的值,因此主机特定的声明应在开始之后发表文件,最后默认为
将您的主机 *与forwardergatent是的,在末尾,特定主机带有forwarderagent,而不是在.ssh/config
不是对问题的答案,也许只是语义:
为什么机器@remote_not_trusted_ip能够访问ssh-agent 转发键即使〜/.ssh/config file表示以下内容?
我的理解是,身份验证键永远不会"转发"。到远程计算机。相反,SSH-Agent将身份验证挑战从远程服务器返回到将身份验证私有密钥通过的任何远程计算机运行的计算机。