ssh ProxyCommand实际如何工作?


8

我对使用ssh的ProxyCommand功能感到满意,并且可以使用它来跳过多个堡垒主机以有效地到达最终​​主机。但是我似乎无法理解它在后端的实际工作方式。

例如。我有以下配置文件。

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh user@bastion.com -W %h:%p"

我知道,要连接到主机final,ProxyCommand将在与主机建立连接之前运行final.com。但是我似乎仍然无法理解连接的顺序。

该选项有-W %h:%p什么作用?我了解这是netcat功能,与相似nc %h %p

据我了解,这里是操作顺序。请告诉我是否有错。我将在示例中使用上面指定的配置文件。

  1. 用户输入 ssh final
  2. 与bastion.com的ssh连接已创建。
  3. 将创建一个从bastion.com到final.com的端口22的网猫隧道。netcat的stdin连接到在与bastion.com的连接中获得的外壳。
  4. 因此,现在我们已经从系统连接到final.com。此连接的前半部分是从我们的系统到bastion.com的ssh连接。此连接的后半部分是从bastion.com到final.com的netcat隧道。
  5. 现在,ssh final命令将上述连接用作代理,并通过此现有连接隧道传输其数据。

另外,我还想知道这种技术是否也称为ssh stacking

添加换行符

Answers:


8

3)创建一个从bastion.com到final.com的端口22的网猫隧道。

错误,没有网猫。

1)用户ssh final在本地主机上输入。这将启动父ssh进程
2)父ssh创建一个子ssh,并将I / O重定向到管道
3)子ssh创建与bastion.com的连接。
4)sshd上bastion.com过程创建的TCP连接final.com:22
5)SSH通道被添加到本地主机和bastion.com之间现有SSH连接
6)父SSH握手数据写入管道,孩子的ssh从管道读取它,通过ssh通道发送到bastion.com上的sshd;sshd读取它并将其写入连接到final.com的套接字。同样,数据从final.com传输到localhost


感谢您的回答。该技术是否也称为ssh stacking或没有名称?
火影忍者Uzumaki

2
你能引用一下吗?例如手册。规格..
qweruiop 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.