使用 ngrok 进行内网穿透——4 (如何穿透ssh端口)

发布于 2020-04-26  79 次阅读


我们做好内网穿透以后

虽然可以对外提供服务

但是如果出了某些问题或者我们需要修改内网服务器上的东西

我们是无法直接ssh过去

我们有两种方式做ssh隧道

一:ngrok方式

如果你已经在使用ngrok了

那么就非常简单了

修改ngrok.cfg


server_addr: ngrok.6le6le.com:4443
trust_host_root_certs: false
#多隧道
tunnels:
    tunnel1:
        subdomain: aaa
        proto:
            http: 80
    tunnel2:
        subdomain: bbb
        proto:
            http: 8080
#新增ssh隧道
    ssh:
      proto:
        tcp: "22"
      #绑定远程端口
      remote_port: 8888

之后依然使用ngrok启动命令

./ngrok -config ngrok.cfg start tunnel1 tunnel2 ssh

这样,多隧道+ssh隧道就启动了,响应如下:

ngrok                                                              (Ctrl+C to quit)
 
Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    tcp://ngrok.baidu.com:8888 -> 127.0.0.1:22
Forwarding                    http://aaa.ngrok.baidu.com:8081 -> 127.0.0.1:80
Forwarding                    http://bbb.ngrok.baidu.com:8081 -> 127.0.0.1:8080
Web Interface                 127.0.0.1:4040
# Conn                        0.00ms
Avg Conn Time                 0.00ms

二:使用ssh反向隧道来链接内网ssh端口

(刚开始没想到ngrok可以直接用,所以研究了一下,此方法无需ngrok,任何机器都可以直接使用)

1>使用ssh建立反向隧道:

将内网ssh服务到22端口绑定到云服务器8001端口

ssh -fCNR 8001:localhost:22 root@公网ip

(据说这样就可以了,但是我失败了,于是执行下面的操作)

在云服务器上将8001端口转发到8000端口

ssh -fCNL *:8000:localhost:8001 localhost

之后ssh反向隧道就成功建立了

ssh root@公网ip -p 8000

即可成功链接

2>使用autossh实现自动重连

使用中发现ssh隧道经常自动断开,这是正常的。

所以我们可以使用autossh来实现自动重连。

首先,建立密钥对登陆

ssh-keygen
#全部按Enter,生成密钥位置:~/.ssh
 
ls ~/.ssh/
id_rsa id_rsa.pub known_hosts

将公钥文件id_rsa.pub复制到云服务器上,并加入到~/.ssh/authorized_keys

#复制到云服务器后执行
cat id_rsa.pub >> ~/.ssh/authorized_keys

或者在内网服务器直接执行

ssh-copy-id root@公网ip

之后就执行autossh命令

autossh -M 8002 -qnfTCNR 8001:localhost:22 root@公网ip

-M 8002代表通过8002端口监视连接状态,如果出现问题,就会自动重连。

写在最后

今天算是吃了一亏,没有查ngrok链接方法就直接搞ssh方法

所以大家记住,有问题先看看当前有没有可以利用的资源

不要埋头就是干。。。(血的教训啊~TAT


只是我心中不再有火花,就让往事随风去吧。