使用 netcat 的 ssh 代理命令

使用 netcat 的 ssh 代理命令

例如这样的:

Host destination
  ProxyCommand ssh gateway nc %h %p

网关和目的地之间的连接是否加密?我很困惑,因为我有 2 个假设,但都没有说服力:

  1. 它没有加密。源中的 stdin 通过源网关 ssh 连接加密,并在传递给 nc 之前解密,即 nc 的 stdin 与源 ssh 客户端中的 stdin 相同。但我认为 %p 是 22,即 ssh 端口——这不符合这个假设。
  2. 它是加密的,网关处的 sshd 守护进程将加密数据传递给 nc。那么假设我们不执行 nc,而是执行“cat”,sshd 守护进程是否也会将加密数据传递给它?这听起来也不对。

答案1

当然是加密的!为了更好地理解这里发生的事情:

[ client $ ssh destination ]
  |
  '-> [ gateway $ nc destination 22 ]
        |
        '-> [ destination $ whatever]

在客户端你只需运行ssh destination。这将被翻译成ssh gateway nc destination 22

所以第一个执行的命令是ssh gatewaywith 命令。我们肯定已经加密了第一步。

nc destination 22命令在服务器上的此会话中运行gateway。它基本上会将所有 I/O 重定向到主机destination,就像它本来的样子(但我们已经处于加密通道中!)。

因此,您将再次与 进行密钥交换和与 进行身份验证,destination成功后,您可能会在那里看到 shell 提示。因此它再次被加密。

相关内容