搞Linux服务器这几年身边不少朋友让我推荐一套最省心的远程访问方案。试过各种组合之后我还是最常用 Ubuntu 18.04 配 MobaXterm 这套搭配。Ubuntu 18.04 虽然是上一代 LTS 版本但稳定性和兼容性真不是盖的特别是跑一些老项目或者特定环境的编译任务对比新版本反而少很多折腾MobaXterm 则是 Windows 下少见的“开箱即用”终端内置 SSH、SFTP、X11 转发这些功能不用像 PuTTY 那样还得额外装一套文件传输工具。这套组合特别适合刚接触 Linux 的开发者、实验室里维护工作站的在校学生以及需要远程调试嵌入式设备的硬件工程师。这篇文章我把从装机开始到远程访问的完整链路都捋一遍每一步都写下踩过的坑和验证过的做法照着做基本能一次跑通。1. 方案选型与整体思路拆解1.1 为什么是 Ubuntu 18.04 而不是新版本先聊聊版本选型这件事。很多人一上来就问“为什么不直接装 20.04 或 22.04”这个问题很好回答如果你的目标是“稳定跑起来、少踩坑”老牌 LTS 版本反而更可靠。18.04 于 2018 年发布官方支持到 2023 年但国内很多镜像源和企业内网仍然保留着完整的软件仓库更重要的是大量的工业软件、ROS 机器人开发套件、嵌入式交叉编译工具链当年就是针对 18.04 做的适配和测试。我实际遇到过某款激光雷达的 SDK 在新版本 Ubuntu 上编译直接报错但 18.04 上一条命令就能过。如果你只是学习 Linux 基础操作新版本当然也没问题但做开发、跑项目、维护旧系统18.04 是最稳妥的选择。还有一点是资源占用。18.04 的默认桌面环境是 GNOME 3.28内存占用比新版本低不少我手上一台只有 4GB 内存的老旧笔记本跑 18.04 桌面再开几个终端和浏览器依然流畅。相比之下22.04 的 GNOME 40 对显卡和内存的要求明显更高。远程访问的场景下服务器端资源越省越好因为很多计算资源要留给实际任务。1.2 为什么 Windows 侧选择 MobaXtermWindows 下能用的 SSH 客户端不少PuTTY、Xshell、Windows Terminal 自带 SSH。但 PuTTY 只解决“能连上”的问题文件传输还得搭配 WinSCP两台软件来回切换效率很低。Xshell 确实好用但个人版有各种限制。Windows Terminal 的 SSH 虽然原生但缺少会话管理、端口转发配置界面、SFTP 文件浏览这些“顺手”的功能。MobaXterm 把这些问题一次性解决了。它是一个集成的终端模拟器自带 SSH 客户端、SFTP 文件管理器、X11 图形转发、端口转发、宏录制、密码管理等功能。打开 MobaXterm 就能在左侧看到连接树右边是终端窗口下边还挂着 SFTP 的文件浏览器连上服务器之后可以直接拖拽文件这体验比任何组合方案都顺畅。它的 X11 转发功能也特别实用——远程跑一个有图形界面的程序比如 ROS 的 rviz、MATLAB可以直接弹出窗口显示在 Windows 桌面上不用装 VNC 这类重型方案。1.3 整体架构与数据流这套方案的整体架构很简单一台装有 Ubuntu 18.04 的机器可以是物理机、虚拟机或者云服务器开启 SSH 服务端一台 Windows 电脑安装 MobaXterm通过网络连接到 Ubuntu 的 SSH 端口默认 22。连接建立之后所有操作通过 SSH 协议加密传输包括命令输入、文件传输、图形界面数据转发。网络环境决定了你需要做哪些额外配置。如果两台机器在同一个局域网直接使用内网 IP 连接即可如果跨网络或者 Ubuntu 机器在防火墙后面就需要配置端口转发或者内网穿透。这篇文章的重点放在局域网内的直连场景这也是绝大多数入门用户的实际环境但会在后面补充公网访问的思路。2. Ubuntu 18.04 系统安装与基础配置2.1 制作启动盘与安装流程安装 Ubuntu 18.04 需要的材料一个至少 4GB 的 U 盘、Ubuntu 18.04 镜像文件、写盘工具。镜像建议从官方源或国内高校镜像站下载文件名类似“ubuntu-18.04.6-desktop-amd64.iso”。写盘工具推荐 Rufus轻量、速度快、兼容性好。Rufus 的使用其实非常直接插入 U 盘打开 Rufus设备选择 U 盘引导类型选择下载好的 ISO 镜像分区类型如果目标机器是 UEFI 启动就选 GPT传统 BIOS 就选 MBR。点击开始之后Rufus 会提示写入模式选择“以 ISO 镜像模式写入”即可。写入完成后 U 盘就是启动盘了。安装过程有几个需要留意的环节。首先是启动菜单开机时按 F2、F10、F12 或 Del 进入 BIOS 设置把 U 盘设为首选启动项。不同品牌的主板按键不一样建议安装前先查清楚。其次是安装类型如果整块硬盘都用来装 Ubuntu直接选“清除整个磁盘并安装 Ubuntu”如果想保留 Windows 双系统选“其他选项”手动分区这需要一定的分区知识新手建议先单系统。分区方案方面如果机器内存小于 8GB建议划分一个 swap 分区大小跟内存一致内存充足的话可以不建交换分区或者只建 2GB 用作休眠备用。注意如果安装过程中遇到“黑屏”或者光标闪烁不动多半是显卡驱动兼容性问题。可以在“安装 Ubuntu”界面按 E 进入 GRUB 编辑模式在linux开头的行尾加上nomodeset参数再按 F10 启动通常就能正常进入图形化安装界面。2.2 安装完成后的第一件事换软件源与系统更新Ubuntu 18.04 安装完成后默认的软件源是 Ubuntu 官方源在国内的下载速度很不稳定。第一件事就是把源切换到国内镜像站。操作方式是修改/etc/apt/sources.list文件打开终端执行sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list这里以阿里云镜像源为例其他镜像站的地址也差不多比如清华的mirrors.tuna.tsinghua.edu.cn。替换完成后执行更新sudo apt update sudo apt upgrade -yapt update 是刷新软件包索引apt upgrade 是升级所有可升级的软件包。首次升级的耗时取决于网络状况可能几分钟到几十分钟不等耐心等它跑完就行。建议再安装一些基础工具比如后续 SSH 调试可能会用到的 net-tools提供 ifconfig 命令、vim文本编辑器sudo apt install -y net-tools vim curl wget2.3 设置静态 IP 便于稳定连接DHCP 分配的 IP 有时候会变化这对远程访问来说是件麻烦事——你昨天用 192.168.1.100 连得好好的今天重启路由器它变成了 192.168.1.102MobaXterm 的连接配置就失效了。所以在配置 SSH 之前先把 IP 固定下来。Ubuntu 18.04 的网络配置和之前版本不一样它不是直接改/etc/network/interfaces而是通过 Netplan 来管理。配置文件在/etc/netplan/目录下通常是一个.yaml文件比如01-netcfg.yaml或50-cloud-init.yaml。先查看当前网卡名称和网络信息ip addr ip route记录下网卡名称通常是 enp3s0、ens33 之类的名称、当前 IP、网关地址和 DNS。然后修改 Netplan 配置文件sudo vim /etc/netplan/01-netcfg.yaml内容参考如下network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: no addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 114.114.114.114addresses是你想固定的 IP 地址/24是子网掩码的简写对应 255.255.255.0gateway4是路由器地址nameservers是 DNS 服务器我这里用了国内的公共 DNS。配置完成后应用sudo netplan apply再执行ip addr确认 IP 已经变成你设置的静态地址。如果网络连接丢失了在本地键盘上重新执行sudo netplan apply即可恢复。这里是远程访问的基础务必确认 IP 固定成功后再进行后续步骤。3. SSH 服务端安装与安全配置3.1 安装 openssh-serverUbuntu 18.04 默认是不安装 SSH 服务端的需要手动安装。终端执行sudo apt install -y openssh-server安装完成后服务通常会自动启动。检查服务状态sudo systemctl status ssh如果状态显示active (running)说明 SSH 服务正在运行。如果没有运行用下面命令启动并设置开机自启sudo systemctl start ssh sudo systemctl enable sshssh 服务监听的端口默认是 22。确认端口在监听sudo netstat -tlnp | grep 22看到类似tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN的输出说明一切正常。提示如果你用的是 Ubuntu 的云镜像或者安装了云初始化工具SSH 服务可能已经预装并运行了。但桌面版安装后还是建议手动确认一下不少用户在这上面栽过跟头——以为服务已经开了结果远程连半天连不上。3.2 SSH 服务的安全配置建议直接暴露在公网上的 SSH 服务每天会收到无数次暴力破解尝试。即使只在局域网使用我也建议把安全配置做好防患于未然。SSH 的配置文件在/etc/ssh/sshd_config修改前先备份sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo vim /etc/ssh/sshd_config有几个关键项建议修改# 禁止 root 用户远程登录这个很重要 PermitRootLogin no # 使用密钥登录这个在后面会配置 PubkeyAuthentication yes # 密码登录保留开启配置好密钥后再关闭 PasswordAuthentication yes # 修改 SSH 端口降低被扫描的概率 Port 2222修改端口后需要重启 SSH 服务sudo systemctl restart ssh之后连接时就需要指定新端口比如 MobaXterm 的端口栏填 2222。如果你不确定要不要改端口我建议先在日常使用的局域网环境维持默认 22 端口方便排查问题等熟悉了整个流程后再考虑加固。3.3 配置 SSH 密钥登录实现免密访问每次用密码登录虽然不麻烦但总归多了一步输入操作。SSH 密钥登录可以做到免密访问而且安全性更高。密钥对分为私钥和公钥私钥保存在 Windows 本地公钥放在 Ubuntu 服务器上。密钥生成有两种方式一种是在 Windows 用 MobaXterm 自带的工具生成另一种是在 Ubuntu 上生成再导入。我更推荐前者因为私钥直接生成在本地免去了传输私钥的风险。MobaXterm 生成密钥的方法打开 MobaXterm点击菜单栏的“Tools”→“MobaKeyGen”点击“Generate”按钮鼠标在空白区域晃动几下增加随机性然后点击“Save private key”保存私钥复制公钥内容。然后在 Ubuntu 服务器上把公钥添加到授权列表mkdir -p ~/.ssh chmod 700 ~/.ssh echo 你的公钥内容 ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys权限设置非常关键。~/.ssh目录权限是 700只有 owner 可读写执行authorized_keys文件权限是 600只有 owner 可读写。权限过松会导致 SSH 拒绝使用密钥文件。在 MobaXterm 会话中点击“Advanced SSH settings”勾选“Use private key”选择刚才保存的私钥文件再连接时就不需要输入密码了。如果之前密码登录还开着密钥认证会优先尝试失败后才回落到密码认证。4. MobaXterm 连接配置与核心功能实操4.1 新建会话与基础连接参数MobaXterm 主界面左上角点击“Session”弹出会话配置窗口。选择 SSH 协议右侧填写远程主机信息Remote hostUbuntu 的 IP 地址比如 192.168.1.100Specify usernameUbuntu 的用户名PortSSH 端口默认 22如果上面改了就用新端口如果配置了密钥在 “Advanced SSH settings” 里指定私钥文件填好之后点击 OK连接树里就多了一个会话。双击会话即可连接。第一次连接会弹出确认主机指纹的提示选择“Accept”接受即可。一个很实用的小技巧在会话名称上右键 → Edit session可以修改任何参数。我习惯给会话加上备注比如“Ubuntu 工作站编译服务器”时间和语义都一目了然。如果你管理的服务器比较多建议使用 MobaXterm 的文件夹分组功能把不同项目的服务器归类整理。4.2 终端操作与右键实用功能连接成功后进入终端界面本质上就是一个完整的终端模拟器支持复制粘贴、快捷键、多标签页。有几个操作细节值得注意复制粘贴默认情况下选中即复制右键即粘贴。这个行为习惯在 Windows 下非常顺手不需要按 CtrlC/CtrlV。如果行为和预期不符可以在 Settings → Terminal 里调整。多标签页双击终端窗口顶部空白处可以新建一个终端标签同时连接多台服务器时切换非常方便。每个标签页是独立的会话互不干扰。终端分屏点击工具栏的分屏按钮或者用快捷键 CtrlAlt数字键我常用的是 CtrlAlt1 表示 2 分屏CtrlAlt2 表示 3 分屏可以在一个窗口里同时查看多台服务器的输出。这个功能在做日志对比、同布操作多台机器时极为好用。另外终端背景颜色和字体大小也可以按个人偏好设置。我习惯把字体调大一点背景调成淡绿色长时间盯着不累眼。4.3 SFTP 文件管理实现拖拽传输MobaXterm 连接成功后左边会自动出现一个 SFTP 文件浏览器面板显示的是服务器上的文件系统。你可以直接在面板里浏览服务器目录、上传下载文件也可以通过拖拽的方式在 Windows 和 Ubuntu 之间传输文件——从 Windows 桌面拖一个文件到 SFTP 面板的目录里上传就开始了把服务器上的文件拖到 Windows 桌面下载就完成了。这个功能替代了 WinSCP 和 FileZilla 的角色。实际体验下来拖拽传输的效率和专用 FTP 客户端差不多而且文件不经过中转直接走 SSH 加密通道安全性更好。需要注意的权限问题SFTP 面板默认以当前登录用户的权限操作。如果你想修改系统目录比如/etc、/usr/local下的文件直接拖拽会提示权限不足。解决办法是使用sudo权限的账户或者在终端里先用sudo chown调整文件归属。我不太建议用 root 账户直接登录风险太大正确姿势是普通用户操作 sudo 提权。我在用 SFTP 面板时也遇到过一次比较沮丧的情况——往服务器传一个 5GB 的数据库备份文件传了几个小时后中途断开大小写文件名也发生过混乱。后来发现 MobaXterm 的传输是单线程的大文件建议在终端里用 rsync 或者 scp 命令来传能断点续传而且更快。小文件拖拽没问题大文件走命令行是血的教训。4.4 X11 转发运行远程图形界面程序这是 MobaXterm 相对其他 SSH 客户端最大的杀手锏。默认情况下MobaXterm 已经开启了 X11 转发功能你不需要做任何额外配置。在终端里直接运行一个带图形界面的程序试试gedit 你会发现编辑器界面直接在 Windows 桌面上弹出来了这就是 X11 转发在工作。原理是SSH 连接建立时服务器端把图形程序的显示请求转发到客户端由客户端执行本地渲染再通过网络把画面回传。MobaXterm 内置了一个 X server所以无需在 Windows 上另装 X 组件。我经常用这个功能远程启动一些 Linux 专用的图形工具比如# ROS 可视化 rviz # 远程启动 MATLAB matlab # 系统日志查看器 gnome-system-logX11 转发对网络带宽有一定要求局域网内使用非常流畅跨公网用会有明显的延迟感。如果需要长期使用图形界面程序建议改用 VNC 或 X2Go 方案。4.5 SSH 隧道和端口转发端口转发是另外一个非常好用的功能利用 MobaXterm 的隧道机制可以在不额外开放防火墙端口的情况下访问远程服务器上的一些 Web 服务。比如 Ubuntu 上跑了一个 Jupyter Notebook默认监听 8888 端口但该端口没有对公网开放。在 MobaXterm 中新建一个 SSH 隧道Tools → Network Port Forwarding类型选择 Local本地转发监听端口填 8888Windows 本地的目标地址填 127.0.0.1目标端口填 8888服务器上的保存之后在 Windows 浏览器打开http://127.0.0.1:8888流量会通过 SSH 隧道加密传输到服务器上看不到端口暴露安全性也更好。这个功能在调试 Web 应用、访问内部管理界面时非常实用省去在防火墙上单独开端口的麻烦。5. 网络配置排查与远程连接问题解决5.1 最常见的连接失败原因清单远程连接不上原因千奇百怪但绝大多数集中在下面几个点上。我整理了一个排查顺序按这个顺序检查通常能在几分钟内定位问题。排查点操作方法常见问题服务器 IP 是否可达在 Windows 上执行ping 192.168.1.100请求超时说明网络不通检查网线/Wi-Fi/路由器SSH 端口是否开放在 Windows 上执行telnet 192.168.1.100 22端口不通说明防火墙阻断了连接SSH 服务是否运行在服务器上执行sudo systemctl status ssh服务未启动或崩溃重启服务用户名密码是否正确确认登录用户名和密码注意用户是否存在、密码策略密钥权限是否正确检查 authorized_keys 权限权限过宽会拒绝连接telnet命令在 Windows 10/11 上默认可能未安装可以在“启用或关闭 Windows 功能”里开启 Telnet 客户端或者用 MobaXterm 自带的网络工具——打开 Tools → Network tools → Tcp port scan输入 IP 和端口扫描一下效果一样。5.2 局域网连不上三种典型场景还原场景一ping 不通 IP。这种情况绝大多数是网络配置问题。首先确认 Ubuntu 机器的网络有没有连上执行ip addr看网卡有没有获取 IP。如果用的是 Wi-Fi 连接SSH 服务默认监听所有接口通常不会有问题。还要看看 Ubuntu 的防火墙 UFW 是否开启了执行sudo ufw status如果返回active说明防火墙确实开启了。允许 SSH 端口通过sudo ufw allow 22/tcp sudo ufw allow 2222/tcp # 如果改了 ssh 端口这时候 Windows 再 ping 应该就通了。场景二ping 得通但 SSH 连接超时。ping 通说明网络层没问题连接超时大概率是 SSH 服务没起来或者被防火墙拦截。在 Ubuntu 本地执行sudo netstat -tlnp | grep ssh看端口是否监听。如果监听在 127.0.0.1 上而不是 0.0.0.0说明 sshd 只监听了本机回环地址检查/etc/ssh/sshd_config里有没有ListenAddress配置项注释掉或改为0.0.0.0即可。场景三能连上但登录后很快断开。这种问题通常是 PAM 模块或者 SSH 会话超时导致的。查看 MobaXterm 的日志输出如果提示Connection reset by peer先检查服务器的资源情况执行df -h看磁盘是否满了free -m看内存是否耗尽。系统资源耗尽会导致 SSH 进程崩溃。如果是长时间空闲被踢出在sshd_config里设置ClientAliveInterval 60 ClientAliveCountMax 3这样每 60 秒发送一次心跳包维持连接不被中断。5.3 跨网段与公网访问的思路局域网是基本功但很多时候需要在不同网络下访问服务器比如从办公室远程家里面的机器。这里有几种思路按成本和安全性排序首选方案是使用 SSH 密钥登录然后通过路由器端口映射把 Ubuntu 的 22 端口映射到公网 IP。这样做的风险很大公网扫描器对 22 端口的暴力尝试非常频繁强烈建议配合密钥认证使用关闭密码登录或者干脆把端口改成不常用的高位端口。进阶方案是部署 frp 或者 ZeroTier 这类内网穿透工具把 SSH 服务暴露到一个中转节点上或者直接组一个虚拟局域网。这个方案的好处是无需在路由器上开放端口安全性提升明显但需要一台有公网 IP 的中转服务器云主机即可或者两端都安装 ZeroTier 客户端。我在远程管理家里的服务器时用的是 ZeroTier 组网方案。两台机器分别安装客户端加入同一个虚拟网络分配虚拟 IP然后 SSH 就直接连虚拟 IP。这个方法绕开了端口映射和防火墙的麻烦而且加密是端到端的比裸暴露公网安全得多。不过这篇文章不展开讲组网细节等有机会单独写一篇。5.4 遇到连接卡顿如何定位连接上之后操作卡顿首先要判断是网络问题还是服务器负载问题。在 MobaXterm 终端里执行top或htop看 CPU 和内存使用率。如果服务器负载很低但操作依然卡多半是网络传输延迟或 MTU 设置问题。Wi-Fi 环境下 SSH 操作延迟高的一个隐藏原因是无线信号质量差。可以检查一下信号强度或者干脆用网线连接实测下来延迟能降低一大截。另外MobaXterm 可以开启 SSH 压缩来降低传输数据量在会话设置的“Advanced SSH settings”里勾选“Compression”对慢网络环境有改善。6. 日常使用技巧与维护备忘6.1 MobaXterm 的宏与命令面板重复操作太多时用 MobaXterm 的宏功能可以批量自动化。在 Tools → Macros → Record a macro 中录制操作序列。比如我每次连接服务器后都要执行ssh-add、sudo systemctl status ssh、df -h这三条命令把记录保存成一个可重复执行的宏一键运行省去重复输入。另一个很实用的是“Customized commands”功能把常用的远端命令做成按钮放在顶部工具栏。在 Settings → Customized commands 里添加命令比如apt update apt upgrade -y、reboot这类操作点了就直接执行避免了每次手输的麻烦和可能出现的输错风险。6.2 服务器侧的 SSH 维护建议SSH 服务用了几年之后偶尔会遇到连接卡在登录阶段的怪问题。我习惯定期检查和维护服务器侧的 SSH 配置定期备份 sshd_config 和 authorized_keys 到安全地方防止误操作改坏配置。用下面命令检查配置语法sudo sshd -t如果返回没有任何错误说明配置没语法问题。改配置后重启服务时一个有用的做法是先开一个新的连接窗口再做重启——万一新配置有问题旧的连接还能保留可以紧急回滚。日志是排查问题的第一现场。SSH 相关的日志分布在两个地方/var/log/auth.log认证日志和/var/log/syslog系统日志。连接失败时执行sudo tail -f /var/log/auth.log然后再次尝试连接可以看到具体的失败原因比如密码错误、公钥不匹配、IP 被拒绝等。日志信息远比猜测可靠。6.3 系统宕机后的本地恢复准备远程访问最大的风险是如果服务器宕机或者 SSH 配置出错你可能会被挡在门外。你如果只有远程访问通道没有本地访问手段这是很被动的。所以我强烈建议在所有远程操作之前确认自己有某种形式的本地访问能力如果是物理机确认显示器、键盘都能正常使用如果是云服务器确认云控制台的 VNC 功能可用。一旦远程断了还能通过本地方式登录系统排查。这个习惯帮我成功避免了至少三次远程误操作导致的“失联”危机每次恢复之后都庆幸自己提前做了准备。另外把恢复操作步骤打印一份放在旁边或者存一份在手机备忘录里。比如“如何在 GRUB 里进入单用户模式重置密码”“如何修改 sshd_config 恢复 SSH 服务”这类应急手册。关键时刻照着做比临时搜索好太多。6.4 服务器安全加固的例行清单最后提醒安全这块。远程访问一旦暴露到公网风险就直接拉满。我自己的服务器定期做下面几件事首先关闭密码登录只留密钥认证。修改/etc/ssh/sshd_config里的PasswordAuthentication no然后重启 ssh 服务。这个改动能让 99% 的暴力破解失效因为对方连密码输入的机会都没有。其次可以给 SSH 设置登录通知在/etc/ssh/sshd_config末尾添加ForceCommand 该User登录时执行通知脚本约束更细的用法是配合 PAM 或者自定义脚本来做二次登录提醒。最简单的做法登录时用pam_exec调一个外部脚本把登录时间、IP 等信息通过邮件或 webhook 推给你自己。效果非常直观每次有陌生人摸到你的服务器你第一时间就知道了。然后定期更新系统补丁这是最基础且常常被忽略的工作sudo apt update sudo apt upgrade -y最后梳理一下账户权限删除长时间不用的账号检查/etc/sudoers里是否有异常提权规则。安全加固是无止境的但对个人和小团队来说做好上面几步日常威胁已经能挡住九成以上。这套 Ubuntu 18.04 MobaXterm 的搭配我自己用了三年多从最初的实验室工作站到后来的远程编译服务器一直很稳定。中间踩过的坑基本上都在上面列出来了现在回想起来绝大多数问题都出在网络配置和服务状态检查上真正的 SSH 协议本身很少掉链子。如果你刚开始搭建远程环境就按文章的顺序一步步来装系统、配静态 IP、开 SSH、MobaXterm 连接、安全加固。这五个环节走完一套可靠、顺手、安全的远程开发环境就立起来了。至于更进阶的容器化部署、SSH 跳板机、自动化运维编排等你的第一步落地之后再说。
阅读完成 · 觉得有帮助?