使用 proxycommand 的 ssh 代理会忽略中间主机上的 ssh 配置文件

使用 proxycommand 的 ssh 代理会忽略中间主机上的 ssh 配置文件

我正在通过主机 a 连接到主机 b

Host host-a
    HostName 10.8.0.1
    Port 333
    User host_admin
    IdentityFile ~/.ssh/id-ecdsa-admin

Host host-b
    HostName 1.1.1.1
    Port 567
    ProxyCommand ssh -q -W %h:%p host-a
    User host_user

在我的托管服务器对于 /home/host_admin/.ssh/config 中的 host_admin 我有:

Host *
   IdentityFile ~/.ssh/id-ecdsa-admin
   User host_user
   Port 567

我确实希望代理命令在连接到其他 ssh 时考虑那些用户/端口/身份文件,但它们似乎被忽略了。

我知道它们被忽略了,因为当我删除港口用户从 host-b 配置我无法连接。难道不应该考虑来自 host-b 用户 ssh 配置的那些吗?

Host host-b
        HostName 1.1.1.1
        ProxyCommand ssh -q -W %h host-a

这里有什么陷阱?

答案1

不应该考虑来自主机 b 用户 ssh 配置的那些吗?

不,来自主机 a 和主机 b 的连接都来自您的客户端。中间系统上从未调用过 ssh 客户端。该中间系统上没有打开任何 shell,也没有文件传输到/从它传输。

当使用 ProxyJump/ProxyCommand 时,您的密钥需要直接位于客户端上。

根据您的配置,您的计算机将建立连接host-a并基本上构建一个端口转发到 1.1.1.1:567 作为套接字,这将作为后台进程运行。然后,您的计算机将启动第二个 ssh 进程,该进程将直接连接到该套接字并进行端口转发。

ProxyCommand/ProxyJump 不会做类似的事情ssh host-a bash -c "ssh host-b"

或者换句话说,ProxyJump 基本上就是在做这样的事情。只是有点自动化而已。

# build tunnel in background
ssh -N -L 2200:1.1.1.1:567 10.8.0.1 -p 333 &
# connect to host-b through the tunnel
ssh 127.0.0.1 -p 2200

相关内容