最近搬了新家,4个人合租,办了上海电信的 30MB 的光纤,说是 30MB,上行才 2MB,好在下行是实打实的 30MB,于是就准备把吃灰的树莓派找出来继续做下载机下电影美剧看。
之前在寝室住的时候,直接在路由器上拨号上网,有公网 IP,用的路由器可以做端口转发,配合 DDNS,可以很方便的从外面访问控制树莓派,但是现在这边搬的光纤,必须用电信『强制』租给我们一个光猫,押金200元,说好一年之后可以凭光猫退200块,但是之前来给我们办理网络的师傅说甭指望了,退不了的,我直接告诉他,退不了就去工信部投诉,合同上写好了可以退(其实我也没看合同上到底有没有写,不是我去办理的)。『强租』也就算了,拨号的账号密码都写在光猫里,不给我们,超级管理员密码也不知道,问电信的师傅,说他也不知道,导致我们不能用自己的光猫,这也引发了此片文章。
通过curl ip.cn
看了下,电信还算良心给分配了公网 IP,然后电信『强租』的光猫还是一个路由器,有普通管理员账号密码,进去后发现有 DMZ 和虚拟主机配置(端口转发),然后尝试了配置 DMZ 和虚拟主机配置(端口转发),结果发现怎么都不生效,于是不得不放弃之。然后 Google 之,发现了关键字『SSH 反向代理』。
然后按照这里的配置进行配置,然而配置好了后,SSH 连接时,会给出下面错误
channel 2: open failed: connect failed: Connection refused
又一次 Google 之,发现了这个,然而虽然没有解决我的问题,但是通过这个回答,我试了下把端口统一下
ssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B
ssh -fCNL "*:<port_b1>:localhost:<port_b1>' localhost
注意上述,按照这里的配置,应该为
ssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B
ssh -fCNL "*:<port_b2>:localhost:<port_b1>' localhost
当我按照这个配置,得到了错误,我就试了下把端口统一下,然后竟然成功了。但是按照文档,port_b2
可以与port_b1
不同,但我就是不能成功。
上述配置成功了,就可以从外面登陆到树莓派了
ssh -p <portb1> usra@B.B.B.B
然而,因为网络的原因,ssh
会断开,并且不会重连,虽然可以通过修改sshd_config
配置修改连接时间,但是还是会断开。于是我就用supervisor
来是ssh
一直连接着。
这里需要注意以下几点:
- 我去掉了
-f
参数,如果加上-f
,supervisor
就不能正常的监控ssh
了; ssh
我双向配置了 key 登陆,所以就不用输入密码,supervisor
可以自动启动ssh
;- 因为配置了 key 登陆,而我的
supervisor
是以root
用户运行,所以需要在supervisor
里指定user
参数,使ssh
可以正常读取到id_rsa
,当然也可以用-i
参数显示的指定id_rsa
路径。
update
2016-06-02
对于 ssh 的自动重连,可以使用 autossh 配合 supervisor
并且 ssh 应该加上下列参数
-o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking no"
不然,autossh 会『假死』
ServerAliveInterval
的作用是当没有数据交互时,间隔一段时间给服务器发送一个message
,并且接受服务器的响应
ServerAliveCountMax
的作用是ServerAliveInterval
最大重试次数,当失败了就会中断连接,这样 autossh 又能自动重连了
完整的的命令是
autossh -M 0 -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking no" -CNR 2222:127.0.0.1:22 -i .ssh/id_rsa user@host
本机连接到 host
主机,并且在 host
上设置一个 127.0.0.1:2222
的反向代理到本机