ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows原生工具远程连接Ubuntu桌面:RDP与SSH配置实战

Windows原生工具远程连接Ubuntu桌面:RDP与SSH配置实战 1. 两条原生通道RDP和SSH先摸清它们的分工1.1 大多数人的认知盲区Windows的远程桌面连接不只是能连Windows先回答最核心的疑问Windows自带工具到底能不能连接Ubuntu桌面版答案不仅能而且不止一种方式。很多人听到远程桌面就以为那是微软私有的东西只能从一台Windows连到另一台Windows。实际上微软的远程桌面协议RDP是个开放的协议Linux这边早就有了对应的服务端实现——xrdp。你在Windows上打开系统自带的mstsc.exe输入Ubuntu主机的IP地址只要对方装好了xrdp并放行了3389端口就能看到Ubuntu的完整图形桌面。全程不需要下载任何第三方远程控制客户端不需要注册账号不需要翻找便携版绿色版。另一个被忽略的通道是SSH。Windows 10 1809版本之后系统默认带了一个OpenSSH客户端。打开PowerShell输入ssh userubuntu_ip就能直接进入Ubuntu的命令行。虽然它本身不带图形界面但在远程管理、排障、重启服务这些场景下SSH是最可靠的生命线。我习惯把这两条通道分开看待SSH是后勤通道RDP是主战场。真正去操作桌面时用RDP遇到桌面卡死、需要改服务配置时马上切到SSH去处理。1.2 两条通道的适用场景差异比你想象的大新手常犯的一个错误是把两者混为一谈以为能进命令行就一定能弹出一个GUI窗口。其实不是。RDP和SSH走了完全不同的路线对比项RDP远程桌面连接SSH安全外壳界面完整的图形桌面纯命令行带宽占用较高依赖流畅的局域网极低甚至能跑在极慢的链路上Ubuntu端服务xrdp监听3389openssh-server监听22Windows端工具mstsc.exessh.exeOpenSSH适用场景日常操作桌面、办公、软件配置管理服务、排障、批量执行命令文件传输通过磁盘重定向scp、sftp多显示器支持基本支持不涉及从这张表能看出结论如果你只是想在Windows上远程操作Ubuntu的图形界面RDP是首选如果你想用命令行快速检查系统状态、修改配置、重启服务SSH才是更高效的选择。两者不是替代关系而是互补关系。我自己的习惯是先在SSH里确认目标服务正常、端口可达再打开RDP去连桌面。这个顺序能省掉很多无谓的等待。1.3 一个被误解的事实Windows自带的是客户端Ubuntu端仍需装服务需要特别强调一点Windows自带工具不等于两头都不需要装额外东西。Windows自带的是客户端Ubuntu端必须安装并启动对应的服务端程序。这也是很多人实操失败的最常见原因——他们以为系统自带的远程桌面连接能直接扫描到局域网里的Ubuntu机器就像手机投屏一样免配置结果输入IP就被拒绝。实际流程是在Ubuntu上安装xrdpRDP服务端或openssh-serverSSH服务端启动服务并确认端口监听放行防火墙回到Windows用mstsc或ssh去连接。理解了这一点后面所有步骤就都有逻辑了。接下来我直接把Ubuntu端的配置过程完整过一遍包括几个容易踩的深坑。2. Ubuntu端配置让xrdp把GNOME桌面接出来2.1 安装xrdp本身不难难的是让它能与桌面会话共存先给出一套最基础的安装命令适用Ubuntu 22.04和24.04sudo apt update sudo apt install -y xrdp sudo systemctl enable --now xrdp装完后看一眼状态sudo systemctl status xrdp正常情况下会显示active (running)。再用端口检查命令确认3389在监听ss -tlnp | grep 3389如果看到类似LISTEN 0 5 *:3389 *:*的输出说明服务端已经就绪。到这一步理论上Windows端就能通过mstsc连上来了——但仅仅是理论上。因为我第一次照这个流程操作时连上去之后桌面是黑的只有鼠标可以移动后来才知道是GNOME的Wayland会话在捣乱。这个坑后面专门开一章讲这里先把基础配置做完。2.2 防火墙这一步决定你是能连上还是超时Ubuntu Desktop默认没有开启ufw防火墙但如果你的系统装了ufw或者出于安全考虑手动开启了就需要放行3389端口sudo ufw allow 3389/tcp sudo ufw reload这里有一个安全建议如果Ubuntu主机的IP是固定的最好只允许来自内网网段或特定Windows机器的IP访问而不是对所有人开放。例如sudo ufw allow from 192.168.1.0/24 to any port 3389 proto tcp这样既能让局域网内的Windows连上来又能避免公网扫描器随便探测到3389端口。另外一个隐藏场景是虚拟机。如果你的Ubuntu是装在VMware或VirtualBox里的Windows主机经常连不上原因多半出在虚拟机的网络模式。NAT模式下虚拟机有独立IP但宿主机访问它需要配置端口转发桥接模式下虚拟机和宿主机直接在同一个局域网里Windows直接访问Ubuntu的IP即可。我就是从NAT改成桥接模式后mstsc一下子就连通了。虚拟机用户如果发现ping不通或端口通不过优先检查网络模式。2.3 给xrdp指定一个轻量桌面其实是最省心的做法关于用哪种桌面环境网上教程分成两派。一派坚持直接用Ubuntu自带的GNOME另一派建议装Xfce。我的实测结论是如果你的Ubuntu是20.04或更早版本GNOME配xrdp基本能用如果是22.04之后强烈建议装Xfce给xrdp专用。理由很简单xrdp本身基于X11协议而新版Ubuntu的GNOME默认跑在Wayland协议上两者有兼容性问题。与其折腾协议切换不如给xrdp配一个轻量、稳定的X11桌面环境。装完Xfce后xrdp远程登录进去看到的是Xfce桌面而不是你本地正在用的GNOME。如果你不介意外观这个方案最不容易出幺蛾子。安装Xfce并配置xrdp使用的命令如下sudo apt install -y xfce4 xfce4-goodies然后备份并修改xrdp的启动脚本sudo cp /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.bak sudo systemctl stop xrdp编辑/etc/xrdp/startwm.sh把文件末尾的exit 0之前注释掉原本的Xsession调用改成startxfce4一个可以直接执行的写法是sudo bash -c sed -i /^test /c\\startxfce4 /etc/xrdp/startwm.sh但我更推荐用编辑器手动改毕竟每个人的文件内容可能有细微差别。改完重启xrdpsudo systemctl restart xrdp之后再从Windows连接进入的就是Xfce桌面稳定性一下子好很多。2.4 用户权限与登录界面的隐藏要求xrdp连接时使用的是Ubuntu系统里的真实账号所以必须确保该用户设置了密码。如果你给Ubuntu用户设置过空密码或强制免密登录xrdp在读取用户会话时很容易失败现象是连接一打开就闪退甚至反复要求输入密码。另外如果当前Ubuntu机器上已经有一个本地用户登录了GNOME桌面比如你正坐在那台电脑前再通过xrdp连接同一个账号有时会因为GNOME单会话限制而出现黑屏或登录冲突。这种场景下要么先注销本地桌面要么在xrdp配置里另起一个会话。具体处理办法我会在第4章展开因为这是最典型的坑之一。3. Windows端连接实测从打开mstsc到真正看到Ubuntu桌面3.1 远程桌面连接的正确打开方式在Windows上按Win R输入mstsc回车就能打开远程桌面连接窗口。也可以直接在开始菜单搜索远程桌面连接。这个程序从Windows 7时代就在了界面这些年几乎没变过。在计算机一栏输入Ubuntu的IP地址比如192.168.1.100点连接。第一次连接时Windows会提示无法验证此远程计算机的身份这是因为xrdp默认使用自签名证书Windows端不信任它。直接点是即可这是正常现象不是安全隐患上的问题。随后会弹出登录窗口输入Ubuntu用户名和密码。注意这里的用户名是你在Ubuntu上的登录名比如ubuntu、zhangsan之类的不是Windows的用户名也不是邮箱。如果勾选允许我保存凭据下次连接就不用再输密码。如果你在Ubuntu端配置的是Xfce桌面那么登录后看到的会是一个干净简洁的Xfce桌面环境顶部有面板左下角是应用程序菜单。到这一步最基本的远程桌面已经通了。3.2 连接前先做网络预检别让mstsc在那儿干等很多用户说我点了连接然后转圈半天没反应这时候问题往往不在远程桌面本身而在网络。我建议在Windows端做两次检查每次都能快速定位问题。第一步ping Ubuntu的IPping 192.168.1.100能ping通说明网络链路通ping不通就要检查IP是否正确、Ubuntu是否开机、虚拟机网络模式是否桥接、两台机器是否在同一网段。第二步测试3389端口是否可达Test-NetConnection 192.168.1.100 -Port 3389这个命令是PowerShell自带的会返回端口是否打开。如果显示TcpTestSucceeded : True说明端口通了可以直接开mstsc如果端口不通即使ping通了也没用。我整理了一张常用的排查表按照这张表挨个查基本能解决九成问题现象可能原因检查动作ping不通IP写错、网络断开、虚拟机NAT模式ip addr确认Ubuntu IP检查网线/虚拟机网络设置ping通但3389不通Ubuntu防火墙拦截xrdp未运行sudo ufw status检查systemctl status xrdp检查服务3389通但连接被拒绝xrdp配置异常或端口被占用ss -tlnp | grep 3389看监听地址检查是否有其他程序占用连接成功但黑屏Wayland会话与xrdp冲突检查$XDG_SESSION_TYPE切换Xorg或安装Xfce连接后立刻闪退本地桌面会话冲突密钥环问题注销本地桌面安装dbus-x113.3 别忘了设置本地资源把Windows磁盘和剪贴板带进Ubuntu远程桌面不只是看桌面还经常要传文件、复制粘贴文本。mstsc里自带这些功能只是默认没全打开。在连接之前点开选项展开更多设置切到本地资源标签页勾选剪贴板这样Windows和Ubuntu之间可以共享剪贴板在详细信息里勾选驱动器可以把Windows的盘符挂载到远程会话中登录Ubuntu后在文件管理器左侧的设备列表里就能看到类似C on windows_host这样的挂载点直接访问Windows磁盘。我个人非常依赖这两个功能。比如给Ubuntu装软件需要拷贝安装包直接从Windows磁盘拖过去就行在Windows上复制一段日志切到Ubuntu终端里CtrlV直接粘贴。这类体验比第三方远程工具还要顺手。需要提醒的是如果连接的Ubuntu不是你自己完全掌控的机器而是公共服务器或别人的电脑不要勾选驱动器否则等于把你整个Windows磁盘目录暴露给了远程系统。4. 避坑实录Wayland黑屏、闪退与登录死循环4.1 现象归因为什么连接后只有桌面背景或者干脆黑屏这是遇到频率最高的问题xrdp装好了端口通了Windows这边也成功认证了但进入会话后只有一片黑或者一片纯色背景鼠标可以动就是看不到图标和任务栏。根因在Ubuntu 22.04/24.04默认使用GNOME的Wayland显示协议而xrdp只认识X11协议。打个比方你给一个只能用GMS短信的人发了一条iMessage对方虽然显示已送达但内容根本解析不出来。黑屏就是这种协议不通的具象化表现。验证当前会话是不是Wayland在Ubuntu的终端里执行echo $XDG_SESSION_TYPE输出如果是wayland说明就是这里的问题。如果是xorg或x11那黑屏另有原因优先检查用户会话冲突见4.4。4.2 切换到Xorg不动桌面环境的最直接解法如果你坚持远程登录后看到的还是GNOME桌面不需要装Xfce那可以强制Ubuntu的登录管理器使用Xorg会话。在Ubuntu 22.04的GDM3环境下修改配置文件sudo bash -c echo -e [daemon]\nWaylandEnablefalse /etc/gdm3/custom.conf随后重启GDM服务sudo systemctl restart gdm3注意这个命令会重启图形登录界面屏幕会闪断如果Ubuuntu本地正有人在使用会被强制退出。重启之后系统默认会话就变成Xorg了xrdp远程登录时大概率能够正常显示GNOME桌面。这个方法有个代价Ubuntu本地用户以后也会使用Xorg而不是Wayland如果你很在意Wayland的流畅度和新特性就要权衡一下。所以更灵活的做法是保留系统默认使用Wayland但让xrdp专用Xfce桌面互不干扰。4.3 用Xfce替代GNOME把兼容性问题一次性甩开我在2.3节已经给过安装命令这里补充一下我为什么最终选择这个方案。我的Ubuntu是一台专门用来做开发测试的机器本地几乎不坐人99%的时间都是通过Windows远程操作。对我来说远程看到的桌面是GNOME还是Xfce其实没有太大差别但稳定性差别很大。Xfce是轻量级X11桌面资源占用低和xrdp配合起来几乎不出问题。在4核8G的老机器上Xfce远程会话的响应速度明显比GNOME流畅。如果你决定用Xfce关键是修改/etc/xrdp/startwm.sh确保xrdp启动会话时执行的是Xfce而不是默认的GNOME。改完之后可以手动重启xrdp并确认sudo systemctl restart xrdp less /etc/xrdp/startwm.sh看一眼文件末尾如果有startxfce4这一行并且原本的Xsession那几行被注释掉了就对了。如果远程连接进入后还是黑屏可以看日志排查tail -f /var/log/xrdp-sesman.log这个命令能实时输出xrdp会话管理器的日志黑屏原因的线索基本都在里面。4.4 登录闪退和一直在登录的深层原因还有一类问题不是黑屏而是登录转圈几下就退出回到登录界面或者卡在“连接历史会话”的加载中。这类问题通常有以下几个原因。原因一本地桌面会话未注销。GNOME在设计上不允许同一个用户同时存在多个活跃会话如果你在Ubuntu本地的图形界面还开着通过xrdp再登同一个用户可能因为配置锁冲突被踢出。解决办法先注销Ubuntu本地桌面再用xrdp连接或者给xrdp连接指定一个不同的用户账号。原因二dbus-launch环境变量缺失。有些精简安装的Ubuntu没有安装dbus-x11导致远程会话初始化时无法正确启动D-Bus总线。补装一下sudo apt install -y dbus-x11装完记得重启xrdp。原因三密钥环解锁弹窗看不到。首次登录GNOME/Xfce时系统会弹出“解锁密钥环”的提示在远程会话里这个窗口可能渲染不出来导致会话卡在某个步骤。可以在窗口管理器设置里清空旧密钥环或者在登录后手动删除旧的密钥环文件rm ~/.local/share/keyrings/login.keyring删除后下次登录会提示重新创建。这只是我实践中的一个应急方法如果你不太依赖钥匙串功能可以一试。原因四xrdp残留进程导致端口冲突或锁死。当你多次登入登出可能残留一些僵尸进程占着端口。我通常在SSH里执行pkill -f xrdp sudo systemctl restart xrdp这样能清掉所有残留会话重新得到一个干净的远程桌面环境。4.5 连接卡死时的自救SSH通道清进程有时候RDP会话已经卡到鼠标都动不了系统看起来像死机但网络其实还活着。这时候千万别重启Ubuntu电源否则可能丢数据。正确做法是让Windows这边的SSH通道进场。在Windows PowerShell里ssh username192.168.1.100登录后执行pkill -f xrdp sudo systemctl restart xrdp再回到Windows重新打开mstsc连接。这一套操作我做过很多次每次都能把看似死机的远程会话救回来。这也是我一直强调SSH通道比第三方远程工具更好用的原因之一——当图形通道挂了你还有第二条路能进系统。5. SSH通道Windows自带的命令行工具关键时刻能救命5.1 确认Windows的SSH客户端可用Windows 10 1809版本之后OpenSSH客户端默认被集成进系统。打开PowerShell直接敲ssh -V能看到类似OpenSSH_9.x的输出说明工具已经就绪。如果提示无法识别去设置里的可选功能中手动添加OpenSSH客户端即可安装后重启终端。SSH连接Ubuntu的前提是Ubuntu装了openssh-serversudo apt install -y openssh-server sudo systemctl enable --now ssh注意服务名可能是ssh也可能是sshd用systemctl status ssh查看即可。5.2 用SSH远程控制Ubuntu的图形会话很多人以为SSH只能敲命令行其实它也能影响到桌面进程。比如你想通过SSH在Ubuntu的桌面上弹出一个图形编辑器可以在SSH里先设置显示环境变量export DISPLAY:0 export XAUTHORITY$(ls ~/.Xauthority 2/dev/null) gedit 不过这种方法受限于会话权限我实际用的最多的还是远程管理命令。比如在Windows这边直接通过SSH查看xrdp状态ssh ubuntu192.168.1.100 systemctl status xrdp; ss -tlnp | grep 3389当vUbuntu端防火墙或网络配置出了问题导致mstsc连不上时用这条命令能快速判断是服务挂了还是端口被过滤。SSH不需要图形环境只要22端口通就能干活。5.3 用密钥登录替代密码连接更快也更安全如果你的Windows经常需要SSH连Ubuntu强烈建议配置密钥登录比每次输入密码方便得多也更安全。先在Windows生成密钥对ssh-keygen -t ed25519一路回车会在用户目录下生成C:\Users\用户名\.ssh\id_ed25519.pub和id_ed25519两个文件。然后把公钥传到Ubuntutype $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ubuntu192.168.1.100 mkdir -p ~/.ssh cat ~/.ssh/authorized_keys传输过程中会要求输入一次Ubuntu密码。之后ssh ubuntu192.168.1.100就能直接免密进入。需要注意Ubuntu端~/.ssh目录和authorized_keys文件的权限必须正确chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys权限过宽的话sshd会拒绝使用密钥。5.4 一条命令端到端排障的思路最后分享一个我惯用的排障命令组合。假设Ubuntu IP是192.168.1.100我会在Windows PowerShell里这样做Test-NetConnection 192.168.1.100 -Port 3389 if ($LASTEXITCODE -eq 0) { mstsc /v:192.168.1.100 } else { ssh ubuntu192.168.1.100 sudo systemctl status xrdp }当然这只是一个雏形。实际中我更常用的思路是先通过ping确认主机存活再用Test-NetConnection确认端口如果端口不通就立刻用SSH登进去看服务状态和防火墙规则。整个过程不超过一分钟比反复点远程桌面按钮干等高效得多。6. 收尾几个让我少折腾一晚上的经验和建议文章最后不谈什么系统性总结说几个我自己的操作习惯不一定适合所有人但至少能让你少走一些我走过的弯路。第一个习惯第一次配置别贪快按顺序走。先是Ubuntu端装xrdp确认ss -tlnp能看到3389再谈其他然后放行防火墙再用Windows的PowerShell测端口最后才打开mstsc连接。每一步都验证过后再进下一步出问题能立刻定位到具体环节不会像无头苍蝇一样乱试。第二个习惯如果远程会话不稳优先怀疑多个会话问题。我在给一台多用户Ubuntu服务器配xrdp时曾遇到A用户连接正常、B用户连接黑屏的情况。排查了很久最后发现是B用户本地有残留GNOME会话。后来我给xrdp单独建了一个远程专用账号所有远程连接都走这个账号本地用户照常物理使用电脑两者互不干扰。虽然界面环境是独立的但胜在清爽稳定。第三个习惯做好最基本的端口管控。我把ufw只放行内网网段的3389和22端口同时把Windows侧防火墙也做了入站限制。这样即便IP暴露在公网扫描器也无法直接探测到服务。不要因为贪图省事就把远程桌面端口裸奔在网络上。最后一个实用小技巧在Windows桌面放一个快捷方式目标填mstsc /v:192.168.1.100以后远程连接只需要双击一下省得每次去找程序、输IP。如果常用连接多台机器还可以在RDP文件里保存不同分辨率、不同用户名的连接配置右键编辑就能改参数。这种原生方案搭配一点批处理脚本用起来比很多第三方工具都顺手。Windows自带工具连接Ubuntu桌面版这件事本质上就是一两行配置、一个端口的问题。只要理解了RDP和SSH的分工掌握了服务端和客户端的配合剩下的就是反复实践中积累的细节经验。希望这篇文章能帮你在配置的时候少踩几个坑早点用上干净又稳定的双机远程连接方案。
返回列表