说一下自己的理解,并回答 OP 的两个问题。
在讨论转发 /代理类似主题时,需要先理清参与角色。这里有三个角色:
1. 本地主机,执行 ssh -L / -R ;
2. 远程主机,ssh 命令连接到的主机;
3. 目的主机,要转发到的主机;
第一个问题,远程转发的 REMOTE 指的是哪个?
贴一下 man 信息(机翻,并删除套接字相关描述):
ssh -R [bind_address:]port:host:hostport [user@]hostname
指定将与远程(服务器)主机上给定的 TCP 端口的连接转发到本地端的给定主机的端口 (host:hostport)。这是通过分配一个在远程一侧监听 TCP 端口 (port) 来实现的。每当有连接到达该端口时,SSH 将通过安全隧道转发该连接,并从本地主机向 host 端口 hostport 发起连接。
默认情况下,服务器上的 TCP 监听端口仅绑定到回环接口。可以通过指定 bind_address 来覆盖此设置。
回到 OP 的命令,
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
其中,SSH_SERVER 就是远程主机,[REMOTE:]REMOTE_PORT 就是远程主机监听的端口及其绑定的接口地址,所以 REMOTE = SSH_SERVER = 远程主机。
第二个问题,本地转发的时候,SSH_SERVER 也可以就是 DESTINATION ,而远程转发的时候,REMOTE 也可以就是 DESTINATION ?
本地转发的时候,远程主机充当代理,远程主机可以是目的主机;
远程转发的时候,本地主机充当代理,本地主机可以是目的主机;
这个可以看看
https://unix.stackexchange.com/a/115906 ,有非常漂亮的图解