![使用 netcat 的 ssh 代理命令](https://linux22.com/image/1458883/%E4%BD%BF%E7%94%A8%20netcat%20%E7%9A%84%20ssh%20%E4%BB%A3%E7%90%86%E5%91%BD%E4%BB%A4.png)
例如这样的:
Host destination
ProxyCommand ssh gateway nc %h %p
网关和目的地之间的连接是否加密?我很困惑,因为我有 2 个假设,但都没有说服力:
- 它没有加密。源中的 stdin 通过源网关 ssh 连接加密,并在传递给 nc 之前解密,即 nc 的 stdin 与源 ssh 客户端中的 stdin 相同。但我认为 %p 是 22,即 ssh 端口——这不符合这个假设。
- 它是加密的,网关处的 sshd 守护进程将加密数据传递给 nc。那么假设我们不执行 nc,而是执行“cat”,sshd 守护进程是否也会将加密数据传递给它?这听起来也不对。
答案1
当然是加密的!为了更好地理解这里发生的事情:
[ client $ ssh destination ]
|
'-> [ gateway $ nc destination 22 ]
|
'-> [ destination $ whatever]
在客户端你只需运行ssh destination
。这将被翻译成ssh gateway nc destination 22
。
所以第一个执行的命令是ssh gateway
with 命令。我们肯定已经加密了第一步。
该nc destination 22
命令在服务器上的此会话中运行gateway
。它基本上会将所有 I/O 重定向到主机destination
,就像它本来的样子(但我们已经处于加密通道中!)。
因此,您将再次与 进行密钥交换和与 进行身份验证,destination
成功后,您可能会在那里看到 shell 提示。因此它再次被加密。