【Linux】SSH 隧道转发场景搭建
ssh建立隧道转发
A设备:没有公网IP地址的本地设备,如本地内网服务器(需要能通公网)
B设备:有公网IP地址的服务器,可以是云服务器
C设备:终端设备,想通过公网服务器B访问到设备A
要实现通过公有云服务器 B 访问内网 A 服务器的场景,可以使用 SSH 隧道转发(SSH Tunneling)技术。这个技术可以通过公有云服务器 B 建立一个跳板,使得你可以通过 SSH 访问到内网 A 服务器。
下面是具体的配置步骤:
1. 在 A 服务器上配置 SSH
A 服务器已经获取到 IP,假设 A 服务器的 IP 是 192.168.1.100,首先确保 A 服务器上已经安装并配置好了 SSH 服务。
2. 在 B 服务器上配置 SSH
B 服务器是具有公网 IP 的云服务器,假设 B 服务器的公网 IP 是 203.0.113.1
,同样确保 B 服务器上已经安装并配置好了 SSH 服务。
3. 在 A 服务器上建立反向 SSH 隧道
在 A 服务器上运行以下命令来建立反向 SSH 隧道:
ssh -R 2222:localhost:22 user@203.0.113.1
这条命令的含义是将 A 服务器的 22 端口映射到 B 服务器的 2222 端口。其中 user
是 B 服务器上的用户名。
可以使用 autossh
工具来保持这个隧道的持久连接,确保断开后能够自动重新连接。安装 autossh
并使用它来建立隧道:
sudo apt-get install autosshautossh -M 0 -f -N -R 2222:localhost:22 user@203.0.113.1
4. 在 B 服务器上配置 SSH 以允许端口转发
确保 B 服务器上的 SSH 配置文件允许网关和端口转发。编辑 /etc/ssh/sshd_config
文件,确保以下配置项没有被注释掉:
GatewayPorts yes
AllowTcpForwarding yes
然后重新启动 SSH 服务:
sudo systemctl restart ssh
5. 在本地 PC 上连接 A 服务器
通过 B 服务器建立到 A 服务器的连接。假设你使用的是 OpenSSH 客户端,可以在本地 PC 运行以下命令:
ssh -p 2222 user_on_A@203.0.113.1
这条命令的含义是通过 B 服务器的 2222 端口连接到 A 服务器的 22 端口,其中 user_on_A
是 A 服务器上的用户名。
总结
通过以上配置,你可以实现从本地 PC 通过 B 服务器 SSH 访问到 A 服务器的场景。
# 在A服务器上执行
ssh -R 2222:localhost:22 user@203.0.113.1# 或使用autossh
sudo apt-get install autossh
autossh -M 0 -f -N -R 2222:localhost:22 user@203.0.113.1# 在B服务器上确保ssh配置
sudo vim /etc/ssh/sshd_config
# 确保以下配置项
GatewayPorts yes
AllowTcpForwarding yes
# 重启ssh服务
sudo systemctl restart ssh# 在本地PC上执行
ssh -p 2222 user_on_A@203.0.113.1