ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Win7与银河麒麟V10双向远程桌面互连:VNC/RDP配置与排障

Win7与银河麒麟V10双向远程桌面互连:VNC/RDP配置与排障

简介:这份文档面向需要在异构系统间协同办公的IT运维人员与桌面支持工程师,聚焦Windows与银河麒麟操作系统互通远程桌面的完整实现路径。内容覆盖两个方向:Windows端借助桌面共享配置与VNC Viewer访问银河麒麟V10(含清除iptables规则或在安全中心放行VNC服务的两种方案),以及银河麒麟V10通过桌面查看器连接开启远程桌面服务的Windows主机,并涉及3389端口占用、VNC服务状态等基础排查要点。资源包为1个doc文档,约609KB,以图文混排的操作记录形式呈现,便于打印或随查随用。该资料已有21680人学习下载,适合需要在国产化替代进程中维护混合终端环境的技术人员,可作为一次性打通双平台远程访问的实操参照。

1. 版本先对齐:Win7 与银河麒麟 V10 互连,翻车点多半不在软件上

一台用了很多年的 Win7 工控机,旁边新配了一台银河麒麟 V10 桌面机,两边要互相看屏排故,这是产线、机房、实验室里特别常见的一种组合。多数人第一次上手,都是先找个 VNC 客户端装上,填完 IP 就点连接,结果不是一片黑屏,就是握手阶段直接断掉,然后开始在防火墙、密码、软件版本之间反复折腾。

问题往往不在软件装没装,而在于这两个方向的连接走的是两套完全不同的协议:Windows 连银河麒麟走 VNC,默认端口 5900;银河麒麟连 Windows 走 RDP,默认端口 3389。方向一搞混,就会在错误的一端改防火墙、改密码,越改越乱。这套环境适合手上同时有 Win7 和银河麒麟 V10、需要跨屏操作的人,也适合刚接手国产化替换机器、还没摸清桌面组件构成的值班运维。

2. 装前把清单列出来:两端各装什么、端口开哪个

动手之前先把两端的角色定清楚,比装完再回头查要省事得多。远程桌面这类东西,发起端只负责“看”,被连端才是真正要装服务、开端口、配权限的那一头。很多人装完发现连不上,回头一看是把服务装在了发起端,被连端什么都没配。这一章先把组件、端口、账号这三件事列成表,后面的安装步骤才有落点。

2.1 两份组件清单,先把“谁连谁”定下来

两个方向需要的组件完全是两套,不要指望装一个软件就能双向互通。Windows 连银河麒麟,被连端是麒麟,需要的是麒麟自带的桌面共享服务,发起端是 Windows,需要的是 VNC 客户端;反过来,被连端是 Windows,需要开启系统自带的远程桌面服务,发起端是麒麟,需要的是桌面查看器。

连接方向发起端软件被连端服务默认端口认证方式
Win7 → 银河麒麟 V10VNC Viewer桌面共享(vino)5900VNC 独立密码
银河麒麟 V10 → Win7远程桌面查看器Windows 远程桌面3389Windows 账号 + 密码

这张表建议抄下来贴在机器旁边。左边一行如果连不上,就去麒麟那头查桌面共享和 5900;右边一行连不上,就去 Win7 那头查远程桌面开关和 3389。查错方向这件事,我见过太多人在这上面耗掉一整个下午。

还有一个容易被忽略的点:这两个方向用的密码不是同一个。VNC 的密码是在麒麟的桌面共享里单独设的,跟麒麟的登录密码没关系;Windows 远程桌面的密码就是那个账户的开机密码。第一次配的时候把这两个密码记混,是最常见的低级错误。

提示:银河麒麟 V10 的桌面共享在多数桌面版镜像里是预装的,如果开始菜单里找不到,去麒麟商店搜“桌面共享”补装;远程桌面查看器同理。

2.2 先探端口再装软件,顺序别反过来

装软件之前先做一次连通性探测,能省掉后面一半的怀疑。两台机器在同一个网段,先互 ping,再探端口。ping 通只说明 IP 层是通的,不代表服务端口开着,这两件事必须分开验证。

在银河麒麟 V10 上探 Windows 的 3389:

# -v 输出详细过程,-z 只探测不发送数据,不建立完整连接 nc -vz 192.168.1.20 3389 # 如果提示 nc 命令不存在,先装一下 sudo apt install netcat-openbsd -y

-v让 nc 把解析和连接过程打出来,-z是扫描模式,只做 TCP 握手就断开,不会真正常驻连接。输出succeeded说明 3389 通;输出Connection refused说明 IP 通了但服务没起;输出timed out大概率是防火墙在丢包。这三种结果对应三个完全不同的排查方向,比一上来就怀疑软件版本有用得多。

在 Win7 上探麒麟的 5900,系统默认没开 telnet 客户端,需要先在“程序和功能 → 打开或关闭 Windows 功能”里勾上 Telnet 客户端:

# Win7 命令行里执行,探麒麟的 VNC 端口 telnet 192.168.1.30 5900

连上之后窗口会变成一片空白或者显示一串协议字符,这就算通了,按 Ctrl+] 再输 quit 退出。如果提示“无法打开到主机的连接”,那就是端口没开或者被拦了,回到麒麟那头查桌面共享有没有启动。

2.3 IP 定死,别用 DHCP 临时地址

远程桌面配好之后是要长期用的,被连端的 IP 必须固定。DHCP 分配出来的地址在重启、续租、换网口之后都可能变,今天能连明天连不上,这类问题排查起来最耗神,因为服务本身一点毛病没有。

银河麒麟 V10 的桌面环境里,网络设置在右上角的网络图标里,进有线连接的 IPv4 设置,方法选“手动”,填地址、掩码、网关、DNS。改完用命令确认一下:

# 列出所有网卡的 IPv4 地址,确认改完即时生效 ip -4 addr show # 看默认网关,确认路由没写错 ip route | grep default

ip -4 addr show只输出 IPv4 地址,比ifconfig干净,inet后面那一串就是当前地址。改完静态地址后如果连不上网关,多半是掩码或者网关填错了,先ping网关验证二层到三层的通路,再谈远程桌面。

Win7 这头同理,网络和共享中心 → 本地连接 → 属性 → IPv4 → 使用下面的 IP 地址。用ipconfig /all确认地址、掩码、网关、DNS 四项都对得上。两台机器必须在同一网段,跨网段的话中间还有路由和 ACL 的事,那就不是这篇能覆盖的范围了。

2.4 用哪个账号登录,决定你能不能连上

这一条踩过的人最多。麒麟的桌面共享是跟着当前图形会话跑的,也就是说,被连的那台麒麟必须有人已经登录到桌面,共享服务才真正对外提供画面。开机停在登录界面、或者切到了另一个用户,VNC 连上去就是黑的或者直接拒连。

所以配之前先确认:麒麟上要用哪个账号登录桌面,就用那个账号把桌面共享配一遍。换账号登录后,共享设置是跟着用户走的,另一个用户看不到你设的密码,也不会自动继承你的配置。

Windows 这头反过来,远程桌面服务是系统级的,登录界面就能连,但要求被连的账号必须设了密码。Win7 默认不允许空密码账户远程登录,这是系统策略,不是 bug。给账户设个密码就行,不用改策略去放开这个限制,放开空密码远程登录在任何场景下都不是个好主意。

注意:Win7 家庭普通版和家庭高级版不带远程桌面主机功能,只能作为发起端去连别人,不能被别人连。要作为被连端,得是专业版、旗舰版或企业版。

3. 银河麒麟 V10 这一侧:桌面共享与安全中心一起配

银河麒麟 V10 的安全基线比一般桌面发行版收得紧,防火墙和安全管理中心是两道独立的关口。桌面共享配好了、密码也设了,结果还是连不上,九成卡在这两道关口的其中一道上。这一章按“开共享 → 设密码 → 放行 → 验证监听”的顺序走一遍,每一步都给可执行的命令,图形界面和命令行两条路都留着。

3.1 打开桌面共享:勾选项和那个密码到底是给谁的

从开始菜单里找到“桌面共享”打开,界面上会看到几组选项。核心是两个:允许其他人查看您的桌面、允许其他人控制您的桌面。只想看不想让人操作,勾第一个;要远程操作鼠标键盘,两个都勾。只勾查看不勾控制,连上去之后鼠标点不动,很多人以为是权限问题,其实就是这个勾没打。

密码那一栏填的是 VNC 独立密码,跟麒麟的登录密码完全是两回事。Windows 那头连过来时输的就是这个密码,忘了就在这重新设一次,不影响系统登录。

命令行也能直接把配置窗口调出来,省得在菜单里翻:

# 打开桌面共享的配置窗口,等价于在开始菜单点“桌面共享” vino-preferences

vino-preferences是 GNOME 系桌面共享组件的配置入口,银河麒麟 V10 的桌面环境沿用了这套组件,所以命令能直接用。如果提示命令不存在,说明桌面共享组件没装,先在麒麟商店里搜“桌面共享”装上再来。

配置改完关掉窗口就生效,不需要重启服务。这一点跟 Windows 不太一样,别习惯性地去服务管理器里找重启按钮。

3.2 防火墙两条路:iptables 清空与安全中心放行

银河麒麟 V10 默认的防火墙策略比较严,桌面共享配好之后 5900 端口大概率还是不通的。输入里给了两条路,我一般推荐第二条,第一条留作应急。

第一条,直接清空规则:

# 清空 filter 表所有链的规则,立即生效 sudo iptables -F # 确认规则已经空了,输出应该只剩链的默认策略 sudo iptables -L -n

-F是 flush,把 INPUT、FORWARD、OUTPUT 三条链上的规则全部删掉,-L -n是以列表形式查看,-n表示不反解域名和端口名,输出更快更直观。这条命令的副作用要说清楚:它把整台机器的防火墙规则都清了,不只是放行 5900,其他靠规则挡着的端口也一并敞开。而且这是临时生效,重启后如果规则被持久化配置重新加载,又会回到原样。生产机器上直接这么干,风险得自己掂量。

第二条,在安全中心里精确放行:

第一步,开始菜单里找到“安全中心”打开。第二步,左侧选“网络保护”,右侧点“自定义配置”。第三步,在服务列表里找到 vncserver,把它勾上,保存。

这条路的好处是只放行 VNC 这一个服务,其他规则原样保留,重启也不丢。代价是图形界面里翻起来稍微绕一点,第一次找“网络保护”这个入口要找一会儿。

提示:两条路选一条就行,别同时上。清空规则之后又去安全中心勾一遍,后面排查时会分不清到底是哪条生效的。

3.3 让共享在重启后还在:gsettings 三个开关

图形界面里配完,有些机器重启之后共享会自己关掉,尤其是切换过登录用户、或者更新过桌面组件之后。根因是这些设置存在用户级的配置数据库里,某些情况下会被重置。用命令把三个关键开关钉死,比每次重启后手动点一遍可靠。

# 开启桌面共享总开关 gsettings set org.gnome.Vino enabled true # 关掉“每次连接都需要本机确认”的弹窗 gsettings set org.gnome.Vino prompt-enabled false # 关闭 VNC 会话加密,兼容老版本客户端 gsettings set org.gnome.Vino require-encryption false

第一条enabled true是总开关,关掉它前面配的密码和勾选项全部失效。第二条prompt-enabled false控制的是有人连进来时,被连的机器上是否弹窗让人点“允许”。开着这个弹窗,远程连接会一直挂在那儿等确认;如果被连的机器前面没人,连接就永远建立不起来。第三条是加密开关,这个要说清楚:VNC 的加密握手在不同客户端版本之间兼容性一般,老版本客户端连新版服务经常卡在握手阶段,现象就是“密码输完就没反应”。关掉加密能连上,但代价是密码和画面在网络上明文传输,只适合在可信的内网里用。跨网段、跨机房的场景,这一条不要关。

改完可以用gsettings get逐个回读确认,避免手滑打错键名:

# 回读三个开关的当前值,输出 true/false gsettings get org.gnome.Vino enabled gsettings get org.gnome.Vino require-encryption

3.4 确认 5900 真的在监听

配置全做完,最后一件事是确认服务真的在听。这一步别省,很多“配了但连不上”的问题,到这一步就会发现服务压根没起来。

# 列出所有 TCP 监听端口,过滤出 5900 ss -lntp | grep 5900

-l只看监听状态的套接字,-n不做名称解析直接显示端口号,-t限定 TCP,-p显示占用端口的进程名和 PID。正常输出类似LISTEN 0 5 0.0.0.0:5900 users:(("vino-server",pid=1234,fd=11))。

这里有三个细节值得看:0.0.0.0:5900表示监听在所有网卡上,如果显示的是127.0.0.1:5900,那只有本机能连,外部一律连不上,得回去检查共享配置;vino-server是进程名,对不上说明起的是别的服务;PID 可以用来确认进程有没有换过。

如果这一行什么都没有,先看进程在不在:

# 查桌面共享进程是否存活 ps -ef | grep vino | grep -v grep

进程不在,说明共享没开或者被关了,回到 3.1 重新配一遍。进程在但没监听,多半是当前没有图形会话,也就是没人登录桌面,回到 2.4 那条去看。

4. Windows 这一侧:VNC Viewer 安装与远程桌面开启

Windows 这头要干两件方向相反的事:装 VNC Viewer 去连麒麟,以及开启自带的远程桌面让麒麟连过来。这两件事互不影响,可以分开做,但建议一次做完,省得来回切换机器。安装包里带的 VNC Viewer 直接用就行,注意安装路径别带中文和空格,某些版本的客户端在中文路径下会读不到配置文件。

4.1 VNC Viewer 装哪个版本,装完先别急着连

Win7 是个老系统,新版本的客户端不一定还支持它。选安装包的时候看说明里有没有明确写着支持 Win7,没有写就先在虚拟机或者一台不重要的机器上试装一次,能正常起来再往生产机上装。这一步花十分钟,比装完打不开再满世界找旧版省事。

安装过程本身没什么可说的,一路下一步。有两处值得停一下:一是安装路径,改成C:\Tools\VNCViewer这种纯英文短路径;二是安装类型,选“只为我安装”,避免多用户环境下配置互相覆盖。

装完先别急着填 IP 连。先把客户端打开一次,确认能正常启动、界面能出来。有些机器缺运行库,客户端双击没反应或者报缺 DLL,这时候该补运行库补运行库,别带着问题上。

提示:安装包和这份配置清单放在同一个资源里,拿到后先照着第 2 章那张表把两端的组件对一遍,缺什么补什么,别急着点连接。

4.2 新建连接:地址栏到底填 IP 还是 IP:端口

打开 VNC Viewer,左上角 File → New connection,或者直接在地址栏敲。

  • VNC Server 一栏填192.168.1.30:5900,冒号后面是端口。端口是默认的 5900 时可以省略,但我建议写上,因为一旦以后改过端口,不写就会连到错误的地方,报的错还特别含糊。
  • Name 一栏随便起个能认出来的名字,比如“麒麟V10-产线机”。
  • 点 OK 保存,之后在客户端首页双击这个条目就能连。

第一次连接会弹密码框,输的是 3.1 里在桌面共享中设的那个 VNC 密码,不是麒麟的登录密码。勾上“Remember password”,下次就不用再输。这个密码是存在本机的,换一台 Windows 机器还得再输一遍。

如果连上去之后鼠标能移动但点不动任何东西,回去看 3.1,是“允许控制”那个勾没打。如果画面出来了但是花的、颜色不对,那是色深协商的问题,在连接的 Properties 里把颜色级别从 Full 降到 Medium 试试。

4.3 Win7 开启远程桌面:三步加一个账号前提

这一步是让麒麟能连过来。在 Win7 上右键“计算机”→ 属性 → 左侧“远程设置”,弹出的窗口里选“允许运行任意版本远程桌面的计算机连接”。选完点应用,系统会自动在防火墙里放行 3389。

如果这台机器的防火墙被组策略或者安全软件改过,自动放行可能没生效,手动加一条规则更保险:

# 在管理员权限的命令行里执行,放行入站 TCP 3389 netsh advfirewall firewall add rule name="RDP-3389" dir=in action=allow protocol=TCP localport=3389

dir=in是入站方向,action=allow是放行,protocol=TCP localport=3389限定只对 TCP 3389 生效,其他端口不受影响。这条规则是持久化的,重启后还在。要删掉的话把add换成delete,规则名对上就行。

账号这个前提单独说:被远程登录的 Windows 账户必须有密码,且不能是空密码。另外如果这台机器加入了域,登录时用户名要带上域前缀,或者直接在远程桌面客户端里把域填上,这一点在 4.4 里会再说。

4.4 麒麟这头用远程桌面查看器连回去

银河麒麟 V10 这头的发起端是“远程桌面查看器”,多数镜像预装,没有就去麒麟商店搜着装上。打开之后新建连接,协议选 RDP,服务器填 Win7 的 IP,用户名和密码填 Windows 那个账户的,域留空(不在域环境里的话)。

命令行也能直接拉起来:

# 打开远程桌面查看器主界面 remmina # 也可以直接带地址启动,省去手填 remmina -c rdp://192.168.1.20

-c后面跟的是连接串,rdp://前缀指定协议,后面接 IP。这种方式适合把常用连接做成桌面快捷方式,值班的时候双击就进,不用每次翻菜单。

连接建立后如果提示证书或者身份验证相关的警告,内网环境下点继续就行。如果卡在“配置远程桌面会话”不动,多半是 Win7 那头的网络级身份验证在拦,处理办法在下一章 5.5 里。

5. 避坑与排查:连不上时按这个顺序看

远程桌面的报错信息普遍很含糊,“连接失败”“认证失败”这几个字背后可能是五六个完全不同的原因。下面这五条是我这几年撞得最多的,按现象、原因、解决三段写,遇到问题按顺序对号入座,比漫无目的地试要快得多。

5.1 现象:能连上但一片黑,只有鼠标能动

原因:最常见的是被连的麒麟机器上没有活动的图形会话。桌面共享是跟着当前登录用户跑的,开机停在登录界面、或者锁屏了、或者切到了另一个用户,服务虽然在监听,但抓不到画面,传过来就是黑的。第二种可能是显示服务器类型的问题,某些桌面组件在非 Xorg 会话下抓屏会失败。

解决:先在麒麟那台机器上确认已经登录到桌面,没登录就登进去。然后检查锁屏设置,把自动锁屏关掉或者把时间调长,避免连着连着被锁。如果登录了还是黑屏,在登录界面或者显示设置里把会话类型切成 Xorg 再试一次。这一条我踩过两次,两次都是因为那台机器重启后停在登录界面没人管。

5.2 现象:密码明明是对的,却提示认证失败

原因:三个方向。一是 VNC 密码有长度限制,设太长的时候只有前若干位生效,你输的是完整密码,服务端比对的是截断后的;二是加密方式不匹配,客户端和服务端的加密握手对不上,报出来的错却是认证失败;三是连错了对象,同网段里还有另一台开了 VNC 的机器,IP 填串了。

解决:先把密码改成短一点的纯数字或字母组合,重新设一遍再连。还不行就把 3.3 里那条require-encryption false执行一遍,关掉加密再试,能连上就说明是握手兼容性问题。最后核对 IP,在麒麟上用ip -4 addr show把地址打出来,跟客户端里填的逐位对一遍。别笑,IP 填串这件事我见过不止一次。

5.3 现象:端口探得通,一连就断,日志里啥也没有

原因:端口通只说明 TCP 握手能完成,不代表应用层放行。麒麟的安全管理组件和防火墙是两套东西,iptables 放行了,安全管理中心里 vncserver 没勾上,连接照样会被拦在应用层。另一种情况是 iptables 只放行了新连接,没放行已建立连接的后续包。

解决:先去安全中心 → 网络保护 → 自定义配置,确认 vncserver 是勾上的。然后看系统日志:

# 实时跟安全相关的日志,另开一个窗口去连,观察有没有拒绝记录 sudo journalctl -f -u vino-server # 或者查内核和防火墙的丢包记录 sudo dmesg | tail -50

journalctl -f是实时跟随,连的时候盯着这个窗口,有拒绝记录会立刻打出来。dmesg看的是内核环形缓冲,防火墙丢包、连接跟踪表满这类问题会在这里留痕。两条都看一遍,基本能定位到是哪一层拦的。

5.4 现象:重启之后共享自己关了,又得重新配一遍

原因:桌面共享的这些开关存在用户级的配置数据库里,切换用户、组件更新、异常关机都可能让配置回退。图形界面里点的那几下没有持久化保证。

解决:把 3.3 那三条gsettings set写成脚本,放到登录自启里。做法是在用户目录下建一个可执行脚本,内容就是那三条命令,然后在桌面环境的“启动应用程序”里把这个脚本加进去。这样每次登录桌面,共享配置都会被重新钉一遍,不用担心它自己跑掉。这个做法不优雅,但很管用,我到现在还在用。

5.5 现象:麒麟连 Windows 提示无法连接远程桌面或凭据错误

原因:四种可能。一是 Win7 是家庭版,本身不支持作为远程桌面主机;二是账户没设密码;三是网络级身份验证(NLA)在拦,客户端不支持或者协商失败;四是用户名格式不对,本地账户要写机器名\用户名,域账户要写域\用户名。

解决:先确认系统版本,右键计算机看属性里的版本信息,家庭版直接换机器,没有别的办法。再确认账户有密码。用户名格式在远程桌面查看器的连接设置里改,本地账户试一下WIN7PC\user这种写法。如果还是不行的,在 Win7 上把 NLA 关掉:

# 修改注册表关闭网络级身份验证,改完需要重启生效 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f

/v UserAuthentication指定要改的键值名,/t REG_DWORD声明类型是双字节整数,/d 0是关掉,/f表示已存在也强制覆盖不提示。关掉 NLA 会降低一层防护,只在可信内网里做,做完记得重启,不重启不生效。

6. 装完怎么验证:三条命令加一次重启复验

配完不等于能用,能用不等于重启后还能用。我一般按下面这张表走一遍,五个检查项,全过了才算这套环境交付。

检查项执行位置命令或操作期望结果
服务在监听银河麒麟 V10ss -lntp | grep 5900显示 vino-server 监听 0.0.0.0:5900
端口可达Win7telnet 192.168.1.30 5900窗口变空白或出现协议字符
正向能连Win7VNC Viewer 双击连接出现麒麟桌面,鼠标可操作
反向能连银河麒麟 V10远程桌面查看器连 3389出现 Win7 桌面,键盘可操作
重启后仍可用两端各自重启一次再连五项全部重过一遍

前三项是静态检查,后两项是动态验证,缺一不可。特别是最后一项,别嫌麻烦。

重启复验这一步,我建议做成固定动作。先重启麒麟那台,等它起来、确认停在桌面登录界面并且已经登录进去,再从 Win7 连一次;然后重启 Win7,从麒麟连一次。这两次重启各花两分钟,能提前发现 90% 的“当时能用、过两天就废”的问题。前面 5.4 那条共享自己关掉的情况,就是靠这一步暴露出来的。

顺手把关键状态存一份,下次出问题好对比:

# 把当前的监听状态和地址存成文件,出问题时拿出来比对 ss -lntp | grep 5900 > ~/vnc-state.txt ip -4 addr show >> ~/vnc-state.txt

>>是追加写,两条命令的结果存在同一个文件里。以后哪次连不上了,把这个文件和当前状态一比,端口变了、地址变了、进程名变了,一眼就能看出来,不用从零开始查。

说个我自己的教训。早几年配这类环境,我图省事,配完当场连一次通了就收工,从来不重启。结果有一批机器交付后第二天集体连不上,跑过去一看,全是重启后桌面共享没起来,又赶上现场没人能进桌面,愣是耗了大半天。从那以后我每次配完这套东西,都强制自己走一遍重启复验,两个方向各连一次,再把状态存一份。麻烦是麻烦了点,但比事后跑去现场救火便宜太多。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进