搭建ssh反向隧道

实现外网利用ssh反向隧道访问内网主机

准备

实现内网穿透都需要一台外网主机,而且是可以访问的

内网主机A

  • IP:192.168.189.128
  • ssh端口:22
  • 用户名:usera
  • 密码:passwda

外网主机B

  • IP:123.123.123.123
  • ssh端口:22
  • 用户名:userb
  • 密码:passwdb
  • 要绑定内网主机的外网端口:2222

配置

外网主机配置

修改/etc/ssh/sshd_config文件,如果没有添加即可

GatewayPorts yes

重启sshd服务

sudo service sshd restart

内网主机配置

ssh -NfR 2222:localhost:22 [email protected]
参数 说明
-f 建立成功后在后台运行
-c 允许压缩数据
-N 只建立连接,不打开shell
-R 将远程主机的某个端口转发到本地主机的指定端口
-L 将本地主机的某个端口转发到远程主机的指定端口

会提示输入外网主机的密码

通过ssh的2222端口连接外网主机,就可以代理到内网主机,外网主机执行下面命令测试

ssh localhost -p 2222

改进

至此,完全可以通过外网主机作为桥梁实现对内网主机的ssh访问,但是维持ssh的时间是有限的,一段时间没有数据传输,外网主机和内网主机的连接会断开。

使用autossh

内网主机配置

安装autossh

sudo apt install autossh

在上面操作中,连接外网主机每次需要输入密码,autossh 为了维持连接需要使用非密码登录,这里设置秘钥登录

生成秘钥,如果有ssh秘钥直接进行下步操作

ssh-keygen -t rsa -C "[email protected]"

将秘钥添加到外网主机的authorized_keys里面

ssh-copy-id [email protected]

会提示输入外网主机密码

内网主机执行

autossh -M 55555 -NfR 2222:localhost:22 [email protected]
参数 说明
-M 外网主机接收内网主机信息的端口

其他参数和ssh一致,在隧道断开的时候,autossh会自动重新连接而ssh不会,-M参数就是外网主机监听内网主机发送的信息的端口号,内网主机检测到异常就会自动重连。

外网主机测试

ssh localhost -p 2222

你可能感兴趣的:(搭建ssh反向隧道)