您的位置:首页 > 其它

利用灵雀云免费主机做反向ssh端口转发,实现内网服务器的外网访问_20160107_七侠镇莫小贝

2017-04-13 00:00 836 查看
(20160706确认:灵雀云已经停止免费服务!)

用灵雀云一段时间了,感觉还不错,免费给灵雀云做个广~告。
http://www.alauda.cn/ 现在每个月送29元优惠券,可以满足使用一个XS(500M内存) 或两个XXS (256M内存) 型免费主机的费用。

毕竟是免费的,在上面跑需要大内存的应用就不要想了,但做个反向ssh端口映射还是不错的,这样你的内网服务器就可以映射到外网,还有了个免费域名,推荐!

步骤:

1.在你的Linux服务器上运行:

ssh-keygen 一路回车即可

ssh-copy-id "-p 10230 root@42.139.49.130" 这样登录到灵雀云服务器就不再需要输入密码了。注意ssh-copy-id 指定端口的写法。

上面两条命令执行一次即可。

ssh -C -f -N -g -R 9090:localhost:8080 root@42.139.49.130 -p10230 将本地的8080服务端口映射到灵雀云服务器的8080端口

此时,你到云主机上看,应该开发了9090端口。

查看端口开放情况: netstat -lnp

但9090端口绑定在了127.0.0.1上,无法被外网访问到。

没事,将云服务器的9090端口映射到8080即可。

2. 在灵雀云服务器上运行:

ssh-keygen 一路回车即可
ssh-copy-id root
@localhost 实现ssh自己时不需要密码
上面两条命令执行一次即可。

ssh -CNfg -L 8080:localhost:9090 root@localhost 将9090端口映射到8080

此时,netstat -lnp 看一下,已经在0.0.0.0上开放了8080端口。

访问:http://云主机域名 ,即可看到你的内网Linux服务器8080端口上的东西。

注意:访问http://云主机ip是没用的,必须用域名。

3. 有时候由于网络原因,建立的连接会断开,这时候需要重新运行上面两条ssh命令,比较麻烦。

其实,既然已经可以无密码登录到灵雀云服务器了,那所有的命令都可以在你的Linux服务器上自动执行了。

写个脚本:restart_portmap_per300.sh 定期检测(300秒)端口映射是否正常,如不正常,则重新建立连接

让他在后台运行:nohup ./restart_per300.sh &

看日志方法:tail -f nohup.out

#!/bin/bash
while true;do

# 检测一下端口映射是否正常。即检测yourapp/index.html是否能正常访问。

wget -q -t 1 -T 3 --spider 42.139.49.130/yourapp/index.html
if [ $? -eq 0 ]
then
echo "`date '+%Y%m%d %H%M%S'` index.html检测...存在! 不重启ssh!"
sleep 300
continue
else
echo "`date '+%Y%m%d %H%M%S'` index.html检测...不存在! 可能网络连接有问题,需要重启ssh!"

echo " --`date '+%Y%m%d %H%M%S'` restart remote ssh server"
ssh -tt -p 10230 root@42.139.49.130 /root/restart_portmap.sh
sleep 5

echo " --`date '+%Y%m%d %H%M%S'` restart local ssh server"
ps -ef | grep localhost | grep root | grep -v grep | awk {'print $2'} | xargs kill -9
sleep 1
ssh -C -f -N -g -R 9090:localhost:8080 root@42.139.49.130 -p10230

echo " --`date '+%Y%m%d %H%M%S'` restart ssh server OK! sleep 300 ..."
echo ""
sleep 300
fi

done

灵雀云服务器上的脚本:(做9080到8080端口映射的,映射前先把旧进程杀掉,这里根据端口来查出进程id)

restart_portmap.sh

#!/bin/bash

echo "现在时间:`date '+%Y%m%d %H%M%S'`"
echo "restart ssh server"
kill -9 $(netstat -tlnp | grep 8080 | awk '{print $7}' | awk -F '/' '{print $1}')
kill -9 $(netstat -tlnp | grep 9090 | awk '{print $7}' | awk -F '/' '{print $1}')
sleep 1
ssh -CNfg -L 8080:localhost:9090 root@localhost
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: