我很喜欢使用ssh的ProxyCommandfunction,并且可以使用它跳过多个堡垒主机以有效地到达最终的主机。 但是我似乎无法理解它是如何在后端工作的。
例如。 我有以下configuration文件。
Host final Hostname final.com Port 22 AgentForwarding yes User guestuser ProxyCommand "ssh [email protected] -W %h:%p"
我明白,为了连接到final
的主机,ProxyCommand将在连接到final.com
之前运行。 但是我似乎还不能理解连接的顺序。
那么选项-W %h:%p
做什么的? 我知道这是netcat的function,与nc %h %p
类似。
所以据我的理解,这里是操作的顺序。 请让我知道,如果我错了。 我会在我的例子中使用上面指定的configuration文件。
ssh final
ssh final
命令将上述连接作为代理,并通过此现有连接来隧道传输数据。 另外我也想知道这个技术是否也被称为ssh堆栈 ?
增加了linebreaks
3)一个netcat隧道从bastion.com创build到final.com的22端口。
假,没有netcat。
1)用户在本地主机上inputssh final
。 这将启动父级ssh进程
2)父ssh创build一个I / Oredirect到pipe道的子ssh
3)孩子ssh创build一个连接到bastion.com。
4)bastion.com上的sshd
进程创build一个到final.com:22的tcp连接
5)ssh通道被添加到localhost和bastion.com之间的现有ssh连接
6)父ssh将握手数据写入pipe道,子ssh从pipe道读取,通过ssh通道发送到bastion.com上的sshd; sshd读取它并将其写入连接到final.com的套接字。 同样,数据从final.com传输到本地主机