news 2026/10/2 1:44:39

XShell连接Linux虚拟机全指南:网络配置、SSH服务与问题排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XShell连接Linux虚拟机全指南:网络配置、SSH服务与问题排查

平时开发、测试,我习惯在VMware里开一台Linux虚拟机。系统装好之后,图形界面打开越用越卡,复制粘贴命令还经常出各种怪问题。次数多了,我干脆把所有操作都挪到XShell里做——用XShell远程连接虚拟机终端,然后所有敲命令的操作都在这个轻量的终端窗口里完成。这篇文章给准备用XShell连虚拟机、却被各种报错卡住的朋友,会把网络配置、SSH服务、IP获取、连接配置、问题排查这些环节从头到尾捋一遍,既适合完全没有远程连接经验的新手,也适合遇到连接失败想找完整排查思路的同行。

先说明适用范围:本机装VMware Workstation或VirtualBox,虚拟机里跑Ubuntu或CentOS,然后从宿主机发起连接。这套方法对云服务器、局域网内其他Linux主机同样成立,只是IP地址的来源和获取方式略有不同。整体操作链路其实不复杂,就三步:先让虚拟机的网络通、SSH服务就绪,再拿到虚拟机的IP,最后在XShell里建会话连上去。真正让人卡住的从来都不是这三步本身,而是细节——网络模式选错、服务没启动、防火墙挡端口、IP找错、密码被系统策略锁住,这些坑我会一个一个展开讲。

1. 为什么绕不开XShell:虚拟机终端连接的真实场景

1.1 图形界面很好,但日常操作我更信任终端

虚拟机里的图形桌面能干很多事,浏览器、编辑器、文件管理器都很直观。但在真正的服务器管理场景里,绝大多数操作还是在终端里完成的。原因很朴素:轻、快、可复制。

轻,是说XShell这个客户端本身只有几十兆,跑起来占用资源特别少,不像虚拟机图形界面那样吃内存和CPU。我本地一台机器同时开两个虚拟机,如果都用图形桌面,鼠标拖一下都费劲,关掉图形桌面只跑命令行,负载肉眼可见地降下去。

快,是说命令行的操作路径比鼠标点选短得多。查日志、改配置、重启服务、批量操作文件,几个命令就完成了,不用在窗口里一层层点目录。

可复制,这个体验差异最明显。XShell里从网页、文档复制一段命令,直接Ctrl+V就进去了,格式不会乱;反过来从终端复制输出,也直接就是纯文本,不像在VMware图形窗口里复制,经常把带高亮颜色的乱码也粘进来。

所以我现在的习惯是:虚拟机装好之后,图形界面只用来做初始配置,日常管理一律通过XShell远程连终端来完成。这种方式也更接近生产环境的管理方式——在真实服务器上,你可能根本没有图形界面可以打开。

1.2 XShell、VMware自带终端、Windows Terminal、VS Code Remote怎么选

有朋友问过我:既然Windows自带的终端能用ssh命令,VS Code也能远程连服务器,为什么还要单独装XShell?这几种方案各有适用场景,我说下自己的取舍。

工具适用场景短板
XShell日常运维、批量管理多台主机、传文件商业软件,个人免费,商业使用需授权
VMware原生控制台虚拟机开机引导、图形界面救援、没装SSH时的紧急入口窗口体验差,复制粘贴别扭,每台虚拟机都要单独开窗口
Windows Terminal + ssh命令临时连一两台机器,不想装额外软件会话管理弱,机器一多就乱,密钥配置也要手动搞
VS Code Remote-SSH边写代码边连服务器,需要图形化编辑器启动重,纯终端操作不如XShell轻便,多会话管理一般

我的建议是:如果你只是偶尔在虚拟机里敲两行命令,Windows Terminal完全够用;如果你要频繁连接多台虚拟机,还要传文件、保存会话、记录操作日志,XShell的效率要高得多。文章后面讲的排查思路对所有SSH客户端都通用,不是只能用在XShell上。

1.3 XShell免费版够用吗

XShell有两个版本:商业版和个人版。个人使用、家庭使用、学生使用不收费,功能上日常最常用的都有——SSH、SFTP、多标签页、密钥管理、快速命令、日志记录,免费版全都有。只有商业用途需要购买授权。

说白了,绝大多数人用到的就是SSH终端+SFTP传文件这两块,免费版绰绰有余。没必要一上来就找破解或者老版本,用官网的个人版,功能正常、安全更新也有保障。

2. 连接前必须搞定的三件事:网络模式、SSH服务、IP地址

2.1 虚拟机网络模式到底怎么选:NAT、桥接、仅主机

这一节是最多人踩坑的地方。很多人虚拟机装好了,打开XShell输IP,怎么都连不上,问题就出在网络模式上。VMware里给虚拟机配置虚拟网卡时,有三种模式:NAT、桥接、仅主机。

NAT模式是VMware的默认模式。虚拟机的网卡通过宿主机的VMnet8虚拟网卡做网络地址转换,虚拟机可以访问宿主机,也可以通过宿主机上网,但外界访问不到虚拟机。听起来好像很封闭,但对XShell远程连接虚拟机这件事来说,完全不耽误——因为连接是从宿主机发起的,宿主机和虚拟机在同一个虚拟网络(VMnet8)网段里,宿主机可以直接访问虚拟机的IP。这是最推荐的模式,网络环境简单,不需要依赖外部路由器的DHCP。

桥接模式相当于虚拟机直接接入了你所在局域网,它有自己的局域网IP,看起来就像房间里的另一台电脑。好处是局域网里的其他机器也能访问它,比如你手机、另一台工作电脑也想连这台虚拟机,桥接就合适。但桥接模式依赖外部网络环境,如果路由器没开DHCP、办公楼网络有端口隔离,虚拟机可能拿不到IP,反而增加连接难度。

仅主机模式的虚拟机只能和宿主机通信,不能上网,主要用于做网络实验、测试隔离环境,日常管理没必要选。

很多新手容易犯的错是:在NAT模式下,顺手给虚拟机配了一个和宿主机同网段的静态IP,结果虚拟机既上不了网,宿主机也ping不到它。记住,NAT模式下虚拟机的IP属于VMnet8网段,不是你的局域网网段,让它自动获取或者按VMnet8网段手动配置都行,就是别按局域网网段瞎配。

2.2 给虚拟机安装并启动SSH服务

XShell连接虚拟机走的是SSH协议,所以虚拟机里必须装了SSH服务端。很多精简版系统镜像、或者你在安装时没选SSH组件,系统里压根没有这个服务,表现出来就是XShell提示"远程计算机拒绝连接"。

Ubuntu/Debian系列,安装和启动就几条命令:

sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh

enable是设置开机自启,now是立即启动。装完检查一下服务状态和端口监听:

systemctl status ssh ss -tlnp | grep 22

看到22端口有监听就对了。CentOS/RHEL系列略有区别,服务名是sshd:

sudo yum install -y openssh-server sudo systemctl enable --now sshd

CentOS还要注意防火墙。有防火墙就放行SSH,没有就直接跳过:

sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload

Ubuntu如果启用了UFW防火墙,也要放行:

sudo ufw allow 22/tcp

这里提一个实践上的建议:如果就是想快速跑通连接,可以先临时关掉防火墙,把链路打通之后再考虑安全加固。等确认XShell能连上,再按上面的命令放行端口或者重新开启防火墙,避免防火墙规则写错导致排障时分不清是网络问题还是服务问题。

2.3 三种方式拿到虚拟机的IP

SSH服务装好了,下一步是知道往哪里连。虚拟机里执行下面任何一个命令都能看到IP:

ip addr show

重点看ens33、eth0、ens160这种网卡的inet字段,类似192.168.xxx.xxx这样的就是虚拟机的IP。如果ip命令的输出看着费劲,也可以:

hostname -I

这条命令会直接列出一行IP地址,没有其他干扰信息,拿来填XShell的主机地址正合适。传统ifconfig命令在新系统里默认没有,需要装net-tools包,能不装就不装,用ip命令就行。

拿到IP之后,从宿主机验证一下网络通不通:

ping 192.168.xxx.xxx

能ping通则网络正常,接着打开XShell建会话。连不通则按本文第4节的排查思路走。这里多说一句,很多人搞不清"拿到了IP为什么还是连不上"——IP只是找到主机,能不能连上还要看SSH服务听没听、防火墙放没放行,所以拿到IP之后先ping,再继续排障,是效率最高的顺序。

3. XShell端配置实战:新建会话、连接参数与首次握手

3.1 新建会话的完整流程

打开XShell主界面,文件菜单里选择"新建",或者直接点工具栏上的新建按钮。我习惯用快捷键Ctrl+N,速度最快。

会话属性窗口里需要填的内容并不多,核心就这几个:

配置项推荐值说明
协议SSH加密传输,登录后数据不会被抓包看到明文
主机虚拟机的IP地址填2.3节里拿到的IP
端口号22SSH默认端口,改了服务端配置就填对应端口
用户名你的Linux登录用户名例如ubuntu、root、centos
认证方法Password(密码)第一次连接先用密码登录,后面可以换成密钥

填好之后点连接,第一次连接一个全新主机,XShell会弹出提示,问你是否接受这台主机的SSH主机密钥。这里直接接受并保存就行,它的作用相当于确认"我连的就是我以为是的那台机器",防止中间人冒充。

接着就是输入密码。密码正确,就进入了虚拟机的终端界面。看到类似root@ubuntu:~#的提示符,说明连接已经成功。首次连接顺利的话,整个过程也就十几秒。

3.2 连接参数与终端外观的细节

XShell连接成功后,有几个参数值得根据使用习惯调整,不然用起来总觉得别扭。

编码设置很关键。默认会话如果终端里中文全是乱码,多半是编码不对。在会话属性里把终端页面的编码设置为UTF-8,基本能解决99%的乱码问题。Ubuntu和CentOS现在的默认语言环境都是UTF-8,这块设置好以后,中文文件名、中文日志输出都能正常显示。

终端类型保持xterm就行,不用改,这个参数影响的是终端模拟器对特殊键位、颜色控制序列的支持,xterm兼容性最好。

外观设置比较个性化,字体推荐Consolas或者等宽字体,字号看个人习惯,我一般用11号或12号。配色方案XShell自带了几个,深色背景配浅色文字用久了眼睛舒服一些。光标类型我喜欢用竖线,选中文本时高亮颜色要明显,方便监听状态时扫过去就能看见输出。

还有一个容易被忽略的选项:会话属性里的"连接"设置,默认有个保持活着的选项。VMware虚拟机跑久了、宿主机休眠过,SSH连接容易断。把保持活着的间隔设置成60秒左右,XShell会定时发一个空包维持连接,避免敲着敲着就卡住等半天才断开。

3.3 新版XShell的界面变化与安装失败处理

XShell 8相比老版本,界面确实做了一些调整,默认配色更偏暗色风格,按钮排布也更紧凑。老用户刚上手可能有点不习惯,但功能入口大方向没变,新建会话、快速命令、密钥管理器这些核心功能都还在原来的菜单逻辑里。

另外有不少朋友反映XShell安装失败。就我接触到的案例,最常见的原因有三个:一是安装包下载过程不完整,文件损坏导致安装程序无法解压;二是杀毒软件或系统安全策略拦截了安装程序;三是之前装过老版本,残留的配置文件冲突。对应的处理办法也很直接:去官网重新下载安装包,确认文件大小和官网显示一致;安装时暂时关闭杀毒软件的实时防护;先卸载旧版本,清理干净安装目录和注册表相关项,再装新的。安装路径尽量用纯英文,不要带中文目录,能省掉很多莫名其妙的权限问题。

顺便提一下XShell 7里增加的密码查看器功能。它可以查看当前会话保存的账号密码,确实方便,但这也意味着密码在会话文件里是可逆存储的。我的建议是:自己电脑上用没问题,但别在公用电脑上保存虚拟机或服务器的登录密码,尤其是root密码。要么每次输入,要么改用密钥登录——这也是我推荐密钥登录的原因之一,第三部分会详细讲。

4. 连接失败排查实录:拒绝、超时、认证三座大山

4.1 "远程计算机拒绝连接"到底是谁在拒绝

这个报错出现时,第一反应不应该是"虚拟机拒绝了我",而是"XShell根本没有找到能说话的对象"。绝大多数情况下,原因是目标端口上没有服务在监听——也就是SSH服务没装或者没启动。

排查链路非常简单,先在虚拟机本机执行:

ss -tlnp | grep 22

如果有输出,说明SSH服务正在监听22端口,问题不在服务端;如果没有任何输出,说明服务没起,按2.2节的安装启动命令处理。还有一种可能是端口被改了,比如有人把SSH端口改成了22022,那你在连接时要把端口号也改过来。

确认服务正常后,再从宿主机测试能不能连到该端口。Windows下可以用Test-NetConnection命令:

Test-NetConnection 192.168.xxx.xxx -Port 22

返回TcpTestSucceeded为True,说明宿主机的网络能到达这个端口。为False,则问题出在网络层或防火墙,继续看4.2。

4.2 连接超时:先查网络可达性

连接超时和连接拒绝是两类完全不同的问题。拒绝说明端口是通的、服务在应答;超时说明数据包发出去之后根本没有回应,像石沉大海。

先检查虚拟机状态。虚拟机如果处于挂起、已关机状态,任何连接都会超时,先把它开机。这是很多人容易忽略的,特别是装完系统后,测试时顺手点了挂起,回头再连就忘了。

网络模式也要再确认。NAT模式下,虚拟机的网卡要启用,VMware的VMnet8虚拟网卡在宿主机里也要保持启用状态。打开Windows的"更改适配器选项",能看到VMware Network Adapter VMnet8,如果被禁用了,虚拟机网络就断开了。

接着ping一遍虚拟机IP,从宿主机执行:

ping 192.168.xxx.xxx

能ping通,说明网络通路没问题,问题可能出在防火墙层面。能ping通但22端口不通,在CentOS上要检查firewalld,在Ubuntu上要检查UFW,具体命令2.2节里已经有了。还有一点,有些环境下防火墙默认策略是丢弃(DROP)而不是拒绝(REJECT),表现就是连接超时而不是连接拒绝,别被表象带偏。

如果ping不通,重点检查虚拟机网卡状态和IP配置。在虚拟机图形界面或者原生控制台里执行ip addr,看网卡是不是没有IP地址、或者处于DOWN状态。很多精简版系统网卡默认没启用,需要自己配置。Ubuntu的netplan配置文件在/etc/netplan/,CentOS的在/etc/sysconfig/network-scripts/ifcfg-ens33,改了配置后记得重启网络服务或者直接重启虚拟机。

4.3 认证失败:密码、用户名和PAM策略

连接通了、服务也在,却卡在输入密码这一步,提示认证失败,这属于第三座大山。

最简单的原因是密码输错了。SSH里的密码是回显不出来的,输入时看着像没反应,其实字符都进去了。确认CapsLock没开,确认输入时用的是英文半角状态。

第二个原因是用户名不对。XShell新建会话时填的用户名,必须和虚拟机里实际存在的用户一致。很多人填写时习惯性填root,但Ubuntu默认安装时并不启用root登录——安装时创建的那个普通用户才是应该填的用户名。root能不能登录还取决于SSH配置里的PermitRootLogin策略,默认在某些发行版里是prohibit-password,禁止root用密码登录。

第三个原因相对隐蔽,多见于CentOS:系统的SELinux或PAM策略限制。遇到这种问题,先用虚拟机图形界面的原生终端登入系统,在本地执行:

passwd

给当前用户重新设置一个明确知道的密码,然后再连接。修改密码之后,顺手看一眼SSH配置文件/etc/ssh/sshd_config里PasswordAuthentication的配置,确保是yes。改完配置记得重启服务:

sudo systemctl restart ssh

还要提醒一句,别为了省事把PermitRootLogin直接打开,尤其是在能连到外网的机器上。本地虚拟机测试还好,但养成习惯后放到生产环境风险很大。

4.4 主机密钥不匹配:虚拟机重装之后的老问题

如果你以前连过这台虚拟机,后来虚拟机重装或者系统被重置了,再次连接时XShell可能会提示主机密钥发生了变化,拒绝连接。这个是安全机制在起作用——它怀疑这台机器已经不是原来那台了。

解决办法是在会话属性里清除旧的密钥记录。具体入口在XShell的工具、选项或会话属性里找到"主机密钥"相关设置,删除对应主机的记录,重新连接时接受新的主机密钥就行。有些版本会直接弹窗让你选择是接受新密钥还是拒绝,接受即可。

这类提示在真正的生产服务器上要格外谨慎。如果一台服务器没重装系统却突然提示主机密钥变了,大概率是网络被劫持或者机器被人做了手脚,必须通过带外管理方式核实清楚再处置。这也是为什么我建议每次连接新主机时,保存主机密钥的习惯要养成——安全机制只有在被认真对待时才有意义。

5. 把连接体验再拉高一截:密钥登录、XFTP与多会话管理

5.1 用密钥免密登录:一次配置,长期省心

密码登录用久了,最大的问题是麻烦和安全性的平衡。每次都要输密码,还担心密码泄露、被暴力破解。换成密钥登录,两个字:省心。

XShell里自带密钥管理器,在"工具"菜单下找到"用户密钥管理器"。生成一对RSA密钥,长度选2048或4096,生成时可以给私钥加一个保护密码。密钥对生成后,需要把公钥内容加到虚拟机里对应用户的authorized_keys文件中。

在虚拟机终端里执行:

mkdir -p ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

然后用编辑工具打开authorized_keys,把XShell里生成并复制好的公钥内容粘贴进去,保存。

回到XShell会话属性,认证方法选择Public Key,右边选择刚生成的密钥。连接时就不再要密码了。整个过程如果觉得手动粘贴公钥麻烦,XShell的XFTP组件可以把公钥文件直接拖拽到虚拟机里,再在虚拟机里追加到authorized_keys。

这里补充一个常见问题:配完密钥还是要密码。绝大多数原因是~/.ssh目录或authorized_keys文件的权限不对。SSH服务端对权限有严格要求:~/.ssh目录必须是700,authorized_keys必须是600,用户主目录本身不能对其他用户可写。权限错了,SSH会直接忽略这个密钥文件,等于白配。

5.2 Ctrl+Alt+F:在会话里直接调出XFTP传文件

XShell最大的加分项之一是内置XFTP。一个会话连上虚拟机后,快捷键Ctrl+Alt+F可以直接在当前会话对应的服务器上打开一个SFTP文件窗口,和XShell里的终端会话共用同一个连接。拖拽就能上传下载文件,不需要再单独配一个FTP客户端。

对日常管理虚拟机来说,传配置文件、传安装包、拉取日志都特别方便。比如在虚拟机里编辑/etc/nginx/nginx.conf,本地改好了直接拖上去;或者把应用日志拖回来分析,比在终端里cat再复制轻松得多。

XFTP的协议选SFTP,端口默认也是22,和SSH共用,不需要额外开放其他端口,安全上也比FTP明码传输好得多。

5.3 会话管理、快速命令栏和日志记录

机器一多,会话管理就显得重要了。XShell支持把会话按文件夹归类,比如按项目、按环境(测试服务器、预发布、生产)分组。双击一个会话就连接,不用每次重新填IP和账号。连接失败的会话可以标记颜色,状态一目了然。

快速命令栏是个容易忽略的好功能。把高频命令做成按钮放到底部栏,比如查看磁盘占用、查看内存、刷新系统更新、查日志尾部。在XShell的设置里编辑快速命令,输入命令文本,点击就能发给当前会话执行。对经常在几台机器之间重复敲同样命令的人来说,这个功能能省下大量时间。

日志记录功能适合需要留痕的场景。把SSH会话的全过程记录到本地日志文件,包括屏幕输出,对事后复盘、排查问题都有用。入口在XShell的工具、选项里,设置日志文件路径和记录策略,确认开启后,每次会话输出都会写入文件。这个功能我建议一直开着,反正日志文件不大,关键时刻可能救你一命。

5.4 最后分享两个我自己常用的习惯

第一,新开虚拟机后,直接把SSH服务装好、IP固定下来,顺手把XShell会话建好并改名成有意义的名称,别等到要连的时候才手忙脚乱。第二,每次改完sshd_config或防火墙规则,先在虚拟机本机重启服务并验证端口再走人,别让一个简单的配置改动变成两个小时排障的开端。

说回远程连接这件事本身,它就是一套组合拳:网络模式选对,SSH服务在跑,IP地址清晰,XShell会话顺手。把这几个基础环节打牢,你连的就不只是那一台虚拟机,而是拿到了一把适用于任何Linux机器的钥匙。云服务器、家里机房的机器、公司内网的主机,流程一模一样,最多就是IP来源、安全策略略有不同。下次再遇到哪台机器连不上,按本文第4节的链路走一遍,八成能直接定位问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 1:44:32

Rufus 实战:5 分钟做好 USB 启动盘,老机器免 TPM 装 Win11

Rufus 实战:5 分钟做好 USB 启动盘,老机器免 TPM 装 Win11 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus Rufus 是一款开源、免安装的 U 盘格式化工具。插上 32GB U 盘&a…

作者头像 李华
网站建设 2026/10/2 1:43:10

GD32/STM32以太网裸机驱动实战:ZLG EPORTM+YT8512H硬件级调试指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:41:59

EMC机柜屏蔽条失效真相:导通比贴合更重要

1. 为什么机柜屏蔽条一装就失效?——从“贴得严”到“导得通”的认知翻转你有没有遇到过这种情况:新买的EMC密封条,铝箔面朝外、胶面牢牢粘在机柜门框上,手指按压一圈都密不透风,测试时却依然在30MHz–1GHz频段冒出-45…

作者头像 李华