我有一台只能通过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
)。