核件旦画M2021年第03总lE3iaalSlE3--------------------------------------------------------------------------------------------------------(总第219J
基于Web SSH技术的Linux远程桌面的原理与实现
陈超',李春颖陈科燕2
(1.浩鲸云计算科技股份有限公司,江苏南京211153;2.南京工程学院计算机工程学院,江苏南京211167)
摘要:随着大数据和人工智能的热潮,需要建立各种不同的虚拟机进行相关的实验。虽然不同的虚拟机解决了不同系统和环境的需求问题,但是大量虚拟机的管理也是一个需要解决的问题。文章以Web SSH技术为基础,文章设计开发了Linux下的远程桌面软件。基于远程桌面,可以有效的提供操作系统使用的便捷性和易用性。
关键词:远程桌面;Linux操作系统;虚拟机
中图分类号:TP311.52文献标识码:B文章编号:2096-9759(2021)03-0138-03
1Linux的远程桌面系统及特性
随着大数据和人工智能的热潮,计算机专业学生平常做实验的环境要求也越来越复杂。通过Web虚拟机管理平台把平台部署在公网服务器上,无论在何时何地,只要有网有浏览器我们就可以进行相关的学习和实验。同时,通过系统化的规划,每个相关的实验可以包含特定的虚拟机,让做实验的人单独管理,降低了管理的复杂度,同时也提高虚拟机操作的灵活性,如果不出现特殊的情况,基本可以实现自主操作和管理虚拟机。基于Cloud Lab可以实现Linux 的远程桌面系统。Cloud Lab基于noVNC和Gate one分别实现了VNC桌面和SSH终端的Web客户端,背后的Labs 环境通过Docker镜像管理。
本文拟采用如下方式逐步实现Linux的远程桌面访问。实现方案分成两个部分。Linux是一个天然的网络的多用户操作系统,因此,基于Linux天然的网络特征,第一部分要实现的就是基于文本模式的形式进行远程联接。根据Linux的设计理念,分布式的通信可以依赖于进程的概念进行抽象,将Socket文件描述符看成多进程在网络形态下的通行方式。根据这个目标,我们可以把远程等待连接的机器看成一个始终在轮询的Socket监听进程。同时,把准备建立连接的机器看成请求的Socket进程。那么,我们就可以在Linux的工具箱中查这种带有网络通信的功能的命令行程序。仅仅具有Socket连接功能是不够的。因为这样的工具提供了网络通信的能力。这就是web shell思想的由来根据设计的目标,我们可以将网络通信和命令行shell进行组合,寻一组带有网络通信的命令行工具完成目标需求。
实现方案的第二部分是实现远程桌面功能。不同于Win­dows,远程桌面有自己的专属协议。我们需要根据相应的协议来寻软件的实现。在Linux的开源工具箱中,RDP的VNC 已经是远程桌面的事实标准,
我们可以根据VNC进行第二部分的设计与实现。
综上所述,我们首先根据webshell的思想进行文本模式的连接,其次,在遵循VNC协议规范下寻RDP的解决方案。这就是本文想要尝试的目标。2使用Web SSH实现远程桌面
2.1相关技术介绍
2.1.1NVM介绍
NVM全名Node Version Manager,是nodejs版本的管理工具,NVM管理多个nodejs和npm,使nodejs可多版本共存、切换使用。
java是做软件的吗
我们可能同时在进行2个项目,而2个不同的项目所使用的node版本又是不一样的,或者是要用更新的node版本进行试验和学习。这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,而NVM就是为解决这个问题而产生的,他可以方便的在同一台设备上进行多个node版本之间切换,而这个正是NVM的价值所在。
2.1.2nodejs介绍
Node.js是一个开源与跨平台的JavaScript运行时环境,它是一个可用于几乎任何项目的流行工具,是
类风湿最佳方案项目开发依赖。Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。Nodejs釆用事件驱动和非阻塞I/O模型,使其变得轻微和高效,非常适合构建运行在分布式设备的数据密集型实时应用。
运行于浏览器的Java script,浏览器就是Java script代码的解析器,而Nodejs则是服务器端JS的代码解析器,存于服务器端的JS代码由Nodejs来解析和应用。
JS解析器只是JS代码运行的一种环境,浏览器是JS运行的一种环境,浏览器为JS提供了操作D0M对象和window 对象等接口。Node.js也是JS的一种运行环境,node.js为JS 提供操作文件、创建http服务、创建TCP、UDP服务等接口,所以Nodejs可以完成其他后台语言能完成的工作。
2.1.3NPM介绍
NPM的全称是Node Package Manager,是随同node.js 一起安装的包管理工具,NPM定义了包依赖关系标准。No­dejs自身提供了基本的模块,但是在这些基本模块上开发实际应用需要较多的工作,NPM能解决NodeJS代码部署上的很多问题oNPM上已经有大量的Nodejs库或框架,这些库从各个方面可以帮助Nodejs的开发者完成较为复杂的应用。
为爱鼓掌的视频教学的方法收稿日期:2021-02-23
作者简介:陈超(1982-),男,江苏南京人,Java工程师,浩鲸云计算科技股份有限公司,应用软件工程;李春颖(1973-),女,黑龙江佳木斯人,讲师,南京工程学院计算机工程学院,应用软件工程;陈科燕(1979-),女,江苏常熟人,讲师,南京工程学院计算机工程学院,应用软件工程。
138
常见的使用场景有以下几种:允许用户从NPM服务器下载别人编写的第三方包到本地使用;允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用;允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
2.1.4WebSSH介绍
Web SSH是一个简单的Web SSH客户端,用作连接到SSH服务器的SSH客户端。它是用Python编写的,基于tornado,paramiko和xterm.js。SSH是一种网络协议,在不同的计算机登录时候,通过加密技术来保证通信的安全和可靠性。
2.2设计过程
2.2.1下载安装
(1)安装NVM
Linux作为一个比较成熟的操作系统,已经提供了相当丰富的解决方案,用来解决日常工作的问题。在Unix系统中增加新的命令是一件很容易的事。把程序的可执行文件放到以下任意一个目录就可以了:/bin,/usr/bin,/usr/local/bin,这些目录里面存放着很多系统命令。Unix系统中一开始并没有这么多的命令,一些人编写程序用来解决某个特定的问题,而其他人也觉得这个程序很有用,随着越来越多的使用,这个程序就逐渐成了Unix的标准命令。因此,我们在组建开源项目的时候,我们就可以将Linux命令灵活的进行组合应用,在本文中,我们首先使用安装的就是crul命令。
使用curl命令,curl是一个根据URL规则,利用命令行进行文件传输工具。Curl命令可以很好的支持文件的上传和下载,是综合传输工具,具体命令如下:
curi-o-hUps://raw.githubusercontentcom/creationix/nvrn/v0.33.8/ install.sh|bash。
首先输入sudo vim/f,进入/etc目录下的f文件进行编辑操作,到namesever,将后面的DNS 修改为114.114.114.114或者&8.&8,这次设置DNS仅此次生效,重启即恢复原样。再次输入curl命令即可成功下载。
(2)安装Nodejs
使用NVM安装Nodejs,使用nvmls-remote查看目前线上所能安装的所有node版本,选择版本14.4.0,输入nvm install 14.4.0,下载安装14.4.0版本的Nodejs。
(3)查看是否成功安装npm,nodejs
因为NPM是随同node.js一起安装的包管理工具,所以不需要再次安装,输入npm-v,node-v来查看是否已经成功安装npm,nodejs,如图2-4所示,结果表明已经安装成功。
(4)下载Web SSH2
Git是一个开源的分布式版本控制系统,早期是Linux之父Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。与常用的版本控制工具CVS,Sub-version等不同,它釆用了分布式版本库的方式,不必服务器端软件支持。本次使用git clone命令,从现有GIT仓库中拷贝项目。输入Git查看是否有安装,如果没有,根据反馈提示输入sudo apt install git安装。
输入git clone github/billchurch/Web SSH2,从git仓库中拷贝Web SSH2o
(5)安装Web SSH2
安装Web SSH2首先要先进入Web SSH2/app目录,输入cd Web SSH2/app即可进入该目录。然后使用npm init初始化,之后一路回车,有需要输入yes的就输入yeso npminit是用来初始化项目,使用npm init指令用来创建项目描述文件package.json,命令行里会以交互的形式让你填一些项目的介绍信息,不知道怎么填的直接一直回车,在项目目录下会自动生成packagejson文件,打开可以看到刚才配置的
项目信息。
再之后,输入npm install-production安装生产依赖,添加了production参数后将仅仅安装package.json中dependencies 里面的包,不会安装devDependencies里面的包。
2.2.2实现远程连接
运行Web SSH。在Web SSH2/app目录下,输入npm start,启动模块。通过浏览器测试是否连接成功,实现远程桌面,格式为Web SSH服务器IP:W eb SSH端口/ssh/host/任意可ping通终端IP。
2.2.3改进使用docker和VNC实现桌面
Docker是一个开源项目,诞生于2013年初,遵从了Apa­che2.0协议,Docker的目标是实现轻量级的操作系统虚拟化解决方案。VNC(Virtual Network Computer)是虚拟网络计算机的缩写,它是由AT&T的欧洲研究实验室开发的。他的本质是一种显示系统:将完整的窗口界面通过网络,传输到另一台计算机的屏幕上。其实现过程如下:
第一步:下载安装Docker
(1)设置仓库
更新apt包索引,输入sudo apt-get update,安装apt依赖包,用于通过HTTPS来获取仓库,输入sudo apt-get install\apt-transport-https\ca-certificates\curl\gnupg-agent\software­properties-common o
添加Docker的官方GPG密钥,输入curl-fsSL download.docker/linux/ubuntu/gpg|sudo apt-key add
9DC858229FC7DD38854A E2D88D81803C OEBF CD88通过搜索指纹的后8个字符,验证现在是否拥有带有指纹的密钥,输入sudo apt-key fingerprint0EBFCD88,至此,添加密钥成功。
设置稳定版仓库,输入sudo add-apt-repository\"deb [arch=amd64]download.docker/linuxAibuntu\$(lsb_ release-cs)\stable"。
(2)安装Docker Engine-Community
安装最新版本的Docker Engine-Community和container­ci,输入sudo apt-get install docker-ce docker-ce-cli container-d.io。安装完成之后,可以测试Docker是否安装成?tl:sudo doc­ker runhello-worldo通常不能成功的主要原因在于;docker在本地没有到hello-world镜像,也没有从docker仓库中拉取镜像,大多由于docker服务器在国外,国内的访问往往无法正常拉取镜像,此时就需要我们为docker设置国内阿里云的镜像加速器。(或者清华大学等)解决方案如下:
pyecharts菜鸟教程
进入/etc/docker目录,创建文件daemon.json文件,输入sudo touch daemon.json,
修改文件权限为可读可写可执行,输入sudo chmod777 daemon.json。修改配置文件,添加阿里云镜像地址,重启docker 服务,输入systemctl restart docker,再次测试拉取helloworld镜像,成功拉取。
139
linux操作系统镜像第二步:下载安装VNC
(1)安装xllvnc
输入sudo apt-get install xllvnc-y,安装xllvnc,并设置vnc密码
输入sudo xl lvnc-storepasswd/etc/xl lvnc.pass,进行VNC 的密码设置。
⑵创建xllvnc自启动服务
修改件,输入sudo v im/Hb/systemd/system/xl lvnc.service,然后启动xllvnc服务。
在命令行输入sudo systemctl enable xl lvnc和sudo service xllvnc start,启动xllvnc服务。
第三步:实现远程桌面
(1)拉取镜像
输入docker pull dorowu/ubuntu-desktop-lxde-vnc,拉取镜像,此时出现的错误往往是权限的问题。docker命令的操作都要用系统guanlizhe身份执行,加上sudo再次拉取,便可以拉取成功。
(2)设计完成
运行容器,输入的命令行格式如下docker run-p6080:80-p5900:5900-e VNC_PASSWORD=VNC登录的密码-v/dev/ shm:/dev/shm dorowu/ubuntu-desktop-lxde-vnc”
其中IP设置了端口参数,6080:是web版的Vnc,可以在浏览器上直接访问桌面环境,5900:是使用客户端工具vnc vi­ewer连接的端口。该镜像以VNC的方式连接到桌面环境服务器,可以下载个VncViewer作为客户端连接到容器。
根据格式,我输入的命令为sudo docker run-p6080:80-e VNC_PASSWORD=531165134-v/dev/shm:/dev/shm dorowu/ ubuntu-desktop-lxde-vnc。
在浏览器中输入完整的网址:192.168.0.105:6080/#/…即可观察到结果。
2.3远程桌面的安全性设计
不同于windows操作系统,Linux在设计之初就没有将图形用户界面作为交互的重点,它是使用X-window技术,将GUI 界面挂载在操作系统内核之上。然而,对于绝大多数的普通用户而言,"桌面”是用户登录到操作系统之后所看到的屏幕显示,也是普通用户使用计算机进行工作的交互界面。为了便捷用户的使用,本文提供的用户界面也必须考虑到易用性。参考windows的设计,桌面用户要求方便使用,但是远程桌面必须考虑到安全因素。
最简易有效的安全策略就是密码。安全强度足够的密码是系统安全的第一道防线。由于Linux天生就是一台网络计算机,那么强健的密码策略必须遵循。比如至少8位,包含数字,大小写字母以及特殊字符等等。
Linux天生的多用户特性也在远程桌面连接中必须加以考虑。不同于windows,在远程连接Linux桌面以后,锁定屏幕的登入、登出操作必须考虑。同时,应当参考SELinux安全策略,必须对用户进程的权限进行最小化设定,从而确保使用远程桌面登录系统的时候,及时遭受了网络攻击也不会造成重大影响。
最后,文件操作也需要引起关注。尽量隐藏不必要的文件和文件夹,关闭文件共享。在本文的实践中,如果有不想被其他用户访问的文件,最简易的方式就在原文件之前加一个“.”。
2.4远程桌面的优化:使用设计模式提供可复用的远程桌面软件架构
Linux的设计有若干哲学:一方面,keep it simple.它强调所有的linux的工具应当是小而美的。如果一个软件过于庞大,那么它所带来的软件维护成本必然十分高昂。在linux 的远程桌面软件中,我们如何基于这个设计哲学来提升远程桌面的软件质量呢?答案显而易见,就是利用现有的工具进行组件式开发。在上文的介绍,当前的软件就基于curl和Web SSH进行了组合。另一方面,Do not repeat yourself,组合优先原则。当前的软件就是及时有效的组合了curl和WebSSH 工具,像搭积木一样将目标需要组合起来。既可以提升开发的速度,软件的质量也可以得到保证。
3结语
综上所述,Linux是一个高度自由的定制化的开源系统,相较于Windows系统易用性稍显不足。本文提供了一种基于Web SSH的方式,使得初级的Linux用户也可以借助于类似Windows桌面环境的方式使用操作系统。这不失为一种便捷的解决方案。
参考文献:
[1]叶核亚著.数据结构(JAVA版)[M].北京:电子工业出版
社,2015.
[2]Alfred V.Aho,Monica S.Lam,Ravi Sethi,Jeffrey D.Ullman
著,赵建华,郑滔,戴新宇译.编译原理(第2版)[M].北京:机械工业出版社,200&
[3]Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,
Clifford Stein著,殷建平,徐云,王刚,刘晓光,苏明,邹恒明,王宏志译.算法导论(原书第三版)[M].北京:机械工业出版社,2013.
linuxgrep取反[4]刘伟.设计模式实训教程(第二版)[M].北京:清华大学出
版社,2018.
[5]Zhou,Chunjie,and Hui Chen."Development of a PLC virtual
machine orienting IEC61131-3standard."[M1.2009Interna­tional Conference on Measuring Technology and Mechatro-nics Automation.Vol.3.IEEE,2009.
[6]Leonard Richardson,Mike Amundsen著,赵震_,李哲译.
RESTful Web APIs中文版[M],北京:电子工业出版社, 2014.
[7]姜有林.嵌入式实时操作系统[J].科技信息,2008(3).
[8]Labrosse J J.uC/OS-IU:The Real-Time Kernel and the Tex­
as Instruments Stellaris MCUstM],Micrium Press,2010 [9]Wang S,Ravishankar C V,Shin K G.Open architecture
controller software for integration of machine tool monitor-ing[C].IEEE International Conference on Robotics and Au­tomation,1999.Proceedings.IEEE,1999:1152-1157vol.2.
[10]Wang S,Shin K G.Reconfigurable software for open archi­
tecture controllers[C],IEEE International Conference on Robotics and Automation,2001.Proceedings.IEEE,2001: 4090-4095vol.4.
140

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。