ssh实验室内网电脑

最近的新冠疫情迫使我干了这么一件事情,找了一个办法可以用外网ssh我在实验室的内网电脑。

情况是这样的:
* 首先,我在的实验室用的是内网,无数层的路由网关,我的电脑显然是深度埋在了内网,直接ssh是没戏的。
* 为了能ssh内网机器,我需要架一个反向ssh隧道,但是这样仍然需要有一个IP相对固定或者暴露的外网服务器来搭建外网的接入点。这时候我想到了家里的联通宽带。
* 然而联通宽带给家庭用户分配的外网IP是动态的,每隔几天就会更新一次。我肯定不能每次都手动修改,需要一个自动化的方法。

所以,总结问题之后,主要是以下两点:
* 找到一个办法,能够自动更新家内联通宽带的外网IP,并在家架设一个外网可登陆的入口点(家庭服务器)。
* 在实验室电脑和家庭服务器之间假设一个反向隧道,并且该反向隧道可以在家庭服务器IP发生变化时自动重连。

先看第一点,自动更新家庭服务器外网地址。其实一台内网电脑要获得自己的外网地址没那么困难,用下面的Linux命令就可以:
curl http://ifconfig.me/ip/ >extern-ip 2>/dev/null
http://ifconfig.me 这个网站会动态生成一个访问者的IP地址,curl命令则把这个地址存到了extern-ip文件中。有了这个,我们其实就可以用Linux的cronb服务,定时的获得最新的IP地址。但是,这个IP地址只是存在了家庭服务器本地,当IP改变但是我并不在家的时候,还需要有个办法获得该IP。我想到的办法是架设一个github的私有repo,然后写一个脚本,该脚本由cronb定期执行,获得最新的IP,如果发现IP变更,则用commit/push自动上传至github私有repo,当然,需要先设好ssh key省去密码环节。最后一点,我们还需要设置家里的路由器,将家庭服务器暴露给外网(DMZ主机服务)。哒哒,现在我可以随处ssh登陆家里的家庭服务器了。

有了家庭服务器,现在我们需要一个反向ssh隧道来连接实验室电脑。这时候我选择了frp(https://github.com/fatedier/frp)。这个家伙真的很傻瓜(感觉也很裸奔,防护完全靠密码)。将家庭服务器设置为server,然后实验室电脑为client。注意唯一需要注意的问题是,家庭服务器的IP是动态的。所以我们需要用一个cronb任务定期的从github上获得最新的IP地址,然后通过frp环境变量的方式设定server的IP地址。当然,我们也需要一个cronb任务定期的重启ssh隧道(我现在是每6个效时重新建立一次,这样在IP更新的时候,我最多由6个效时不能访问实验室电脑)。

最后还要提示一点,现在实验室的电脑和家庭服务器都暴露给外网了。外网很危险,如果你看/var/log/auth.log,基本连到外网的机器无时无刻不受到ssh扫描的攻击。所以一定要设置强密码和禁止root登陆。此外,我还建议在两个电脑上都安装fail2ban,自动黑名单ssh扫描攻击。当然这样也许会时不时地误伤自己,导致自己不能登录实验室电脑,但是总之有防护还是能睡安稳觉的。

OK,非常粗略的攻略写到这里,应该不是拿来玩的,有实际需求的可以按步骤思考后重现。

也许你需要关闭evince-thumbnailer

一般来说,我认为Linux自带的软件都还是比较好用。但是最近好像出了些问题。简单描述,我发现昨天的syslog居然有22GB!

打开syslog,发现有大量的如下错误:
May 15 11:42:46 manchester org.gnome.Nautilus[15668]: page: Warning: font ec-lmbxi10' not found, trying metric files instead
May 15 11:42:46 manchester org.gnome.Nautilus[15668]: page: Error: /usr/share/texmf/fonts/tfm/public/lm/ec-lmbxi10.tfm: File corrupted, or not a TFM file
May 15 11:42:46 manchester org.gnome.Nautilus[15668]: page: Error: /usr/share/texmf/fonts/tfm/public/lm/ec-lmbxi10.tfm: File corrupted, or not a TFM file
May 15 11:42:46 manchester org.gnome.Nautilus[15668]: page: Warning: metric file for
ec-lmbxi10′ not found, trying `cmr10′ instead
May 15 11:42:46 manchester org.gnome.Nautilus[15668]: page: Error: /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr10.tfm: File corrupted, or not a TFM

查了查,发现ec-lmbxi10式latin modern字体文件,cmr10.tfm则是大多数系统都自带的字体文件。重新安装这些字体文件,甚至重新生成这些字体文件,错误仍然存在。

不断地搜索之后,确定了该问题的元凶:当我用文件管理器(nautilus)打开一个特定的文件夹,该文件夹内有一个latex生成地dvi文件,该dvi文件又正好用了ec-lmbxi10字体地时候,后台地evince-thumbnailer尝试为该dvi文件生成缩略图出错,导致瞬间产生了大量的错误报告,evince-thumbnailer会跑死,占用一个硬件线程,并不停的往syslog打印错误报告。

现在找到的解决办法:
1. 可以选择不使用文件管理器打开这个文件夹(但是保不齐以后还会误开)
2. 关闭evince-thumbnailer,即不为pdf/dvi文件生成缩略图。

我暂时选择了后者。具体方法是修改/usr/share/thumbnailers/evince.thumbnailer文件,将其中的Exec=evince-thumbnailer -s %s %u %o一行注释掉即可。

相关网页:
https://www.mail-archive.com/ubuntu-bugs@lists.ubuntu.com/msg5738140.html
https://askubuntu.com/questions/676902/how-to-disable-evince-thumbnailer
https://ubuntuforums.org/showthread.php?t=2277168
https://askubuntu.com/questions/1195966/texlive-problems-in-log-file

附注:
很久没有更新博客了,不过还是会更新的。如果说我有一些优点的话,坚持一定是我为数不多的优点之一。这段时间没写的原因主要是太忙了,太忙了。简单说,就是放弃了坚守英国,回国了,从2017年11月开始,是中国科学院信息工程研究所的一个副研究员,研究方向改成了计算机体系结构安全。然后,2018年4月结婚了。再然后,2019年12月1日,宝宝出生了,现在是个奶爸,更忙了。。。