前几天双十一购买了一个小型的NAS,NAS的自带系统支持完整的linux环境ssh server,用来保存代码和相关工具还是很方便的,前几天有人问我怎么配置方便的远程编辑环境,我这找个机会简单写一下配置,这个东西利用现有工具并不复杂。
文中用到的工具主要有docker,noVNC,docker sshfs插件,vscode。个人觉得配置起来的应用主要可以用来做远程代码编辑和审计环境,远程结伴编程和教学之类的。
文中用到的docker 镜像有:
saturnman/ubuntu-xfce-vnc-code
docker pull saturnman/ubuntu-xfce-vnc-cod
busybox
docker pull busybox
docker插件有:
vieux/sshfs
docker plugin install vieux/sshfs
一、基本网络结构
基本的访问结构如上图所示,通过中间服务器访问远程不同的ssh server上的代码,之后将编辑器界面通过浏览器远程呈现给用户,当然中间服务器和ssh server完全可以就是同一台服务器。
二、配置ssh公钥
为了更加安全和有效管理不同的权限,强烈建议不要使用自己常用的系统的公钥,而且为不同的目标用户设置不同的linux账户,以管理不同的权限。比如纯粹的reviewer和展示、教学等不需要目标用户可以编辑文件,可以配置只读权限就可以。
我在自己的根目录/Users/saturnman/sshkeys下生成新的密钥
ssh-keygen -f id_reviewer_rsa -t rsa
不要设置私钥访问密码,之后将公钥添加到远程ssh server目标用户的authorized_keys文件中,测试一下访问。
ssh -i ~/sshkeys/id_reviewer_rsa code@192.168.0.30
注意:如果是新建authorized_keys文件,一定要将这个文件的权限设置成600,否则ssh本身会出现非常多的问题,无法正常工作。
二、配置docker的sshfs插件
为了要让sshfs插件记住密钥的默认目录,要对其进行配置
1.先停用插件
docker plugin disable vieux/sshfs
2.设置选项
docker plugin set vieux/sshfs sshkey.source=/Users/saturnman/sshkeys/
3.启用插件
docker plugin enable vieux/sshfs
三、配置docker volume
1.创建docker volume
docker volume create -d vieux/sshfs -o sshcmd=code@192.168.0.30:/disks/disk2/projects/incubator-tvm -o IdentityFile=/root/.ssh/id_reviewer_rsa codeVolume
2.测试volume
sudo docker run -it -v codeVolume:/code busybox ls /code
如果没有问题,可以看到远程文件了
四、启动docker vnc+vscode镜像
sudo docker run -d -p 7000:6901 -v codeVolume:/code -e VNC_PW=123456 saturnman/ubuntu-xfce-vnc-code
其中选项VNC_PW是密码,一般不要设置过于简单
成功启动后就可以从浏览器访问了http://localhost:7000/vnc.html
vscode在系统Application->Development中,打开/code目标,就可以工程代码了。下面是DL明星项目TVM