在网络中,局域网经常会用到windows远程桌面,广域网会使用TeamViewer等工具软件。同样,Linux终端要访问其它终端,也会被其它终端所访问。远程访问协议主要有RDP、SSH和VNC等,不同系统间的访问矩阵总结如下。
远程访问服务常用的有RDP、SSH、VNC等协议,RDP是主要在Windows环境中使用,而SSH、VNC则广泛应用于Linux/Unix环境。但是,所有这些协议与服务都有Windows和Linux版本,甚至手机端版本。
要注意服务端的防火墙要放行相应的端口。有时候需要关闭设置SELinux(setenforce 0)。
RDP(Remote Desktop Protocol)远程桌面协议,用于访问微软终端服务,端口号 TCP 3389。大部分的Windows、Linux、FreeBSD、Mac OS X都有相应的客户端。windows从NT开始提供终端服务,是微软收购Citrix获取的技术。终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;协议后来不断升级,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数据输出。
主要版本有:
RDP协议支持:
启用目标windows计算机的远程桌面,在windows计算机桌面上鼠标右键点击“我的电脑”图标,选择“属性”,在属性窗口中,点击“远程”选项卡,如下图
点击“允许用户远程连接到此计算机”,默认管理员具有此权限,远程桌面登录需要输入对应的账户和密码,如果你只打算让某个用户远程访问,可以在“远程用户”里添加。设置完成后点击确定即可。默认的端口是 3389,设置后Windows 7默认为防火墙添加此规则,但是如果你手动修改了远程桌面端口(安全原因),要把防火墙中的端口号同步修改。
注:Linux除了有内置的rdp客户端(如rdesktop、remmina)可以访问windows桌面外,xrdp等作为RDP Server,可以通过RDP协议访问Linux桌面。
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,非常容易截获口令和数据。SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。通过使用SSH,你可以把所有传输的数据进行加密。
在大多数Linux操作系统中,包括中标麒麟和银河麒麟,SSH服务是默认安装和开启的,一般使用的是OpenSSH服务。
如果不能访问,可以用netstat -ntlp和ps -e命令看是否启动了服务(中标麒麟系统中控制面板中【服务】可以查看所安装的所有后台服务),再看看防火墙规则是否开启22端口、SELinux是否启用和做了规则限制。
【注】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中已默认安装,在 设置\应用\可选功能 列表下可以找到。
Linux下的桌面共享服务主要是VNC服务,VNC (Virtual Network Console)是虚拟网络控制台的缩写,远程控制能力强大,高效实用,由 AT&T 欧洲研究实验室开发的开源软件。
VNC服务默认使用5900端口,服务软件主要有VNCServer、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
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
Windows也可以使用VNC协议访问远程桌面,安装VNC Viewer或者TigerVNC Viewer。
Windows下建立VNC服务,使用TigerVNC server或者VNC Server。下图是TigerVNC Server的运行配置界面,TigerVNC Server可以安装成windows 服务自启动。
本节中举例的windows电脑的IP地址是 192.168.14.113,建有普通用户“mc”,中标麒麟Linux电脑的IP地址是192.168.14.3,建有普通用户“casic”。
windows远程桌面是比较常见和简便的工具,并且能将本地资源映射到远程windows电脑。但是,要注意Window远程桌面mstsc和带参数的mstsc /console的区别。
mstsc不带参数连接上远程主机后(默认),是开了一个新的桌面会话Session(是一个随机的名字,名字都是变化的,),本地主机所看到的远程主机的桌面其实是一个虚拟桌面,正如前面所说,并非是远程主机显示器此时显示的桌面,而是精简化之后滴,除了开机就运行的一些程序外,此时远程主机并不会注销当前用户并锁定桌面。也可以称为“虚拟桌面”,自然也可以有多个session桌面会话,操作互不“影响”。
带参数mstsc /console,连接上远程主机的时候,远程主机便会立即注销当前登陆使用的用户并锁定桌面(console session),而在远程主机上的相关操作都将影响本地的使用,也就是说,当远程主机重新登陆用户的时候,本地将断开与之的连接。这种特殊的“虚拟桌面”可以称为“桌面共享”。
Windows下远程命令行类工具,收费的有secure crt等,免费常见如putty等。
putty是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。Putty是开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权。现在也支持各类Unix平台。
从windows中使用putty SSH客户端远程访问中标麒麟系统的命令行界面,如下图。
VNC客户端很多,常见的有VNC Viewer、TigerVNC Viewer等,都支持windows和Linux等各种平台。后面会提到的remmina也可以作为Linux下的VNC客户端使用。如果Windows上安装了VNC服务,也可以用VNC Viewer远程访问windows桌面。
VNC协议与服务一节中介绍了,vino的加密方式和这些windows VNC客户端不兼容,需要改写系统参数才能正常访问。
在windows终端中使用VNC Viewer客户端访问,如下图:
提示输入访问密码,就是刚才在Linux的远程桌面授权中输入的密码,进入Linux图形界面。
注意,如果Linux端是vino-server(桌面共享),VNC Server直接填写ip地址即可,下图中两边的屏幕显示是同步的。如果Linux端是vnc-server(远程桌面),需要填写ip地址和桌面会话编号,如192.168.14.3:1,会新建一个桌面会话,和远端登录的桌面不同。
中标麒麟带有远程桌面图形程序Remmina ,【开始菜单】→【互联网】→【远程桌面连接】,启动远程桌面连接软件,如下图。远程桌面连接支持 RDP、VNC和 SSH等协议,使用SSH协议远程管理设备和Linux电脑,使用VNC方式访问Linux电脑桌面,使用RDP协议访问windows电脑桌面。
【注】Remmina通过插件支持各种协议,可以自行在软件仓库中安装相应插件。
银河麒麟V10的remmina加载了RDP协议插件,但没有正常列出。
首先启用目标windows计算机的远程桌面。然后在中标麒麟操作系统终端中,【开始】→【互联网】→【远程桌面连接】,如下图。
选择windows桌面访问的RDP协议,在地址上填写windows电脑的ip,点击连接,进入windows远程登录界面,登录后进入windows桌面。还可以将这个连接进行保存,按“+”键,可以新增一个连接,例如mywin7PC,填入用户名“mc”密码,和windows远程桌面一样,可以将本机的资源共享过去(这也是一种方便的在Linux和windows间交换文件方法)。
出现登录界面如下图,上面是一排远程桌面工具按钮,如调整窗口大小、特殊键(Ctrl+Alt+del等)、截屏等,可以自动隐藏。登录成功后,可以看到windows桌面,并且中标麒麟系统的D盘也就是用户盘也可以在windows文件管理器中直接访问。
【注】rdesktop是linux下支持Windows远程桌面连接的客户端程序(银河麒麟V10默认没有安装,需要手动安装),在linux系统下可通过它远程访问Windows桌面。gdesktop是Gnome桌面的远程登录前端,是其图形界面版本。
从命令行启动rdesktop:
$ rdesktop -f 192.168.1.112
-f参数默认全屏打开,使用Ctrl + Alt + Enter可以退出全屏模式。
可以简单的写个shell脚本,每次点击就可以连接。
更完整的参数如下:
$ rdesktop -f -a 16 -u {user} -p {pass} {IP} -r sound:on/off -g 1024*768
1、user和pass分别是目标电脑的帐号和密码,-a 16表示位色,最高就是16位; 5、使用 -f 参数进入全屏模式,中途Ctrl+Alt+Enter退出全屏; |
远程访问Linux系统终端命令行界面使用SSH协议,Linux系统一般内置了ssh命令,ssh -l root 192.168.10.58
中标麒麟操作系统桌面版已经自带SSH Server,可以直接远程访问。可以从上图的界面中选择SSH协议,输入要远程访问的中标麒麟终端IP地址,然后输入用户名casic及密码。
在另外一台Linux终端上,可以使用远程桌面的VNC协议方式访问这台Linux终端,如Remmina就包括VNC客户端功能。
Microsoft Remote Desktop 10是微软官方免费远程桌面控制 Windows 的软件 APP,跨平台支持 Android、iOS 、Win、macOS 系统。Microsoft Remote Desktop 10非常强大,可在 PC、安卓手机和平板、iPhone / iPad、甚至苹果 Mac 上直接远程连接并控制你的电脑,在平板上应该效果会比较好,能将 Win10 变成“触摸屏版本”使用。
在华为应用市场上已经可以下载到这个APP,如下图左。
如果你的手机和笔记本电脑在一个wifi下面,可以直接访问,如下图右通过IP地址或者机器,输入远程电脑的用户和密码,如下图右。
登陆成功后显示远程windows的桌面,默认分辨率是600*1200(可以横屏)。在手机屏幕上滑动控制鼠标,单击屏幕相当于鼠标单击,如下图左。
保存过的会话配置会记录下来,下次使用直接可以点击打开,如下图右。
Microsoft Remote Desktop访问的是当前桌面(桌面共享),相当于mstsc /console,
JuiceSSH是一款高质量的免费无广告SSH客户端应用,支持包括SSH,Local Shell,Mosh 和Telnet。
JuiceSSH使用和windows下的putty等类似,如下图:
VNC Viewer for andorid是一款兼容标准vnc服务端的远程控制应用。无论你使用什么系统,只要有VNC服务端,就可以使用此应用进行连接和远程管理。使用方法和前面差不多,下图是访问的windows VNC服务。
前面介绍RDP协议也提到,远程桌面实际上有两种类型:一种是桌面共享(包括控制),客户端和服务端显示同样的桌面;二是虚拟桌面,客户端新建了一个桌面会话。桌面共享可以算是虚拟桌面的特例。
Mstsc是虚拟桌面,mstsc /console是共享桌面。
vnc-server是虚拟桌面,vncserver -alwaysshared 、Vino-server是桌面共享。
QQ远程控制、TeamViewer等远程协助控制工具都是共享桌面。
【?】VNC协议无声音和usb传输,RDP协议由于在色彩、音频、usb及本地磁盘映射方面较好,相对更适用于虚拟桌面。
除了远程访问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 SSH登录到远程Linux,以中标麒麟的系统信息程序为例(hardinfo),在命令行下输入
#hardinfo
会启动图形化的hardinfo程序,如下图,包括Firefox、WPS都可以这种方式启动,当然WPS这种工具操作起来会麻烦一些。
上面举例主要是同一个LAN(wifi)下的访问。如果是从家里访问办公室电脑,需要进行内网穿透。
一种是自行配置内网穿透,如端口映射或者 FRP 内网穿透,然后就可使用前述各工具。
第二种是使用Teamviewer以及相似的向日葵等工具,甚至QQ远程控制都是远程控制类工具(基于桌面共享),都支持内网穿透(realVNC也可以提供类似功能)。适合技术支持、远程维护等。
注:Vncserver支持反向连接设置。在大多数情况下,vncserver总处于监听状态,vnc client主动向服务器发出请求从而建立连接。然而在一些特殊的场合,需要让vnc客户机处于监听状态,vncsrever主动向客户机发出连接请求,此谓vnc的反向连接。
VNC Server身份验证基于密码,而不需要用户名。因此,每个用户必须启动一个独立的 VNC 服务器会话,并通过指定正确的端口号连接到 VNC 实例。如果多用户使用请参考相关文章进行配置。