ngrok-实现树莓派ssh远程访问?

1.下载ngrok,官网地址 https://ngrok.com,已经被墙了,所以上传到了网盘 http://pan.baidu.com/s/1pJKiiwF

为了方便,还是翻墙过去注册一下,因为我们需要注册后获得一个authtoken(例如:4TFgayeYhBr94YBYLGQtm_3KFVfzwfFJRWvGg6enbyE)

2.正如ngrok所描述的,程序没有任何依赖,只需要轻轻的运行唯一的一个主程序ngrok就行

./ngrok authtoken 4TFgayeYhBr94YBYLGQtm_3KFVfzwfFJRWvGg6enbyE

./ngrok tcp 22

ngrok by @inconshreveable (Ctrl+C to quit)

Tunnel Status online
Version 2.0.19/2.0.19
Web Interface http://127.0.0.1:4040
Forwarding tcp://0.tcp.ngrok.io:52359 -> localhost:22

Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00

上面输出的信息中 tcp://0.tcp.ngrok.io:52359 -> localhost:22 就是ngrok隧道映射到外网的地址 SERVER: 0.tcp.ngrok.io Port: 52359,照常理此时就可在外网上通过这个地址和端口访问树莓派了。但是奇怪的是我测试ssh这个地址N多次,都是弹出错误“Connection time out”或者“Connection refused”,后来在一台普通的linux运行ngrok,得到的也是同样的提示。这令我一度怀疑是不是ngrok免费版不支持tcp,于是在官网上咨询了一下,得到的答复是肯定的,free plan确实是支持tcp的,那会是哪里出了问题呢?后来从官网上下载到1.7版本,用v2ex提供的服务器连接,也是报相同的错误,闹心啊。最后的最后,偶然的一次用vpn gate连了一个美国的服务器,心想再试试ngrok,出乎意料的竟然连接上了,虽然很不稳定,隔一分钟就断,但是已经让人很满意了,至少证明我们的方式是没有问题的。难道是ngrok的IP被墙了?即使如此那v2ex(https://www.v2ex.com/t/148279)的呢,也未能幸免?只能再找几个代理试试看了!

通过上面的方式运行ngrok,退出ssh终端后程序也会随着退出,所以应该以后台方式(&)启动,用下面的方式测试http协议,是没问题的:

nohup ./ngrok http 80 &

然后在Pi上打开浏览器访问http://localhost:4040查看远程地址。这种方式当然不方便,所以我们要用配置文件来指定web的地址:

第1行是默认的authtoken,第2-4行设定日志,第5行则指定web的地址,后面定义了两个tunnel:ssh和web,然后就可以./ngrok start ssh & 启动,并在windows上打开http://192.168.1.105:4040查看远程地址了。此处还有一个奇怪地发,tunnel web用了http协议,启动时会提示错误“Tunnel session failed: Custom subdomains are only available for paid plans. Upgrade at https://dashboard.ngrok.com/billing/plan”,意思很明显,免费的账户不能设定二级域名,问题是这里并没有指定...bug

后记:除了ngrok,还可以使用weaved实现同样的功能,相比ngrok,weaved会自动启动并主动连接到自己的服务器,登录weaved网站后便可以随时查看远程访问地址,而且目前测试此服务还没有被墙 ,可以直接访问。

发表评论

电子邮件地址不会被公开。 必填项已用*标注