ARTICLE DETAIL

资讯详情

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

XShell连接VMware虚拟机完整指南:SSH配置与排错实战

XShell连接VMware虚拟机完整指南:SSH配置与排错实战 1. 连接前的方案拆解为什么用XShell连虚拟机1.1 解决什么问题终端远程管理的核心场景先说说这个事儿是干嘛的。XShell是一款Windows平台上的SSH客户端它的核心工作就是帮你在本机开一个终端窗口远程登录到Linux服务器或者虚拟机里的Linux系统然后直接在窗口里敲命令。对大部分开发者和运维来说这个动作几乎是每天都要做的。你自己装了一台VMware虚拟机里面跑着Ubuntu或者CentOS平时想装个软件、改个配置、重启个服务如果每次都跑到虚拟机界面里操作那个体验真的是又慢又别扭——窗口切来切去复制宿主机的内容进虚拟机还要装VMware Tools粘贴还经常失灵。用XShell连过去之后一切都变成了纯命令行操作复制、粘贴、脚本执行都干脆利落这才是干活的正常姿势。这篇文章适合谁刚装了VMware虚拟机、想在Windows下舒服地操作Linux的新手以及已经在用虚拟机但一直被“怎么连都连不上”困扰的同学还有想顺带把远程开发环境打通的老手。我会把从虚拟机侧的环境准备、网络配置到XShell侧的会话建立、乱码处理再到失败场景的排查思路完整地过一遍每个步骤都给出可复现的命令和参数不绕弯子。1.2 工具选型XShell和它的替代方案怎么选目前主流的连接方案其实不止XShell一种但我个人最常用的还是它。简单对比一下方便你选择工具优点缺点适合场景XShell轻量、启动快、会话管理好用、免费版够用只在Windows下体验好免费版标签页有限制Windows连Linux、日常运维VS Code Remote-SSH编辑器集成能直接改文件、跑调试重吃内存启动慢开发为主、需要改代码的场景Tabby开源跨平台颜值高偶尔有卡顿资源占用略高跨平台统一终端系统自带终端零成本无会话管理无配色操作繁琐临时用一次VNC/Web控制台能看到图形界面卡顿、吃资源、不适合命令操作图形安装、桌面环境为什么多数人最终还是会回到XShell核心竞争力是会话管理。你可以把每一台机器存成一个会话双击就连每个会话可以单独保存字体、编码、配色还能在会话之间快速切换。这种体验在频繁切换开发机、测试机、虚拟机的时候是其他工具很难比的。而且个人版是免费的日常完全够用官方直接就能下载我待会儿会说下载和安装的注意事项。1.3 一条完整的连接链路长什么样很多人连不上虚拟机是因为脑子里没有把这条链路拆清楚。完整链路是这样的宿主机上的XShell → 宿主机的虚拟网卡 → VMware的虚拟交换机 → 虚拟机内的网卡 → 虚拟机内的SSH服务端口22→ 返回一个命令行终端给你拆成三段看就明白问题出在哪了。第一段是“宿主机能不能到虚拟机”这由虚拟机的网络模式决定NAT、桥接、仅主机模式走的路不一样。第二段是“虚拟机开没开SSH服务”很多精简版Linux默认根本没装openssh-server你连100次也是拒绝。第三段是“XShell这头填的IP对不对”、用户名密码对不对。后面我会按照这三段来排查效率非常高。你现在就可以记住这个思路剩下的就是照着做。2. 虚拟机侧准备SSH服务与网络配置2.1 安装Linux系统时的几个易错点我假设你已经有一台VMware虚拟机里面装了Linux。如果没有装的时候有几个地方要注意踩坑概率极高。第一虚拟机操作系统的选择。镜像建议直接下官方版Ubuntu Server、CentOS Stream、Debian都可以别因为图省事下那种“精简优化版”真的出过太多莫名其妙的问题xy问题非常难排查。第二安装过程中到软件选择那一步如果用的Ubuntu Server版默认不会装图形界面这反而是好事因为你要的是终端。第三也是最容易被忽视的一点安装向导里会让设置用户名和密码这个密码一定要记好后面SSH登录就是用它。第四网络配置建议先选“使用DHCP自动获取”把系统装好后面再改成静态IP。关于VMware版本的选择我用的是VMware Workstation Pro免费版对个人使用已经开放了直接在官网注册个账号就能拿到密钥不用再到处找注册机。安装路径和虚拟机存放路径尽量不要放在C盘后面虚拟磁盘会越来越大C盘满了虚拟机很容易各种报错。2.2 开启SSH服务两条命令解决90%的问题装好系统第一件事就是确认SSH服务有没有起来。很多新手折腾半天连不上结果虚拟机里压根没有SSHD。你在虚拟机里打开终端先用一条命令看看SSH服务监听状态systemctl status sshd # 或者Ubuntu上可能是 systemctl status ssh如果没有这个服务会有明确报错提示找不到。这时分系统安装# Debian/Ubuntu系列 sudo apt update sudo apt install openssh-server -y sudo systemctl enable --now ssh # RHEL/CentOS系列 sudo yum install openssh-server -y sudo systemctl enable --now sshd装完后再次执行systemctl status ssh看到绿色的activerunning说明服务已经正常了。这里有个很容易忽略的细节有些云镜像甚至精简版系统会装sshd但默认不让root通过密码登录配置文件/etc/ssh/sshd_config里有一行PermitRootLogin默认是prohibit-password只允许密钥登录如果你要用root直接连需要改成yes然后重启服务。这个我后面在排错章节还会细讲。先记住一件事SSH服务没启动外面怎么连都是白搭。2.3 网络配置静态IP、网卡模式和防火墙接下来是重头戏网络部分。连不上的原因十有八九出在这里。先看VMware的三种网络模式模式原理能不能被宿主机直达虚拟机能不能上网推荐度桥接模式虚拟机直接占用局域网IP和宿主机平级能前提是IP在同一网段能最推荐最直观NAT模式虚拟机走宿主机共享IP出网虚拟机和宿主机有独立网段能但IP在VMnet8网段能次选够用仅主机模式虚拟机只和宿主机通信不访问外网能IP在VMnet1网段不能调试用我个人的建议在家用路由器环境下直接选桥接模式因为虚拟机和宿主机就在同一个局域网IP分配最直观而且虚拟机和外部设备比如手机、其他电脑也能互通。如果你是在公司内网或者网络环境比较复杂用NAT模式就行稳定性更好不太依赖外部网络策略。然后是给虚拟机设静态IP。为什么要静态IP因为DHCP分到的地址是动态的可能重启后IP就变了。你XShell里存的会话是全IP的IP一换就会连接失败。所以装完系统、确认SSH开启后第一件事就是固定IP。以Ubuntu 22.04以上版本为例用Netplan配置文件sudo vi /etc/netplan/00-installer-config.yaml内容改成这样以NAT模式/VMnet8网段为例VMware NAT默认网段一般是192.168.x.0具体在虚拟机里执行ip addr就能看到实际网段network: ethernets: ens33: dhcp4: false addresses: [192.168.80.10/24] routes: - to: default via: 192.168.80.2 nameservers: addresses: [192.168.80.2, 8.8.8.8] version: 2然后应用配置sudo netplan apply注意这里route的via填的是VMware NAT网关的IP也就是VMnet8网卡的IP默认是192.168.x.2。如果用的桥接模式网关就要填你家里路由器的地址比如192.168.1.1这个别搞混。再说防火墙。Ubuntu装了ufw之类的防火墙的话需要放行22端口sudo ufw allow 22/tcp sudo ufw enableCentOS系默认firewalldsudo firewall-cmd --permanent --add-port22/tcp sudo firewall-cmd --reload配置完在虚拟机里自查一下ip addr ping 宿主机IP ping 8.8.8.8这三条都通说明虚拟机网络没问题。到这里虚拟机侧的工作就基本完成了剩下的活交给XShell。3. XShell侧配置会话建立与终端体验3.1 新建会话的参数填写与连接流程XShell下载安装我就简单说两句。官网下载个人免费版Home/School填个名字和邮箱下载链接会发到邮箱。安装过程一路Next有个地方可能会被捆绑安装注意勾选去掉即可。装好后打开界面很简洁。新建会话的路径菜单栏的“新建”图标或快捷键AltN然后在弹出的窗口里填关键参数参数项填写内容补充说明名称随便起比如“Ubuntu虚拟机”主要为了会话管理好辨认主机虚拟机静态IP如192.168.80.10这一步填错就直接拒绝端口22除非你改了sshd的端口协议SSH默认就是SSH用户名虚拟机里的登录用户名先别急着填密码第一次建议先填用户填完先不急着点连接到左侧“用户身份验证”那里勾选“使用SSH密钥”或“密码”方式。日常测试直接密码就行生产环境才建议用密钥。然后点连接第一次会弹一个“SSH安全警告”提示远程主机的指纹Key这是正常的选“接受并保存”即可相当于把虚拟机的主机指纹记在本地防止以后中间人伪装。接着输密码连上后你就能看到类似这样的界面Welcome to Ubuntu 22.04.3 LTS rootubuntu:~#看到这个提示符就说明XShell和虚拟机之间的通道已经打通了你现在敲的每条命令实际上都跑在虚拟机里。3.2 中文乱码和字体问题怎么处理这是个几乎每个人都会遇到的小坑。你连上虚拟机后执行命令输出中文或者用cat看一个中文配置文件结果满屏是乱码比如这种▒▒▒▒▒▒▒▒▒▒原因很简单——编码不一致。Linux系统默认locale是UTF-8XShell默认传输编码如果不是UTF-8中文自然就乱了。解决办法打开XShell顶部菜单“工具→选项→查看”找到“终端”把编码改成Unicode(UTF-8)或者更直接在当前会话里右键窗口标题栏选择“会话属性”→“终端”→“编码”选“UTF-8”。改完退出重新连接乱码基本就消失。个别老系统比如CentOS 6用的可能是GBK那就把编码改成“Simplified Chinese(GBK)”对症处理。字体也很影响体验。默认字体在中文环境下显示中文比较丑还容易重叠。我的建议是会话属性→外观→字体选“Consolas”或“JetBrains Mono”字号14或15颜色方案选“Linux”或“Solarized”。这样看着舒服很多长时间盯终端也不累。3.3 会话管理、快捷键和日常习惯XShell真正值钱的地方是会话管理。左侧会话栏右键可以新建文件夹把你手头所有的机器分类整理比如开发环境、测试环境、生产环境每个环境里放对应的会话。双击会话直接连不用重输IP和密码密码可以选择保存。几个我几乎每天在用的快捷键值得背下来快捷键作用AltN新建会话CtrlAltN快速建立连接输入IP直接连CtrlShiftC / CtrlShiftV复制/粘贴注意和普通终端有区别CtrlTab切换多个打开的会话标签Alt数字快速切换对应标签页还有一个很容易被忽略的习惯XShell里敲命令想回到上一行或者上一条命令直接用↑方向键就行这是终端历史记录不是XShell特有的在命令行里想改词首按CtrlA到行首CtrlE到行尾。有人问我“linux终端怎么换到上一行”其实就是按↑键或者用快捷键history如果你觉得翻历史不方便直接在终端输history就能看到所有敲过的命令配合!命令号还能重复执行。另外一个建议是多用“快速命令”功能。XShell有个“快速命令”按钮可以把常用命令存成按钮点一下就执行。比如重启服务、看日志、磁盘占用存成按钮后就不用重复敲了这种高频操作节省的时间非常可观。4. 实测排错连接失败的六种典型场景连接失败大概是这个主题下大家遇到最多的问题了我把实际排查过程中最常踩的坑整理出来按现象分类直接给结论。4.1 现象一提示“远程计算机拒绝连接”这个是最常见的错误XShell弹窗会显示类似“无法连接远程主机远程系统拒绝连接”或“Connection refused”。它的本质是TCP层都没建立成功原因基本三种虚拟机里根本没装/没启动SSH服务装了但监听在非22端口虚拟机防火墙把端口挡了。排错顺序先在虚拟机里执行netstat -tlnp | grep sshd看sshd有没有监听在0.0.0.0:22上如果有说明服务正常。在宿主机CMD里执行ping 虚拟机IP通不通。不通说明网络层就断了回虚拟机检查IP、网卡模式。在宿主机CMD里执行telnet 虚拟机IP 22如果连接被拒绝那问题基本就在防火墙或SSH服务本身。反复出现这种问题我建议养成一个条件反射看到拒绝连接先回答一个问题——“SSH服务到底有没有监听在22端口”这个答案占了80%以上的根因。4.2 现象二提示“认证失败”或一直要密码能弹出密码框说明IP和端口对了是走到了最后一步但密码不对或者权限受限。常见原因用户名打错密码记错Linux密码不分大小写问题不大但要注意是否开了大写锁定root用户被禁止直接登录。针对最后一条如果你确定密码正确但root连不上编辑虚拟机里的sshd_configsudo vi /etc/ssh/sshd_config # 找到这一行改成 PermitRootLogin yes # 重启服务 sudo systemctl restart sshd还有一个原因容易忽略虚拟机系统时间不对。SSH认证对时间敏感如果虚拟机时间比现实时间差太远某些认证方式会失败。先date看一下不对就sudo timedatectl set-ntp true4.3 现象三提示“正在加密远程连接”后卡住XShell会显示“正在加密远程连接…”然后一直转圈最后超时。这个现象通常是网络丢包或防火墙策略把长连接切断了。桥接模式下最容易出现因为宿主机无线网卡频繁切换或者路由器开了AP隔离。解决思路先把XShell的连接超时时间调大会话属性→连接→“连接超时”改成30秒以上。检查宿主机和虚拟机的网关是否一致。最常见的问题是虚拟机配了错误网关能通局域网但出不去外面的包进不来。如果用的是无线网络建议把虚拟机网络模式从桥接改成NAT。NAT模式下虚拟机和宿主机之间的通道是内部虚拟网卡不受外部WiFi影响稳定得多。4.4 现象四能连上但操作卡顿、敲命令响应慢连上了不代表万事大吉。如果敲一个字符要等一秒才有回显那基本上说明网络延迟高或DNS解析拖慢了命令处理。先检查虚拟机/etc/ssh/sshd_config里的UseDNS默认yes的话建议改成no让sshd不用反向解析客户端域名然后重启服务。另外还有一类卡顿是XShell自身渲染问题特别是当你开启了“新式终端”里的一些高级效果比如透明度、反锯齿在虚拟机负载高的场景会觉得卡。关掉会话属性里的“高级→功能→启用新式终端模拟”试试立竿见影。4.5 现象五连上了但中文乱码这个前面细讲过了核心就一句话XShell的终端编码和Linux系统locale保持一致。排查时在虚拟里执行locale看看输出是不是UTF-8。如果查出的结果是POSIX或C需要显式改一下export LANGen_US.UTF-8 # 或者永久写进~/.bashrc echo export LANGen_US.UTF-8 ~/.bashrc4.6 现象六XShell安装失败或打开没界面有用户在装XShell时遇到安装失败常见原因被杀毒软件拦截下载的不是官方包以前装过旧版没卸载干净。我的建议是去官网下载最新版安装时暂时退出杀毒软件实时监控如果提示权限就右键“以管理员身份运行”。如果安装完成后双击没反应首先看进程管理器里有没有XShell进程在后台有的话先结束进程再检查是不是显卡兼容问题——Windows上遇到过个别版本和老的Intel核显驱动冲突更新显卡驱动或者右键兼容性设为“Windows 7兼容模式”就能解决。最后放一个总的排查速查表现象优先检查处理动作拒绝连接SSH服务是否监听systemctl start sshd拒绝连接IP/端口是否正确ip addr、netstat超时无响应网络模式是否被AP隔离改NAT认证失败用户名密码错误用有权限的用户登录认证失败root被禁止sshd_config改PermitRootLogin中文乱码编码不一致XShell改为UTF-8命令卡顿UseDNS或网络延迟改UseDNS no5. 从虚拟机到远程开发环境延伸玩法连接只是一个开始真正让这台虚拟机变成生产力工具还需要打通几个周边环节。5.1 用XShell配合Xmanager/Xftp传文件XShell默认只有命令行想要图形化传输文件可以用同门的Xftp。通常在XShell工具栏上有个“新建文件传输”图标点一下就能呼出Xftp直接以当前会话的账号连接到虚拟机把本地文件拖进去就上传完成了。没有Xftp也没关系直接用命令行scp即可XShell本身就是个高效的Shellscp /本地路径/文件名 root虚拟机IP:/目标路径或者从虚拟机下拉文件到本地方向反过来scp root虚拟机IP:/远程路径 /本地路径日常我传jar包、配置文件都是这么干的不用虚拟机自带的图形界面快得多。5.2 VS Code Remote-SSH接管远程开发如果你的日常是写代码强烈建议把VS Code的Remote-SSH插件用起来。这个插件的原理是在VS Code里基于SSH通道把本地的编辑器变成一个远程机器的前端代码在虚拟机里跑编译、调试都在虚拟机里但编辑体验是本地化的非常舒服。配置方法VS Code装“Remote - SSH”扩展。CtrlShiftP输入Remote-SSH: Connect to Host。输入用户名的IP回车选择配置文件一般~/.ssh/config。它会自动连上虚拟机并让你打开文件夹之后再打开文件、终端都直接操作远程机器。它和XShell不冲突日常命令我还在XShell里敲写代码就切到VS Code两个工具各干各的。如果VS Code终端里中文乱码也可以按前面说的在设置里搜“terminal.integrated.profiles.linux”配置好locale。5.3 数据库客户端直连虚拟机内的数据库再往外扩展一步虚拟机里装了MySQL或PostgreSQL以后Windows上的数据库工具比如Navicat、PL/SQL Developer想直接连进虚拟机里的数据库要改的不是SSH而是数据库的监听端口和权限。以MySQL为例# 登录mysql mysql -uroot -p # 允许远程连接 GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 你的密码; FLUSH PRIVILEGES; # 改配置文件让mysqld监听所有地址 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # bind-address 127.0.0.1 改成 0.0.0.0改完记得重启mysql服务然后在Windows上用Navicat填虚拟机IP、3306端口就能直连了。这里常见的坑云安全组或VMware的防火墙没放行3306MySQL密码策略太强导致密码设置不通过还有如果虚拟机上面跑着Docker映射了端口端口冲突也会导致连不上。建议在虚拟机上用netstat确认数据库端口已经监听在0.0.0.0上再排查外部网络。5.4 我的日常操作习惯我自己用得最多的习惯是每次搭建新环境时都会先在XShell里把会话文件夹规划好。比如我手头有三台虚拟机一台跑数据库一台跑后端服务一台跑前端构建我在会话列表里建了三个文件夹每个文件夹里对应具体的IP。存好密码后以后重装系统、换电脑只要把XShell导出的会话包文件→导出会话导入新电脑所有连接配置直接恢复不用再记IP。另一个习惯是善用XShell的日志功能。会话属性里有“日志”选项卡可以把当前会话的所有输入输出记录到文件里。排查线上问题的时候回头翻日志比回忆到底敲了什么命令要可靠得多。这个大部分人都没开过建议打开。如果你以后要面对几十台机器光靠XShell的会话列表也不够了那就该考虑配置管理工具比如Ansible去批量分发密钥和管理配置把SSH当底层的通道来用。但那已经是另一套玩法了。我从第一次用命令行连虚拟机到现在踩过最多的坑还是IP配错和防火墙拦截。说句实在话XShell这个工具本身没什么学习成本真正的成本在于理解“为什么连不上”——这个思路一旦建立起来以后不管你换什么工具、连什么机器都不会再被这个问题卡住。希望这篇内容能帮你少走几步弯路把这台虚拟机真正变成顺手的工具。
返回列表