SSH反向隧道

基本设置

内网主机执行命令:

ssh -fN -R 55022:localhost:22 felix@12.34.56.78
  • -fN表示后台执行,且不执行任何命令
  • -R 55022:localhost:22定义反向隧道,通过公网服务器的55022端口,将流量转发到内网服务器的22端口
  • felix@12.34.56.78公网服务器用户名和地址

外网主机执行命令,登录内网主机:

ssh localhost -p 55022

开放端口

默认55022端口绑定在127.0.0.1网口上,需要放开端口。编辑公网服务器 /etc/ssh/sshd_config 文件,打开 GatewayPorts:

GatewayPorts yes

重启 sshd 服务

持久连接

首先配置免密码登录

$ su - userA    #这步可省略,但需要确保以下命令是在A机上以userA用户的身份运行的
$ ssh-keygen -t rsa    #连续三次回车,即在本地生成了公钥和私钥,不要设置密码
$ ssh-copy-id -p VPS的SSH端口 -i ~/.ssh/id_rsa.pub userVPS@VPS的IP

在内网主机上安装并配置autossh

$ sudo touch /var/log/ssh_nat.log && sudo chmod 777 /var/log/ssh_nat.log
$ sudo vim /lib/systemd/system/autossh.service  #将下例内容粘贴复制进去
[Unit]
Description=Auto SSH Tunnel
After=network-online.target

[Service]
User=userA     #改掉这里本机的用户
Type=simple
ExecStart=/usr/bin/autossh -M 6777 -NR 8388:127.0.0.1:22 -i ~/.ssh/id_rsa userVPS@VPS的IP -p VPS的SSH端口 >> /var/log/ssh_nat.log 2>&1 &
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
RestartSec=30s

[Install]
WantedBy=multi-user.target
WantedBy=graphical.target

启动服务

$ sudo chmod +x /lib/systemd/system/autossh.service    #给予可执行权限
$ sudo systemctl enable autossh    #设置开机自启
$ sudo systemctl start autossh     #现在就启动服务
$ sudo systemctl status autossh  #查看状态,出现Active: active (running)表示正常运行

参考链接

两步建立 ssh 反向隧道

使用SSH反向隧道进行内网穿透



blog comments powered by Disqus