帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
ssh反向代理实现内网穿透【亲测可用】
发布时间:2024-03-07 00:13:10   分类:帮助文档
ssh反向代理实现内网穿透【亲测可用】




常用内网穿透方式
1、网卡层映射,包括购买公网ip

推荐指数:👍🏻👍🏻👍🏻👍🏻👍🏻。
缺点:主要申请困难。

2、自己搭建内网穿透服务。

推荐指数:👍🏻👍🏻👍🏻👍🏻。
非常的实用,自己需要一台公网ip的主机,可以购买阿里云服务器、腾讯云服务器,推荐这款45元一年的

3、使用三方平台提供的端口映射、内网穿透服务

推荐指数:👍🏻👍🏻👍🏻
使用cpolar、ngrok、花生壳等三方提供的服务。
缺点:复杂场景问题排查困难,不是很稳定,我这边主要用了这3款打包服务器每天凌晨3点老是容易断开,与官方排查了一周未解决。

本文在文镜老哥的指导下,使用第2种ssh反向代理的方式,通过内网打包服务器,借助外网服务器,实现在家访问我们的打包服务。
一、实现打包机器无密码登录到外网机器
1、添加打包机器ssh公钥到外网服务器

在打包服务器上生成公钥 (一路回车即可生成)

ssh-keygen


会生成id_rsa.pub文件,这是打包服务器smb服务截图:



这是打包服务器ssh服务截图:



复制打包机器的公钥

cat id_rsa.pub



添加到外网机器的authorized_keys中。
终端切换到外网服务器

cd ../../
cd root/.ssh/



使用vim命令粘贴上去保存

vim authorized_keys



esc退出,然后wq保存


验证:在打包机器上登录外网服务器看是否需要输入密码

ssh root@81.68.175.xx



这里打包机器不用输入密码就可登录,这步验证成功

2、ssh远程连接一段时间会失效的问题

光不输入密码就能登录,仍然存在一个问题,我们的远程登录终端是有超时时间的,这里我们在打包机器上设置重连。


在本地客户端操作: 1.进入/etc/ssh/中:cd /etc/ssh/ 2.修改ssh_config文件(sudo vim ssh_config),在末尾添加ServerAliveInterval 30,意思是30s会发送一次向服务器连接的请求,以保持会话始终在线。 3.保存退出(:wq)




验证: 放一段时间不操作,我们的终端仍然是保持链接状态,这步就成功了。

二、在打包服务器上建立打包机器到外网机器的反向代理
1、内网端口映射到外网 [核心]

映射打包机器的8080端口到外网服务器9000端口

ssh -CqTnN -R 81.68.175.xx:9000:127.0.0.1:8080 root@81.68.175.xx &


备注:末尾的&表示后台执行

2、打开公网服务器网管开关
查看内网服务:正常

启动打包机器的jenkins服务(端口号8080),然后查看本地服务是否存在

curl http://127.0.0.1:8080


查看外网服务:异常

然后我们再访问可能出现访问失败的问题如下:

curl http://81.68.175.xx:9000/



linux解决ssh tunnels端口不能转发问题
我们需要打开公网服务器网管开关/etc/ssh/sshd_config 修改 GatewayPorts yes

vi /etc/ssh/sshd_config



PasswordAuthentication yes 是否可以密码认证,也修改成yes



同时我们需要在后台打开公网ip的防火墙,我这里使用的是腾讯云服务器的如下



重启sshd

service sshd restart

3、进程管理

ps查看进程



如果进程不对,杀掉进程 (注意9719为PID)

kill -9 9719


备注:linux查看进程命令区别
1、Jobs命令:主要用于显示系统中的任务列表及其运行状态(注意:只在当前终端有效)。
2、fg命令:用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。
3、bg命令:用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号&的效果是相同的,都是将其放到系统后台执行。
4、ps命令:查看前后台服务,不区分终端

4、nohup后台运行

现在基本成功,如果你需要退出终端仍能运行,在命令前面加上nohub即可。
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行

nohup ssh -CqTnN -R 81.68.175.xx:9000:127.0.0.1:8080 root@81.68.175.xx &


如果发现当关闭终端时,发现程序也跟着停止,nohup并没有生效:nohup命令执行后,不要直接关闭终端,使用logout/exit命令退出终端会话

logout

三、重启服务解决失效问题

由于局域网ip的变动,我这边需要重启内网穿透服务以维持稳定

3.1、ssh服务重启脚本
新建ssh_connect.sh脚本
#!/bin/bash

APP_NAME=81.68.175.xx:9000:127.0.0.1:8080

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 81.68.175.xx:9000:127.0.0.1:8080 root@81.68.175.xx &

3.2、定时任务
那么这就需要一个定时任务了,以下定时任务二选一即可
3.2.1、jenkins定时任务

新建一个jenkins定时任务内网穿透定时检查脚本
配置半小时定时任务,Jenkins定时构建时间设置参考

H/30 * * * *


执行shell脚本
其中$BUILD_ID是为了解决jenkins 解决构建成功后进程消失的问题

OLD_BUILD_ID=$BUILD_ID
BUILD_ID=dontKillMe
cd /Users/mac/Desktop
sh ssh_connect.sh
BUILD_ID=$OLD_BUILD_ID
exit

3.2.2、crontab定时任务

crontab是Mac、linux系统自带的定时任务

创建定时任务,终端输入
crontab -e

此时会打开一个vim编辑器,输入定时任务

以下定时任务设置的意思是:在上午8点到11点的第3和第15分钟执行,更多crontab定时任务语法参考这里

3,15 8-11 * * * myCommand cd /Users/mac/Desktop&&sh ssh_connect.sh


然后wq保存退出即可。
备注:另外再次打开终端可能收到定时任务的邮件,查看邮件终端输入mail,然后输入对应的序号,退出exit

四、验证

内网

http://192.168.1.114:8080/jenkins/



外网

http://81.68.175.xx:9000/jenkins/






香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价