1. 先别急着敲命令,把整条链路想清楚
1.1 你面对的不只是“装个系统”这么简单
“装Ubuntu 18.04通过MobaXterm的ssh远程访问”这个标题看起来很直白,但真正在电脑面前操作过一轮就会发现,这里面至少叠了三层任务:第一层是把Ubuntu 18.04装到一台机器上,第二层是让这台机器在网络里有一个固定且可达的地址,第三层才是用Windows上的MobaXterm通过SSH协议连过去。很多人装完系统就觉得完事了,结果在Windows上打开MobaXterm输了一通IP地址,连半天连不上,就开始怀疑人生。其实问题往往不在最后一公里,而是前面某一步埋了雷。
SSH远程访问这件事,本质上就是“你的Windows电脑作为客户端,去连接一台运行着SSH服务端程序的Linux主机”。你可以把它理解成打电话:Ubuntu这边是接电话的人,它得先把电话机(sshd服务)插上电、接好线;Windows这边是打电话的人,它得知道对方的号码(IP地址)和分机号(端口),并且两边得在同一个通话网络里(局域网或可达网络)。任何一个环节断了,这通电话就拨不通。
所以整篇内容我就按照这条链路的顺序来聊:装系统时的关键注意事项,装完之后的网络配置,SSH服务端的开启与防火墙放行,再到MobaXterm这一端的连接参数设置。最后再把我实际踩过的一些坑整理成速查表,尤其是那种“明明每一步都照做了,为什么还是连不上”的案例,给大家一个可以逐条排查的路径。
1.2 为什么是这个组合:版本、终端工具与协议的选择逻辑
先说说为什么是Ubuntu 18.04。虽然这个版本已经不算新,但它在很多服务器场景、嵌入式开发环境、软件编译环境里依然是“保守稳定”的代名词。很多公司内部的老项目、工业设备、教学实验环境,跑的还是18.04。对新手来说,18.04的图形安装界面、网络管理方式、软件源仓库,都比更早的版本友好不少;对老手来说,它的包管理习惯和系统目录结构又足够熟悉。所以如果你手头的机器性能一般,或者你只是想搭一个稳定的Linux环境练手,18.04依然能打。
再说MobaXterm。Windows上能用的SSH客户端一大堆,PuTTY、Xshell、Windows Terminal自带的OpenSSH都行,但MobaXterm有一个非常大的优势:它把SSH、SFTP、端口转发、X11转发、RDP、VNC这些功能都集成到了一个界面里。你左边是远程文件目录,右边是终端窗口,中间还能直接拖拽上传下载文件,这种“一体化”的体验特别适合需要频繁在Windows和Linux之间倒腾文件的场景。我把话放这儿:一旦你习惯了MobaXterm,再回去用那种纯命令行SSH工具,会觉得非常别扭。
协议层面选SSH而不是Telnet、FTP,原因很简单:SSH全程加密,密码和文件内容不会明文裸奔;Telnet虽然也能远程登录,但传输内容可以被抓包工具直接看到,这在稍微正规一点的环境里是绝对不允许的。SSH默认端口是22,你可以理解为这一栋楼里那个固定不变的接待窗口,虽然理论上能换,但大多数场景下没必要改,改了反而会增加排查成本。
2. 装好Ubuntu 18.04,并且让它可以被远程连上
2.1 制作启动盘与安装过程中的细节
安装Ubuntu 18.04,最常用的方式是用U盘做启动盘。这里我建议用Rufus或者balenaEtcher这类工具,把Ubuntu 18.04的ISO镜像写入U盘。需要注意一个关键选项:写入模式一定要选“DD镜像模式”,尤其是在Rufus里,如果默认的“ISO镜像模式”写入,有些主板引导时会直接黑屏或报错,我吃过这个亏。用balenaEtcher的话基本无脑,选镜像选U盘直接开始就行。
安装过程中的几个节点我简单说一下:
- 分区方案:如果是整块硬盘只装Ubuntu,选“清除整个磁盘并安装Ubuntu”最省事;如果想和Windows双系统共存,就要选“其他选项”手动分区,需要留出空闲空间。手动分区的话,建议至少分一个
/(根分区)和一个swap(交换分区)。根分区文件系统选ext4,挂载点选/;内存小于4G的机器,swap可以分4~8G,内存大的机器分2G意思意思就行。 - 用户名和密码:这里容易埋坑。安装时填写的用户名会成为系统管理员账号,同时也是后续SSH登录时的默认用户名。如果你想用
root直接登录SSH,安装完还得单独设置root密码,否则root是被锁住的。 - 软件更新源:安装过程中会让你选下载服务器,默认可能会指向国外源。建议改成国内镜像源(比如阿里云或腾讯云的镜像),否则后续
apt update时下载速度会让人怀疑人生。
装完之后,系统会重启进入Ubuntu桌面。到这里第一层任务完成,但能不能远程访问,还取决于接下来的网络和服务配置。
2.2 网络配置:IP、网段、网关一个都不能错
Ubuntu 18.04安装完成后,默认使用的是DHCP自动获取IP。也就是说,你的机器现在有一个IP,但它是路由器随机分配的,重启之后可能就变了。如果IP地址老变,MobaXterm里的会话配置就得跟着改,这太折磨人了。所以我的建议是:刚装完系统,第一件事就是把IP固定下来。
最直接的方法是图形界面操作:点击右上角网络图标,进入“有线设置”,选择你的网卡(名称可能是类似“Wired connection 1”的东西),点IPv4选项卡,把“自动(DHCP)”改成“手动”,然后填入你的IP地址、子网掩码、网关和DNS。
这里必须弄清楚你家或公司网络的网段。比如你的路由器管理地址是192.168.1.1,那么你给Ubuntu这台机器设192.168.1.100就是一个合理的地址;子网掩码填255.255.255.0;网关填192.168.1.1;DNS可以填192.168.1.1或者223.5.5.5这种公共DNS。填完之后点击“应用”,再打开终端用ip addr看一下网卡上的地址是否变成了192.168.1.100。
如果你用的是服务器版(没有图形桌面),那就得改Netplan配置文件。Ubuntu 18.04的Netplan配置路径在/etc/netplan/下,文件名通常叫01-netcfg.yaml或类似。示例配置长这样:
network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 114.114.114.114注意那个/24就是子网掩码255.255.255.0的CIDR写法,必须写上,不写的话系统可能不认。改完之后执行sudo netplan apply让它生效。还有一个细节:网卡名不一定是ens33,不同机器上可能是enp0s3、eth0之类。不确定就用ip addr查看一下当前活跃网卡的名称再改。
网络这块如果配错,最典型的症状就是:Windows上ping Ubuntu的IP不通,或者Ubuntu上不了网。所以配置完一定要先在本机上验证:ip addr看IP,ping 网关看网关通不通,ping 8.8.8.8或ping 223.5.5.5看外网通不通。只有这几条都通了,后面的SSH才有意义。
2.3 开启SSH服务并放行防火墙
Ubuntu 18.04默认没有安装OpenSSH服务端,这一点很多人不知道。在桌面上打开终端,先执行:
sudo apt update sudo apt install openssh-server -y装完之后,检查一下服务是否在运行:
sudo systemctl status ssh如果看到active (running),说明服务已经起来了。如果没起来,多半是安装有问题,可以用sudo systemctl start ssh手动启动,再用sudo systemctl enable ssh设置开机自启。这里强烈建议设置开机自启,否则每次Ubuntu重启之后,你都得跑到机器面前敲命令,那就失去远程访问的意义了。
Ubuntu 18.04默认自带了ufw防火墙,默认规则可能是关闭状态,也可能是开启状态。如果是关闭状态,SSH端口直接就能访问;如果开启状态,就得放行SSH服务:
sudo ufw allow OpenSSH sudo ufw enable注意顺序别搞反:ufw allow OpenSSH必须在开启防火墙之前执行,否则你一开防火墙就把自己挡在外面了。这里有个更稳妥的做法是直接sudo ufw allow 22/tcp,把22端口放行,不管以后服务名怎么变都不会误伤。
到此为止,Ubuntu这一端已经具备了被远程连接的条件:它有了固定IP,SSH服务在跑,防火墙放行了端口。接下来就是Windows这一端的故事了。
3. MobaXterm上手与第一次SSH连接
3.1 下载、安装与Session创建的常见误区
MobaXterm的下载直接去官网,选免费版(Home Edition)就够了。它有便携版和安装版两种,我建议直接用便携版,解压到一个固定目录,双击exe就能用,走到哪带到哪,不会往系统里写一堆注册表项。便携版有个小坑:你把它放在带中文的路径下,偶尔会有配置保存异常的问题,所以尽量放在纯英文目录,比如D:\MobaXterm。
打开MobaXterm之后,界面顶部的工具栏里有一个“Session”按钮,点进去就能新建会话。这里第一个容易犯的错是选错会话类型:如果你要SSH连接Linux,会话类型必须选“SSH”,别选成“Telnet”或者“RDP”。选错类型的话,连上去要么是乱码,要么直接报协议错误。
Session创建界面里,最关键的信息是:
- Remote host:填Ubuntu的IP地址,也就是之前固定下来的那个
192.168.1.100 - Specify username:这个选项是可选的,勾上之后可以直接填Ubuntu的用户名
- Port:SSH默认是22,如果你没有改过sshd_config里的Port字段,保持22就行
填完后点“OK”,会话会被保存到左侧的会话列表里,下次双击就能直接连。这个保存会话的功能,是MobaXterm比Windows自带的SSH命令强的地方之一:你不用每次打开终端都敲一遍ssh username@ip,而且每个会话都可以单独配置字体、颜色、终端类型。
3.2 连接参数逐个说明:端口、用户名、密码的首连验证
第一次点击会话发起连接时,MobaXterm会弹出一个提示,问你是否信任这台主机的指纹(fingerprint)。这个提示的作用是防止中间人攻击——它告诉你,这台远程服务器在网络上对应的指纹是什么,如果你确认这是你要连的机器,就点“Accept”并保存。盲点“Reject”会导致连接直接被断开,这一点千万别搞错。
接着就是输入密码。你在这里输入的密码是Ubuntu上那个用户对应的登录密码。需要注意:输入密码时屏幕上不会显示字符,也不会显示星号,这不是卡住了,是SSH协议的设计就是这样的。输完直接回车就行。
如果你勾选了“Specify username”,它会跳过用户名输入步骤,直接让你输密码;如果没有勾选,它会先问你要用户名,再要密码。这一步如果提示Permission denied, please try again,先别急着怀疑密码输错,可以去Ubuntu本机终端试试用同样的用户名密码能不能登录,如果本机能登录而远程不能,那大概率是sshd配置里禁用了密码登录,或者用户被限制访问了。
首连验证成功之后,你会看到一个正常的Linux终端提示符,类似username@ubuntu:~$。到了这一步,整条链路就算通了:Ubuntu装了系统、配了网络、跑了SSH服务,Windows端通过MobaXterm连上了。后面想跑什么命令,直接在这个终端窗口输入即可。
3.3 登录成功后的界面布局与常用功能
MobaXterm登录成功后的主界面是左右两栏布局。左侧是远程文件浏览器(SFTP),默认显示你登录用户的Home目录;右侧是终端会话。这个布局对文件操作特别友好:你可以直接在左侧目录树里找到某个文件,然后拖拽到Windows桌面,就能把远程文件下载到本地;反过来,把Windows文件拖进左侧目录,就能上传到服务器。这在之前用PuTTY的时代是不可想象的便利。
很多人在终端里执行某个命令后界面卡死或输出特别长,其实只是终端显示宽度不够。你可以右键点会话顶部标签,进入“Edit session”,把终端尺寸调大,或者直接在终端里拖拽边框调整大小。
还有三个功能我建议你重点用起来:
- 多标签管理:MobaXterm支持像浏览器一样同时开多个SSH会话标签,每台服务器一个标签,切换起来非常方便。
- X11转发:如果Ubuntu上装了图形界面程序(比如一些编译工具的自带图形界面),你可以在SSH会话里直接运行它,窗口会显示在Windows桌面上。这个依赖MobaXterm自带的X server,默认是开启的,等会儿我会专门说。
- 命令面板和宏:一些高频命令可以存成宏,一键执行,适合批量操作多台机器。
4. 把远程访问升级成“日常顺手用”的状态
4.1 密钥登录配置,彻底摆脱密码输入
密码登录最大的问题是每次都要敲密码,如果密码复杂一点,输错率还挺高。更专业一点的做法是配置SSH密钥登录。原理不复杂:你生成一对公钥和私钥,把公钥放到Ubuntu的~/.ssh/authorized_keys文件里,私钥留在Windows本地。连接时,服务器会向客户端发起一个用公钥加密的挑战,客户端用私钥解密并回应,验证通过就放行。
在MobaXterm里操作很直观:打开“Tools”菜单,选择“MobaKeygen(SSH key generator)”,生成一个RSA或Ed25519密钥对。建议选Ed25519,类型更新,安全性更高,长度也不用像RSA那样动辄2048、4096位。生成后先把公钥复制下来,然后把私钥保存到一个本地路径,比如C:\Users\你的用户名\.ssh\id_ed25519。
接着在MobaXterm的SSH会话设置里,勾选“Use private key”,选择你保存的私钥文件,然后在“Advanced SSH settings”里把“Remote environment”设置成你习惯的终端模式。首次连接时,MobaXterm会提示你是否要把公钥安装到远程主机上,如果它没有自动提供这个选项,你需要手动把公钥追加到Ubuntu服务器的authorized_keys文件里。在Ubuntu终端执行:
mkdir -p ~/.ssh chmod 700 ~/.ssh echo "你的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys这里有个几乎所有人都会犯的权限错误:~/.ssh目录和authorized_keys文件的权限如果太开放(比如777、644),sshd会直接忽略这个公钥文件,继续要求密码登录。正确的做法就是上面代码里写的那样,.ssh目录是700,authorized_keys是600。配好之后,下次连接如果私钥路径正确,就能直接登录,不再提示密码。
4.2 固定IP、多设备管理与SSH连接保活
密钥登录配好之后,你要面对的另一个问题是“连接不稳定”。SSH连接如果长时间没操作,经常会出现“卡住”的现象,敲键盘没反应,过一会儿直接断开。这是因为网络设备或系统默认会清理空闲连接。解决方法是让客户端每隔一段时间发一个心跳包。在MobaXterm的Session设置里,进入“SSH”选项卡下的“Advanced SSH settings”,把“SSH keepalive”勾上,默认间隔写30秒就够了。
还有一个很容易被忽略的细节:如果Ubuntu的开机时间比较长了,IP地址可能因为租约过期而发生变化。如果你给自己配了固定IP但不能保证路由器一定分配这个地址,建议登录路由器后台,把它的MAC地址和IP做一个绑定(DHCP静态分配),这样Ubuntu即使切换到DHCP模式,也总能拿到同一个IP。
如果你要管理的Ubuntu机器不止一台,我的习惯是在MobaXterm左侧会话列表里维护一个清晰的目录结构,比如按项目、按环境(测试/生产)、按机房分文件夹。配合使用“MobaXterm的FTP功能、快速命令栏、宏脚本”,日常管理多台服务器的效率会提升一个档次。
4.3 X11转发跑图形程序的小技巧
很多人不知道SSH还能把Linux上的图形程序窗口直接显示到Windows桌面上。在MobaXterm里,这个功能默认是支持的。前提条件有两个:一是Ubuntu上要有X11相关的库,一般桌面版自带了;二是MobaXterm的SSH会话属性里,有一个“X11-forwarding”选项,默认是开启状态。
如果你在Ubuntu终端里运行一个图形程序,比如nautilus(文件管理器)或者xeyes,正常情况下Windows桌面上会弹出对应的窗口。如果没反应,检查一下sshd_config里是否有X11Forwarding yes这个配置项,默认是有的,但被人改成no的情况也不少。改完之后记得重启ssh服务。
一条可能的经验是:如果Windows上能看到图形窗口了,但画面非常卡顿,可以试着在终端里加-X参数或者设置渲染模式,但这属于进阶调优了。绝大多数情况下,MobaXterm默认配置就能跑起来。
5. 我踩过的坑和常见问题速查表
5.1 连接失败类问题排查路径
我先列一个最常见的现象清单,你对号入座就知道问题大概在哪个环节。
现象:MobaXterm提示Connection refused。 原因和做法:这个提示基本说明你是找到了目标机器,但目标机器对应端口上没有程序在监听。最可能是openssh-server没装好或者ssh服务没起来,上Ubuntu本机执行sudo systemctl status ssh看看;其次是 sshd 配置文件里把Port改了,比如改成了2222,你连接时还用22,就会拒连。改过端口的话,MobaXterm里的Port也要跟着改。
现象:提示Connection timed out。 原因和做法:超时意味着你发出的包根本没到达目标机器,或者被防火墙挡住了。先在Windows命令行窗口执行ping 192.168.1.100,看能不能通。不通的话,检查两台机器是否在同一网段;检查Ubuntu的IP、网关配置;检查路由器和交换机端口是否正常。通了但依然超时,那就是ufw或外部防火墙把22端口挡了,去Ubuntu上确认一下sudo ufw status。
现象:提示Permission denied (publickey,password)。 原因和做法:认证阶段就被拒绝了。通常是密码错了,或者User填错了。还有一种我经常遇到的情况:Ubuntu用户从来没有设置过密码,安装系统时可能跳过了密码设置,这时候需要在Ubuntu本机用sudo passwd 用户名设置一个密码才能远程登录。
现象:能连上,但MobaXterm终端里显示Unable to negotiate之类的协议错误。 原因和做法:这种通常是客户端和服务器支持的算法不一致,常见于老系统配新客户端或反着来。解决方法一个是换新一点的客户端版本,另一个是在sshd_config里开启默认的KexAlgorithms配置,别把兼容算法关掉。
5.2 权限、编码与终端显示问题
连接上之后,终端里中文乱码是个高频问题。Ubuntu 18.04默认locale可能是空的,SSH上去之后中文字符显示成方块或问号。在Ubuntu上执行:
sudo apt install language-pack-zh-hans -y sudo update-locale LANG=zh_CN.UTF-8然后断开会话重连一次。MobaXterm本身的终端编码也要设置成UTF-8:在Session编辑界面的“Terminal settings”里,把“Default encoding”改成UTF-8。两边都对了,中文就不会乱。
权限相关的坑集中在文件传输上。你用MobaXterm左侧SFTP面板拖拽文件时,如果上传/下载失败,先看目标目录有没有写权限。上传到/home/用户名/这种自己家目录肯定是没问题的,上传到/opt、/etc这种系统目录就需要root权限。一个做法是用sudo去修改目标目录的属主,比如:
sudo chown -R 用户名:用户名 /opt/某个目录另外一种思路是:自己本地用SFTP上传到用户目录,然后在终端里用sudo mv把文件再移动到目标位置。
5.3 适合抄作业的速查表
我把整个流程压缩成一张表格,方便你操作时逐行检查:
| 检查项 | 验证命令/操作 | 预期结果 |
|---|---|---|
| Ubuntu IP | ip addr | 显示你固定的IP,如192.168.1.100/24 |
| 网关连通性 | ping 192.168.1.1 | 不丢包 |
| 外网连通性 | ping 223.5.5.5 | 不丢包 |
| ssh服务状态 | sudo systemctl status ssh | active (running) |
| 防火墙规则 | sudo ufw status | OpenSSH或22/tcp处于ALLOW状态 |
| 端口监听 | sudo netstat -tlnp | grep :22 | 显示sshd监听在22 |
| 客户端IP连通 | Windows命令行ping 192.168.1.100 | 通 |
| MobaXterm端口 | 会话设置里Port=22 | 与远程监听的端口一致 |
其实这张表写完,你会发现百分之八十的“连不上”问题,都是因为某个环节没满足上面的一条。所以别慌,按表逐行查,问题总能定位到具体是哪一环丢了。
最后再分享一个小技巧:在MobaXterm里,右键点击会话标签,选择“Duplicate session”可以快速开一个一模一样的会话;如果你的Ubuntu机器有多个IP(比如内网和公网都有),把最常用的IP存成会话,把备用IP写在备注里。这样就算办公网络环境变了,你也不用重新建会话,改一下IP就能连上。
我个人在实际操作中最大的体会是:远程访问这件事,真正难的不是敲那几条命令,而是养成一种“分环节排查”的思维方式。系统装好了不等于能连,能ping通了不等于能SSH,能SSH了不等于能用得顺手。每一层都有各自的检查点,把检查点记熟了,以后不管换什么发行版、换什么终端工具,都能很快上手。