Linux桌面系统远程访问全解析

Posted McwoLF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux桌面系统远程访问全解析相关的知识,希望对你有一定的参考价值。

 

在网络中,局域网经常会用到windows远程桌面,广域网会使用TeamViewer等工具软件。同样,Linux终端要访问其它终端,也会被其它终端所访问。远程访问协议主要有RDP、SSH和VNC等,不同系统间的访问矩阵总结如下。

远程访问:协议与工具

一、远程访问协议与服务

远程访问服务常用的有RDP、SSH、VNC等协议,RDP是主要在Windows环境中使用,而SSH、VNC则广泛应用于Linux/Unix环境。但是,所有这些协议与服务都有Windows和Linux版本,甚至手机端版本。

要注意服务端的防火墙要放行相应的端口。有时候需要关闭设置SELinux(setenforce 0)。

1. RDP协议与windows远程桌面【A】

RDP(Remote Desktop Protocol)远程桌面协议,用于访问微软终端服务,端口号 TCP 3389。大部分的Windows、Linux、FreeBSD、Mac OS X都有相应的客户端。windows从NT开始提供终端服务,是微软收购Citrix获取的技术。终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;协议后来不断升级,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数据输出。

主要版本有:

  1. 4.0:这是第一个版本.随同终端机服务(TerminalServices)出现在WindowsNT4.0Server TerminalServerEdition.
  2. 5.0:由Windows2000Server提供.加入了许多新功能,包括打印到用户端打印机,针对网络带宽使用的改进等等.
  3. 5.1:由WindowsXP Professional提供.支持24位颜色显示及声音的支持.
  4. 5.2:由WindowsServer2003提供,包括了consolemode connections,session directory,以及用户端资源的引用。
  5. 6.0版:WindowsXP SP2或Windows Server 2003SP1/SP2或WindowsXP Professionalx 64Edition。包括许多重大改进,最值得注意的是可以从远程使用单一应用程序,而非整个桌面;以及32位颜色显示的支持。
  6. 6.1版:Windows Server 2008或Windows Vista SP1或Windows XP SP3(或SP2之后安装过KB952155更新)。
  7. 7.0版:Windows Server 2008 R2或Windows 7,Windows Vista SP1或Windows XP SP3(需安装过KB969084更新)。

RDP协议支持:

  1. 多种显示支持,包括8,15,16,24,32位色.
  2. 128位加密,使用RC4加密算法(此为内定的加密方式;比较旧版的用户端可能使用较弱的加密强度).
  3. 支持TLS(TransportLayerSecurity)(前身为SSL).
  4. 声音转向(redirection)支持,使用者可以在远程计算机执行有声音的应用程序,但是将声音导引至用户端计算机来听.
  5. 文件系统转向支持,使用者可在使用远程计算机的过程中,引用本地(用户端)计算机上的文件系统.
  6. 打印机转向支持,在使用远程计算机时,可以使用本地(用户端)计算机上的打印机输出,包括直接连在用户端计算机的打印机或网络共享打印机.
  7. 通讯端口转向支持,远程计算机上的应用程序可以使用本地(用户端)计算机上的序列端口或平行端口.

启用目标windows计算机的远程桌面,在windows计算机桌面上鼠标右键点击“我的电脑”图标,选择“属性”,在属性窗口中,点击“远程”选项卡,如下图

开启windows远程桌面

点击“允许用户远程连接到此计算机”,默认管理员具有此权限,远程桌面登录需要输入对应的账户和密码,如果你只打算让某个用户远程访问,可以在“远程用户”里添加。设置完成后点击确定即可。默认的端口是 3389,设置后Windows 7默认为防火墙添加此规则,但是如果你手动修改了远程桌面端口(安全原因),要把防火墙中的端口号同步修改。

注:Linux除了有内置的rdp客户端(如rdesktop、remmina)可以访问windows桌面外,xrdp等作为RDP Server,可以通过RDP协议访问Linux桌面。

2. SSH协议与OpenSSH服务器【B】

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,非常容易截获口令和数据。SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。通过使用SSH,你可以把所有传输的数据进行加密。

在大多数Linux操作系统中,包括中标麒麟和银河麒麟,SSH服务是默认安装和开启的,一般使用的是OpenSSH服务。

如果不能访问,可以用netstat -ntlp和ps -e命令看是否启动了服务(中标麒麟系统中控制面板中【服务】可以查看所安装的所有后台服务),再看看防火墙规则是否开启22端口、SELinux是否启用和做了规则限制。

查看Linux后台网络服务

【注】ubuntu安装后默认只有ssh客户端(openssh-client),没有安装服务端。

安装,sudo apt install openssh-server。配置文件是 /etc/ssh/sshd_config

ps -e |grep ssh,看到sshd则表示sshserver已经启动,否则sudo /etc/init.d/ssh start 启动sshserver

在Windows环境中用SSH的客户端工具是非常多和优秀,随着PowerShell的推出和不断改进,Windows命令行与逐渐功能丰富起来,也适合提供SSH类型服务。

PowerShell主要采用Web Services for Mangement(WS-MAN)进行远程处理,WS-MAN完全基于Http(默认5985)或者Https(默认5986)进行工作。微软对WS-MAN的实现是Windows Remote mangement(WinRM),是一个基于SOAP的后台服务。

从PowerShell 6开始,除了WS-MAN之外,远程处理技术还可以基于SSH协议。在最新的Windows 10和Windows Server 2019中,可以使用OpenSSH连接远程机器,OpenSSH客户端在最新的Windows 10和Windows Server 2019中已默认安装,在 设置\\应用\\可选功能 列表下可以找到。

SSH协议登录过程的进一步分析与免密访问配置,参考本博客中《SSH访问Linux:登录过程解析、免密配置》。

3. VNC协议与服务【C】

Linux下的桌面共享服务主要是VNC服务,VNC (Virtual Network Console)是虚拟网络控制台的缩写,远程控制能力强大,高效实用,由 AT&T 欧洲研究实验室开发的开源软件。

VNC与X Window

VNC服务默认使用5900端口,服务软件主要有VNCServer、Vino-Server等。

3.1 Linux远程桌面共享与Vino-server

Ubuntu、中标麒麟和银河麒麟默认内置了Vino-Server。以中标麒麟为例:【控制面板】→【远程桌面授权】,(银河麒麟中叫【桌面共享】,Ubuntu是系统(System) —> 首选项(Preferences) —> 远程桌面(Remote Desktop)下),出现配置界面如下图。选中“允许其他人查看您的桌面”,设置一个单独的访问密码,VINO就会启动服务器端进程vino-server,同时监听TCP 5900端口。如果不选中“允许其他用户控制您的桌面”,客户端则只能观看不能操纵。

中标麒麟操作系统远程登录授权设置

注意:由于vino的加密方式和windows VNC客户端不兼容,还需要改写一个系统参数,在命令行终端下输入:

gsettings set org.gnome.Vino prompt-enabled false

gsettings set org.gnome.Vino require-encryption false

 3.2 Linux远程桌面与VNC-server

Vino-Server方式有一个最显著的缺点:那就是当你重启机器之后,必须首先到远程服务器那边登录机器,进入系统(相当于创建了一个Session)之后,才能在本地使用远程桌面连接这个远程服务器。这个缺点导致Vino-Server有时极为不方便。 一种解决方法就是让用户自动登录windows桌面,启动vino会话。参考https://blog.csdn.net/weixin_33842328/article/details/93449185和https://blog.csdn.net/rong11417/article/details/104671137/等。

或者是安装vnc-server,每个用户都可以启动自己的vncserver,每个用户可以启动多个vncserver,用显示端口号:1,:2,:3等等来标识,访问的时候需要带上端口号。

下面以tigervnc-server 1.3.11 mips64版本为例(从软件仓库安装)。安装后,出现从vnc viewer客户端访问是一片空白,没有Linux桌面内容出现,需要修改 ~/.vnc/xstatup文件(chmod 777)。网络上大多的参考解决方案都是GNOME桌面的,而国产Linux基本都是MATE桌面,所以配置不对,最后参考《VNC访问mate或gnome桌面的服务端配置》。设置如下:

#!/bin/sh

# Uncomment the following two lines for normal desktop:

# unset SESSION_MANAGER

# exec /etc/X11/xinit/xinitrc


#export XKL_XMODMAP_DISABLE=1

unset SESSION_MANAGER

unset DBUS_SESSION_BUS_ADDRESS

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

xsetroot -solid grey

vncconfig -iconic &

# x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &

mate-session &

注:vnc-server也支持vion-server类似的桌面共享模式,使用下面启动模式

vncserver -alwaysshared 

 3.3 Windows下的VNC

Windows也可以使用VNC协议访问远程桌面,安装VNC Viewer或者TigerVNC Viewer。

Windows下建立VNC服务,使用TigerVNC server或者VNC Server。下图是TigerVNC Server的运行配置界面,TigerVNC Server可以安装成windows 服务自启动。

Windows下VNC服务TigerVNC

二、远程访问工具及使用

本节中举例的windows电脑的IP地址是 192.168.14.113,建有普通用户“mc”,中标麒麟Linux电脑的IP地址是192.168.14.3,建有普通用户“casic”。

1. mstsc远程桌面:远程访问windows

windows远程桌面是比较常见和简便的工具,并且能将本地资源映射到远程windows电脑。但是,要注意Window远程桌面mstsc和带参数的mstsc /console的区别。

mstsc不带参数连接上远程主机后(默认),是开了一个新的桌面会话Session(是一个随机的名字,名字都是变化的,),本地主机所看到的远程主机的桌面其实是一个虚拟桌面,正如前面所说,并非是远程主机显示器此时显示的桌面,而是精简化之后滴,除了开机就运行的一些程序外,此时远程主机并不会注销当前用户并锁定桌面。也可以称为“虚拟桌面”,自然也可以有多个session桌面会话,操作互不“影响”。

带参数mstsc /console,连接上远程主机的时候,远程主机便会立即注销当前登陆使用的用户并锁定桌面(console session),而在远程主机上的相关操作都将影响本地的使用,也就是说,当远程主机重新登陆用户的时候,本地将断开与之的连接。这种特殊的“虚拟桌面”可以称为“桌面共享”

2. putty:远程访问Linux 命令行

Windows下远程命令行类工具,收费的有secure crt等,免费常见如putty等。

putty是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。Putty是开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权。现在也支持各类Unix平台。

Putty配置界面

从windows中使用putty SSH客户端远程访问中标麒麟系统的命令行界面,如下图。

通过SSH协议远程访问中标麒麟终端的命令行界面

3. VNC Viewer:远程访问Linux桌面

VNC客户端很多,常见的有VNC Viewer、TigerVNC Viewer等,都支持windows和Linux等各种平台。后面会提到的remmina也可以作为Linux下的VNC客户端使用。如果Windows上安装了VNC服务,也可以用VNC Viewer远程访问windows桌面。

VNC协议与服务一节中介绍了,vino的加密方式和这些windows VNC客户端不兼容,需要改写系统参数才能正常访问。

在windows终端中使用VNC Viewer客户端访问,如下图:

VNC客户端

提示输入访问密码,就是刚才在Linux的远程桌面授权中输入的密码,进入Linux图形界面。

注意,如果Linux端是vino-server(桌面共享),VNC Server直接填写ip地址即可,下图中两边的屏幕显示是同步的。如果Linux端是vnc-server(远程桌面),需要填写ip地址和桌面会话编号,如192.168.14.3:1,会新建一个桌面会话,和远端登录的桌面不同。

VNC Viewer客户端访问中标麒麟桌面共享
Tigervnc viewer访问远程Linux

 

4. Remmina:Linux远程访问工具

中标麒麟带有远程桌面图形程序Remmina ,【开始菜单】→【互联网】→【远程桌面连接】,启动远程桌面连接软件,如下图。远程桌面连接支持 RDP、VNC和 SSH等协议,使用SSH协议远程管理设备和Linux电脑,使用VNC方式访问Linux电脑桌面,使用RDP协议访问windows电脑桌面。

   【注】Remmina通过插件支持各种协议,可以自行在软件仓库中安装相应插件。

银河麒麟V10的remmina加载了RDP协议插件,但没有正常列出。

中标麒麟的远程桌面支持SSH/VNC/RDP三种访问协议

 

 4.1 Linux远程访问windows远程桌面(RDP) ❹

首先启用目标windows计算机的远程桌面。然后在中标麒麟操作系统终端中,【开始】→【互联网】→【远程桌面连接】,如下图。

中标麒麟操作系统远程访问windows桌面

选择windows桌面访问的RDP协议,在地址上填写windows电脑的ip,点击连接,进入windows远程登录界面,登录后进入windows桌面。还可以将这个连接进行保存,按“+”键,可以新增一个连接,例如mywin7PC,填入用户名“mc”密码,和windows远程桌面一样,可以将本机的资源共享过去(这也是一种方便的在Linux和windows间交换文件方法)。

远程访问windows桌面配置参数

出现登录界面如下图,上面是一排远程桌面工具按钮,如调整窗口大小、特殊键(Ctrl+Alt+del等)、截屏等,可以自动隐藏。登录成功后,可以看到windows桌面,并且中标麒麟系统的D盘也就是用户盘也可以在windows文件管理器中直接访问。

 

远程访问windows桌面登录界面

 

远程进入windows桌面

【注】rdesktop是linux下支持Windows远程桌面连接的客户端程序(银河麒麟V10默认没有安装,需要手动安装),在linux系统下可通过它远程访问Windows桌面。gdesktop是Gnome桌面的远程登录前端,是其图形界面版本。

从命令行启动rdesktop:

$ rdesktop -f 192.168.1.112

-f参数默认全屏打开,使用Ctrl + Alt + Enter可以退出全屏模式。

可以简单的写个shell脚本,每次点击就可以连接。

rdesktop远程访问windows

更完整的参数如下:

$ rdesktop -f -a 16 -u user -p pass  IP  -r sound:on/off  -g 1024*768

1、user和pass分别是目标电脑的帐号和密码,-a 16表示位色,最高就是16位;
2、IP为目标电脑的IP地址;
3、sound:on表示传送目标电脑的声音,off则为关闭;
4、-g 后接想要显示的分辨率,使用 -g workarea 可自适应铺满当前linux窗口大小

5、使用 -f 参数进入全屏模式,中途Ctrl+Alt+Enter退出全屏;
6、-r** disk:share_name=/local-disk** 将本地磁盘映射到远程电脑,其中share_name为显示名称,可自定义,local-disk表示本地linux的一个目录,比如 /data。
7、-r clipboard:PRIMARYCLIPBOARD 允许在远程主机和本机之间共享剪切板,即复制粘贴。

4.2 Linux远程访问Linux命令行(SSH) ❺

远程访问Linux系统终端命令行界面使用SSH协议,Linux系统一般内置了ssh命令,ssh -l root 192.168.10.58

中标麒麟操作系统桌面版已经自带SSH Server,可以直接远程访问。可以从上图的界面中选择SSH协议,输入要远程访问的中标麒麟终端IP地址,然后输入用户名casic及密码。

ssh远程访问Linux命令行(上面为remmina,下面为ssh命令)

 

4.3 Linux远程访问VNC桌面(VNC)  ❻

在另外一台Linux终端上,可以使用远程桌面的VNC协议方式访问这台Linux终端,如Remmina就包括VNC客户端功能。

5. Microsoft Remote Desktop:从手机远程访问Windows桌面

Microsoft Remote Desktop 10是微软官方免费远程桌面控制 Windows 的软件 APP,跨平台支持 androidios 、Win、macOS 系统。Microsoft Remote Desktop 10非常强大,可在 PC、安卓手机和平板、iPhone / iPad、甚至苹果 Mac 上直接远程连接并控制你的电脑,在平板上应该效果会比较好,能将 Win10 变成“触摸屏版本”使用。

在华为应用市场上已经可以下载到这个APP,如下图左。

如果你的手机和笔记本电脑在一个wifi下面,可以直接访问,如下图右通过IP地址或者机器,输入远程电脑的用户和密码,如下图右。

Microsoft Remote Desktop

登陆成功后显示远程windows的桌面,默认分辨率是600*1200(可以横屏)。在手机屏幕上滑动控制鼠标,单击屏幕相当于鼠标单击,如下图左。

保存过的会话配置会记录下来,下次使用直接可以点击打开,如下图右。

Microsoft Remote Desktop访问远程windows桌面

Microsoft Remote Desktop访问的是当前桌面(桌面共享),相当于mstsc /console,

6. JuiceSSH:从手机远程访问Linux命令行

JuiceSSH是一款高质量的免费无广告SSH客户端应用,支持包括SSH,Local Shell,Mosh 和Telnet。

JuiceSSH使用和windows下的putty等类似,如下图:

JuiceSSH访问远程Linux命令行

7. VNC Viewer for Android:从手机远程访问VNC桌面

VNC Viewer for andorid是一款兼容标准vnc服务端的远程控制应用。无论你使用什么系统,只要有VNC服务端,就可以使用此应用进行连接和远程管理。使用方法和前面差不多,下图是访问的windows VNC服务。

VNC Viewer for andorid 访问远程VNC桌面

 

三、其他

1. 桌面共享与虚拟桌面

前面介绍RDP协议也提到,远程桌面实际上有两种类型:一种是桌面共享(包括控制),客户端和服务端显示同样的桌面;二是虚拟桌面,客户端新建了一个桌面会话。桌面共享可以算是虚拟桌面的特例。

Mstsc是虚拟桌面,mstsc /console是共享桌面。

vnc-server是虚拟桌面,vncserver -alwaysshared 、Vino-server是桌面共享。

QQ远程控制、TeamViewer等远程协助控制工具都是共享桌面。

【?】VNC协议无声音和usb传输,RDP协议由于在色彩、音频、usb及本地磁盘映射方面较好,相对更适用于虚拟桌面。

2. SSH X11转发

除了远程访问Linux桌面外,另外一种方式是不启用桌面,仅仅使用单个Linux图形程序,比较适合偶尔使用Linux应用的场景。可以使用SSH 的x11转发实现。

Linux服务端:

修改/etc/ssh/sshd_config文件,确保文件中有如下行

# vim /etc/ssh/sshd_config

X11Forwarding yes

SSH客户端(windows):

Putty配置中,连接/SSH/X11项,勾选右侧X11 forwarding

Xming 是一个功能强大的开源 X Server,实现本地X显示,安装后系统栏

Putty设置X11转发

 

xming服务托盘

配置完成后,putty SSH登录到远程Linux,以中标麒麟的系统信息程序为例(hardinfo),在命令行下输入

#hardinfo

 会启动图形化的hardinfo程序,如下图,包括Firefox、WPS都可以这种方式启动,当然WPS这种工具操作起来会麻烦一些。

3. TeamViewer与内网穿越

上面举例主要是同一个LAN(wifi)下的访问。如果是从家里访问办公室电脑,需要进行内网穿透。

一种是自行配置内网穿透,如端口映射或者 FRP 内网穿透,然后就可使用前述各工具。

第二种是使用Teamviewer以及相似的向日葵等工具,甚至QQ远程控制都是远程控制类工具(基于桌面共享),都支持内网穿透(realVNC也可以提供类似功能)。适合技术支持、远程维护等。

注:Vncserver支持反向连接设置。在大多数情况下,vncserver总处于监听状态,vnc client主动向服务器发出请求从而建立连接。然而在一些特殊的场合,需要让vnc客户机处于监听状态,vncsrever主动向客户机发出连接请求,此谓vnc的反向连接。

4. 多用户使用

VNC Server身份验证基于密码,而不需要用户名。因此,每个用户必须启动一个独立的 VNC 服务器会话,并通过指定正确的端口号连接到 VNC 实例。如果多用户使用请参考相关文章进行配置。

四、参考资料

  1. https://www.cnblogs.com/qpanda/p/4331782.html 远程桌面协议浅析
  2. https://www.jianshu.com/p/f60cec98eccd Linux和Windows间的远程桌面访问
  3. https://www.jianshu.com/p/8c2e796b482d VNC访问mate或gnome桌面的服务端配置
  4. https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-5.1 PowerShell remoting over SSH and OpenSSH in Windows
  5. https://blog.csdn.net/yidichaxiang/article/details/104642175 Windows Powershell 安装 SSHD 服务 支持ssh远程访问
  6. https://blog.csdn.net/wx_lanyu/article/details/104459821 在外通过手机远程控制家中或者公司的电脑,有关于在家用路由器上设置端口映射的内容
  7. https://www.cnblogs.com/navysummer/p/12510999.html  FRP 简单入门安装配置教程
  8. https://blog.csdn.net/L835311324/article/details/86608835 VNC多用户远程桌面
  9. https://blog.csdn.net/chili_min/article/details/11124643  使用 VNC 实现多用户登录

以上是关于Linux桌面系统远程访问全解析的主要内容,如果未能解决你的问题,请参考以下文章

Linux用户宝典:值得一用的5款远程桌面应用程序

如何登陆linux桌面端 xstart

如何linux 远程桌面访问windows。

Linux(redhatcentos)下安装xrdp

如何设置linux 的vnc远程桌面一连接直接全屏

linux下使用FreeRDP 连接 Windows 远程桌面