ssh ProxyCommand 与直接运行该命令之间的区别(cloudflared)

ssh ProxyCommand 与直接运行该命令之间的区别(cloudflared)

我有一台只能通过cloudflared隧道访问的远程计算机。在我的.ssh/config文件中,我有

Host remote
     User my-user-name
     ProxyCommand cloudflared access ssh --hostname remote-host-name.com

这很好用。当我ssh remote收到提示时remote-host-name.com

但是当我直接运行cloudflared命令时出现错误:

local$ cloudflared access ssh --hostname remote-host-name.com
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5

Invalid SSH identification string.

我以为ssh只是“执行”ProxyCommand,但它必须做更多的事情,它还在做什么?

答案1

ProxyCommand指定要使用的命令连接到服务器(摘自手册页,重点是我加的)。基本上,它运行此命令并使用其输入/输出流,而不是直接打开 tcp 连接。最重要的是,它正在运行协议ssh

换句话说,ProxyCommand仅替换 tcp 流,但其余ssh通信仍由实际命令本地运行ssh。当您cloudflared单独运行该命令时,您只是从另一端连接到 ssh 服务器并接收问候ssh语(SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5),而另一端希望您使用协议指定的任何内容进行回答(当然,人类不应该这样做,这是ssh在后台执行的操作)。通过尝试直接连接到nc任何ssh没有代理的服务器,您将获得类似的问候语,例如nc some.ssh.server 22(22 是 常用的端口ssh)。

相关内容