如何禁用 ssh-agent 转发

Ula*_*ach 3 linux ssh

ssh-agent 转发可以通过ssh -A ....

我发现的大多数参考资料都指出,本地机器必须配置~/.ssh/config为使用以下代码启用 AgentForwarding:

Host <trusted_ip>
  ForwardAgent yes

Host *
  ForwardAgent no
Run Code Online (Sandbox Code Playgroud)

但是,使用此配置,当通过隧道进入远程机器时,我仍然能够看到我的本地机器密钥,使用ssh -A user@remote_not_trusted_ip,并运行ssh-add -l.

根据上面提供的配置,我预计 ssh-agent 转发会失败并且本地机器的密钥不会被ssh-add -l.

@remote_not_trusted_ip即使~/.ssh/config文件说明以下内容,为什么机器能够访问 ssh-agent 转发的密钥?

Host *
  ForwardAgent no
Run Code Online (Sandbox Code Playgroud)

如何防止 ssh-agent 将密钥转发到未明确定义的机器~/.ssh/config

Jak*_*uje 7

如何防止 ssh-agent 将密钥转发到未明确定义的机器~/.ssh/config

这是默认行为。如果您不允许它进入~/.ssh/config,它将不会被转发。但是命令行参数具有更高的优先级,因此它会覆盖配置中定义的内容,如手册页中所述ssh_config

ssh(1) 按以下顺序从以下来源获取配置数据:

  1. 命令行选项
  2. 用户的配置文件 (~/.ssh/config)
  3. 系统范围的配置文件 (/etc/ssh/ssh_config)

因此,如前所述,您只需要为ssh.

那么回到问题:

为什么即使 ~/.ssh/config 文件声明以下内容,机器@remote_not_trusted_ip 也能够访问 ssh-agent 转发的密钥?

Host *
  ForwardAgent no
Run Code Online (Sandbox Code Playgroud)

因为命令行参数的-A优先级高于配置文件。

如何防止 ssh-agent 将密钥转发到未明确定义的机器~/.ssh/config

不要使用-A,如果你不想让你的前进的命令行选项ssh-agent。请改用-a命令行选项。


小智 6

这已经有一年多了,但我遇到了同样的问题,并找到了一个有效的配置选项。

当我从家庭计算机连接到工作计算机时,我遇到了 Git 命令不再起作用的问题。我发现这是因为连接的家庭计算机的公钥被转发,而该公钥没有为该 GitHub 帐户配置。

命令-a行选项通过不转发身份验证代理连接解决了该问题。我还认为等效的~/.ssh/config选项是这样的:

ForwardAgent no
Run Code Online (Sandbox Code Playgroud)

当这不起作用时,我寻找其他配置变量,最后发现这个起作用了。

IdentityAgent none
Run Code Online (Sandbox Code Playgroud)


小智 5

您正在使用 -A 选项进行连接。man ssh 说:

-A 启用身份验证代理连接的转发。

您应该在没有 -A 的情况下进行连接,只需使用:

ssh user@remote_not_trusted_ip
Run Code Online (Sandbox Code Playgroud)

CLI args 将优先于 ssh 配置文件。

顺便说一句,如果你想连接到你信任的ip而不转发,你也可以使用:

ssh -a user@trusted_ip
Run Code Online (Sandbox Code Playgroud)

-a 禁用身份验证代理连接的转发。