【经验技巧】新型肺炎下的国外远程办公实践分享

新型肺炎的爆发,导致千家万户隔离在家,如果单位远在国外,网络连接不畅,如何在家办公?本文将分享近一个月来linux环境下探索的远程办公经验。

一、问题描述

2020年1月回国过年,不巧遇上了新型肺炎病毒的爆发,紧接着被封城、封路、封门、封户,趴窝两周后开始考虑远程办公。由于个人电脑没带,硬盘没带,只得借用家人电脑顶一阵子。

Wi-Fi网速测试截图

考虑到家用移动Wi-Fi宽带速度不错(>50 Mbps),尝试把文件资料从办公室电脑下载到本地,可结果令人大跌眼镜:学校虚拟专网(VPN-Virtual Private Network)服务器完全连不上,单位主页打不开,网页版邮件登录不上,邮件客户端(thunderbird)一直报连接超时(time out),电脑远程文件传输速度为 0 KB/s。毋庸置疑,因单位不在国内,国际访问带宽被限制了。这里需要强调的是,出于安全考虑,非官方的VPN代理存在风险,速度再快也不能用于办公。

各种访问受限

接下来尝试下手机移动网络,打开热点,VPN勉强能连上,邮件网页版可以打开,附件下载很慢,室内远程文件下载速率低于10KB/s,室外稍微高一点,但延迟还是很严重(>300ms),直接回到了2G时代(10KB/s的网络连接仅够传文本、敲命令)。

如果说肺炎爆发是天灾,那么网络受限就是人祸。好在工作这些年还积累了点linux的技术,经过了几个星期的折腾,整出一套适合自己的Linux环境下弱网络连接(10KB/s)的远程办公方法,即综合利用ssh远程控制、mutt邮件管理、邮件自动转发、Emacs/Vi文本编辑、Vmware/VirtualBox虚拟系统、百度/Nextcloud云盘等命令和工具,实现邮件收发、文件传输以及轻量级的科学研究(仿真编程写论文)。

二、基础篇

技巧一:邮件自动转发

通过手机网络+VPN访问邮件客户端进行邮件查收和附件下载不是很方便,为此本人将工作邮箱设置成126邮箱自动转发,手机上装了一个网易邮箱大师app,邮件来了自动提示,附件下载上兆每秒,十分便捷。主流免费邮箱都支持自动邮件转发,例如Gmail转发设置截图如下。

示例:Gmail邮件自动转发

学校和公司的邮件系统因为是专用系统,设置可能相对麻烦(复杂-专业-安全),具体请查看帮助文档。

注意:邮件转发涉及到垃圾邮件分类,不同邮件服务商对垃圾邮件定义不一样,所以部分转发邮件可能失败或者被列入垃圾邮件。

技巧二:scp&mutt文本数据传输

远程办公,少不了文件传来传去。如果文件大小在KB量级,直接通过scp命令进行远程传输即可。假设办公电脑为ubuntu操作系统,主机名为ad.u2u.com,用户名为useful2you,文件读取路径为/home/useful2you/temp/data.txt,本地存放路径为/home/user/data,终端输入命令如下即可

scp useful2you@ad.u2u.com:/home/userful2you/temp/data.txt /home/user/data

如果需要传送文件夹temp里面所有的文件,添加选项-r,命令如下

scp -r useful2you@ad.u2u.com:/home/userful2you/temp/* /home/user/data

如果文件超过1MB但小于100MB的话,建议使用mutt+msmstp搭建本地邮件发送环境,本地上传附件,发送邮件给指定邮箱,再通过邮箱下载。操作步骤如下:

首先安装mutt和msmtp工具,其中mutt负责邮件管理,msmtp负责邮件发送,终端输入命令如下

sudo apt-get install mutt msmtp

然后配置文件.muttrc 和.msmtprc,以网易126邮箱为例(已开通SMTP服务),useful2you@126.com,密码password123,主目录下新建或编辑文件如下:

# .mtttrc
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="useful2you"
set from=useful2you@126.com
set envelope_from=yes
# .msmtprc
account default
host smtp.126.com
from useful2you@126.com
auth plain
user useful2you@126.com
password password123
logfile ~/.msmtp.log

最后从主目录下发送邮件,收件人指定自己,终端输入命令如下:

echo “content” | mutt -s "subject" useful2you@126.com -a /home/useful2you/temp/data.txt

如果发送附件大小有限制(一般为10MB),可以分卷压缩。例如利用zip压缩成data.zip,然后利用split分卷成8M一份data_part*,利用mutt上传附件发送,最后下载附件后利用cat命令合并成data.zip,利用unzip解压即可。相关命令汇总如下:

zip data.zip /home/useful2you/temp/data.txt
split -b 8M data.zip  data_part
cat data_part* > data.zip 
unzip data.zip ./

注意:基于安全考虑,配置文件中的密码为授权码(例如网易),并非登录邮箱的密码;Gmail邮箱的msmtprc配置比较特殊,官方提供部分支持失效(包括单独设置第三方登录密码),不建议尝试;zip命令可以通过-p选项进行加密压缩;具体邮件设置请参考网上相关教程,特别推荐gist.github.com/iharsuvorau上的配置文件,注释十分清晰;此外还需要注意配置文件属性修改(因为.msmtprc有明文密码),就不详细讲解了。

技巧三:Vmware/VirtualBox虚拟机

网络不畅的情况下,远程桌面连接体验极差,会让人有摔鼠标键盘的冲动,为此需要建立本地化的办公环境,建议通过虚拟机软件来安装新的操作系统。虚拟机顾名思义就是通过软件自定义的方式虚拟cpu、内存、显卡、网卡、硬盘等等,一个系统就是一个磁盘文件和一个配置文件,方便调试和拷贝,且不会对本地电脑固有配置造成影响。

虚拟机文件列表(*.vdi磁盘文件,*vobx配置文件)

成熟的虚拟机软件主要有Vmware和VirtualBox。Vmware为商业软件,好用但价格不菲,曾推出免费的个人版vmplayer;VirtualBox为免费软件,开源跨平台,使用十分方便。下图给出了本人利用VirtualBox新建的Ubuntu系统用于latex论文写作(所有软件都是免费的)。

关于虚拟机的实用教程不胜枚举,这里仅摘选一些实用技巧与大家分享:

首先是虚拟机系统安装。系统可以通过向导新建,也可以从网上直接下载现成系统镜像,例如https://www.osboxes.org/这个网站就专门分享针对Vmware和VirtualBox的linux操作系统镜像,直接使用,非常方便。

虚拟机系统镜像分享网站
虚拟机虚拟硬盘文件参数

其次是虚拟机网络访问和文件分享。安装VirtualBox提供Guest CD Image(类似toolbox),可以实现主机和虚拟机之间的文件拷贝,也可以设置文件夹共享。

虚拟机文件共享设置

更加高级的方式是通过主机终端ssh连接虚拟机系统。例如在学习linux操作系统的时候,很多人选择“Linux from Scratch”,俗称LFS,从底层开始搭建自己的Linux系统,需要大量输入现有的命令,这时候从主机终端拷贝命令就十分方便,另外也可以避免虚拟机和主机之间来回的频繁切换。

网络地址转换(NAT)端口转发设置

具体操作是:首先在虚拟机安装上安装openssh服务,然后在虚拟机软件的网络连接选项中设置端口转发(通过桥接方式也可行,但设置不同),最后在主机终端输入ssh命令访问,相关命令列举如下:

# virtualmachine terminal input
sudo apt-get install openssh-server
sudo /etc/init.d/ssh start 
# hostmachine terminal input
ssh -p 9022 useful2you@127.0.0.1

最后是虚拟机磁盘大小调整。当虚拟机用一段时间后,发现最初分配的磁盘大小可能不够,需要增大容量,此时可以通过菜单栏的虚拟介质管理器来调整磁盘大小。

磁盘大小调整

三、扩展篇

接下来介绍的是一些特殊的技巧,操作起来稍微复杂,但是有奇效。

技巧一:Emacs纯文本界面网页浏览

现在的办公电脑一般都会配备双网卡,一个对内网,一个对外网。基于安全考虑,部分网络资源仅限内网机器访问,如果需要从外网电脑访问,需要想办法远程登录办公电脑,从办公电脑浏览网页。

如果网络畅通,那么可以通过ssh的X11远程打开图形化界面即可(软件操作、网页浏览等),具体命令如下:

ssh -X useful2you@ad.u2u.com

如果是mac系统,需要借助XQuartz来实现X11远程界面操作。

但是如果网络连接质量特别差的情况下,图形化界面操作就不切实际了,界面要么打不开,要么长时间才能刷新一次。此时可以考虑文本化界面操作,例如远程运行Emacs工具(功能十分强大,称作系统都不为过)以文本方式登录、浏览网页。

例如,打开Emacs,输入M-x load-library RET w3m RET加载w3m库,输入M-x w3m打开浏览器,输入shift+u键入网址http://www.useful2you.com,效果如下图。

文本化界面网页浏览

当然w3m也支持图片加载,这里为了节省带宽就选择了关闭图片显示。需要注意的是,如果网页需要JavaScript支持,可以尝试安装w3m-js,但是支持很有限,(代码长时间没有更新)。

技巧二:网络云盘同步、离线下载

解决了办公电脑本地访问内部资源的困难,现在考虑如何从远程下载超大文件(GB量级)。直接文件传输不可能,那就需要找桥梁。

一种可行的途径是,远程控制电脑上传文件至云盘A,然后分享获取地址,再用云盘B离线下载,最后从云盘B下载到本地。需要保证的是云盘A和云盘B服务器之间连接畅通。事实证明该方法确实可行,具体操作过程如下:

单位提供的云盘A基于NextCloud,尝试Emacs网页浏览,因缺乏javascript支持无法上传文件,遂放弃。换用NextCloud-client,终端执行网盘同步操作,成功。相关命令汇总如下:

sudo add-apt-repository ppa:nextcloud-devs/client
sudo apt install nextcloud-client
mkdir /home/useful2you/NextCloud
nextcloudcmd /home/useful2you/Nextcloud/ https://cloud.****.****

经过测试,3.15GB的文件上传耗时约90s,速度相当快。

然后又通过VPN远程访问网盘,生成分享连接,提取下载地址。下一步利用云盘B(百度网盘)的离线下载功能保存,下载速度也是极快。

百度网盘离线下载

最后通过电脑百度网盘下载到本地,大功告成,虽然来的曲折,但是一劳永逸(不难发现,云盘服务器之间的相互访问几乎是畅通无阻的,???)。

至此,折腾告一段落,对Linux的热爱更进一步。

发表评论

电子邮件地址不会被公开。

Alexa