“SSH 端口转发”中的端口转发是什么意思?

Tim*_*Tim 5 ssh port-forwarding

  1. 维基百科说

    在计算机网络中,端口转发或端口映射是网络地址转换 (NAT) 的一种应用,它在数据包穿过网关(例如路由器或防火墙)时将通信请求从一个地址和端口号组合重定向到另一个地址和端口号组合。

    端口转发的定义是否适用于“SSH 端口转发”?

    SSH 本地和远程端口转发中的“端口转发”是什么意思?

  2. 特别是什么被转发到什么样东西

    例如。在https://askubuntu.com/a/50075/1471 中

    将端口 80 从本地计算机 (localhost) 转发到端口 8000 上的远程主机的命令是 ssh -R 8000:localhost:80 oli@remote-machine。

    您会说同样的话,还是会说“将远程主机上的端口 8000 转发到本地机器上的端口 80”?

Arc*_*mar 12

1 - 一般情况

假设您在公司网络中有两台服务器。

从本地服务器“L1”,您可以通过端口 22 上的 ssh 访问远程服务器“R1”。

  1. 服务器 R1 托管 Web 服务,但防火墙/NAT/任何阻止直接访问端口 80。

  2. 由于 NAT 问题,“R1”无法直接访问“L1”。

从 L1 连接使用(两台主机上的同一用户)

ssh -L 10080:localhost:80 -R 10022:localhost:22 R1
Run Code Online (Sandbox Code Playgroud)

现在,

  • -L 10080:localhost:80 在 10080 上的本地浏览将转发到端口 80 上的远程主机(R1)、本地主机(例如远程 127.0.0.1),因此您可以浏览远程主机(R1),同时被防火墙/NAT 阻止。

  • -R 10022:localhost:22远程使用 10022 端口会转发到 localhost (L1) 的 22 端口,你可以从远程发起 scp/ssh 到 localhost。(使用scp -P 10022 file localhost:(注意上-P))

这实际上是我从 Ubuntu (14.04) 笔记本电脑用来转到生产服务器的命令行(我可以使用 firefox 到 localhost:10080 并使用从服务器到 localhost:10022 的 scp 来带回文件)

现在你的 IP 是

192.168.1.1 L1
172.17.17.1 R1
Run Code Online (Sandbox Code Playgroud)

你用

ssh -L 10080:172.17.17.3:80 -R 10022:192.168.1.5:22 \
     -L 192.168.1.9:8888:172.17.17.9:9999 R1
Run Code Online (Sandbox Code Playgroud)

现在

  • 对端口 10022(任何 IP)的远程访问将被转发到本地 192.168.1.5 ssh/scp。
  • 对端口 10080(任何 IP)的本地访问将被转发到远程主机 172.17.17.3 的端口 80。
  • 从 192.168.1.9 到 8888 端口的本地访问将被转发到 172.17.17.9 上的 9999 端口(192.168.1.9 是 L1 中的本地地址,使用别名机制,这不是防火墙规则)。

这些设置可用于腻子/按位客户端 Putty 上的端口转发

问 Ubuntu 问题

关于什么

 -R 8000:localhost:80
Run Code Online (Sandbox Code Playgroud)

这读作

  • -R 偏僻的
  • 8000 端口 8000(远程端口 8000 ...)
  • localhost (远程端口 8000 转到本地主机 .. )
  • 80 (远程端口 8000 转到本地主机端口 80 )