ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。
反向连接是什么?
平时大多数使用ssh命令是控制端主机主动连接受控端主机,通过这个连接控制端主机可以主动的向受控端主机发送一些请求,这称为正向连接。
反向连接则是指受控端主机主动连接控制端主机,通过这个连接控制端主机可以主动的向受控端主机发送一些请求。
使用-L和-R参数可以分别实现正向连接和反向连接。
ssh -L sourcePort:forwardToHost:onPort connectToHost
意思:连接主机connectToHost,监听本地的端口sourcePort,通过主机connectToHost,把到本地端口sourcePort的连接转发到主机forwardToHost的端口onPort。
图中的两个例子:
your host是敲命令的主机。
- ssh -L 123:localhost:456 remotehost
连接主机remotehost,监听本地的端口123,通过remotehost,把到本地端口123的连接转发到本地主机localhost的端口456。 - ssh -L 123:farawayhost:456 remotehost
连接主机remotehost,监听本地的端口123,通过remotehost,把到本地端口123的连接转发到主机farawayhost的端口456。
ssh -R sourcePort:forwardToHost:onPort connectToHost
意思:连接主机connectToHost,监听远程主机connectToHost的端口sourcePort,把到远程主机connectToHost的端口sourcePort的连接转发到主机forwardToHost的端口onPort。
图中的两个例子:
- ssh -R 123:localhost:456 remotehost
连接主机remotehost,监听主机remotehost的端口123,通过本地主机,把到主机remotehost的端口123的连接转发到本地主机localhost的端口456。 - ssh -R 123:nearhost:456 remotehost
连接主机remotehost,监听主机remotehost的端口123,通过本地主机,把到主机remotehost的端口123的连接转发到主机nearhost的端口456。
对比-L和-R
ssh -L sourcePort:forwardToHost:onPort connectToHost
ssh -R sourcePort:forwardToHost:onPort connectToHost
两者都是把到端口sourcePort的连接转到主机forwardToHost的端口onPort,区别在于sourcePort端口在哪个主机上,以及通过哪个主机做桥梁。
-L是通过远程主机connectToHost做桥梁,监听本地主机;
-R是用过本地主机做桥梁,监听远程主机connectToHost。
参考文献:
StackExchange How does reverse SSH tunneling work?
通过ssh反向连接内网主机的方法