利用SSH做内网穿透的方法【简单有效】

内网穿透

通常在局域网里的服务器无法被外网访问,但是通过一个公网IP就可以做到流量转发。
具体流程是:

  1. 现在内网和公网IP建立一个流量转发连接
    在内网机器上执行的ssh命令是:
nohup ssh -CqTnN -R 公网IP:8022:127.0.0.1:22 ubuntu@公网IP > /dev/null 2>&1 &
  1. 通过外网IP和上面创建的端口8022建立的连接就可以把任何服务流量转发到内网。
    上面以ssh服务为例,就可以通过8022连接到内网服务器。当然不只是ssh的22端口, 80,3306,都是一样的道理。

高可用

到此为止,内网穿透已经做完了,如果再做点高可用的工作就是,定期检查连接,防止自动断掉,在.ssh目录下的config文件中加上自动刷新连接的配置:

Host myserver
    HostName 公网IP
    Port 22
    User ubuntu
    IdentitiesOnly yes
    IdentityFile /home/ubuntu/.ssh/id_rsa
    ServerAliveInterval 30

把上面的ssh命令做成一个脚本,配置到crontab里

#!/bin/bash

APP_NAME=公网IP:8022:127.0.0.1:22

echo "try to stop service..."

PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{ print $2 }')

if [ -z "$PID" ]; then
  echo Application is already stopped
else
  echo kill $PID
  kill -9 $PID
fi

echo "start service..."
nohup ssh -CqTnN -R 公网IP:8022:127.0.0.1:22 myserver > /dev/null 2>&1 &

上面的脚本可以自动启动一个连接,但是如果挂掉了,就得跑去单位一趟。我们做成一个crontab,定期刷新连接. 假如上面的脚本是在/opt下,文件名是tunnel_ssh,那么执行命令:

crontab -e 

添加下面内容:

2 4 * * *  cd /opt&sh tunnel_ssh

更多内容关注公众号:8分钟读书

posted @ 2024-02-21 20:27  williamyuan  阅读(918)  评论(0)    收藏  举报