FinalShell 远程连接 VMware Linux 虚拟机 SSH 配置指南
虚拟机装好那一刻挺有成就感可真正进去干活才发现VMware 那个控制台窗口实在不适合长时间敲命令复制粘贴要绕一圈窗口不能随手缩放开不了多标签传个文件还得折腾共享文件夹或者临时搭个服务。FinalShell、VMware、Linux、虚拟机这四个词凑到一起要解决的其实是一个非常具体的问题——把虚拟机从隔着玻璃看变成直接走进去。做法就是让 Linux 虚拟机跑起 SSH 服务再让宿主机上的 FinalShell 通过 SSH 连上去之后命令行、文件传输、系统监控全在同一个界面里完成。这篇内容面向的是刚装完虚拟机还在用控制台敲字的新手也面向那些装了十几台虚拟机、每次都要翻笔记回忆网络配置的老手。下面会把网络模式怎么选、SSH 怎么开、连接参数怎么填、连不上怎么查这一整条链路拆开讲顺带把我在这个过程里踩过的坑都摊开说清楚。1. 动手前先想明白这套组合到底在解决什么问题1.1 为什么用 FinalShell 而不是继续用 VMware 控制台VMware 的控制台窗口本质上是一台虚拟显示器 虚拟键盘它传递的是画面和按键不是数据流。这就带来几个绕不开的麻烦虚拟机里的中文输入经常和宿主机打架需要按 CtrlAlt 才能把鼠标释放回宿主机窗口分辨率跟着虚拟机调字体要么糊要么小最要命的是复制粘贴长命令稍微多几行就得手打。而且控制台窗口一关如果没配置好后台运行正在跑的任务可能就跟着受影响。SSH 就完全不一样了。它是一条建立在 TCP 之上的加密通道宿主机把命令字节流发过去虚拟机执行完把输出字节流送回来跟画面无关。这意味着你可以在宿主机上任意调整字号、主题、透明度可以开十个标签页分别连十台机器可以把本地文件直接拖进去。FinalShell 就是把这个过程包装成了一个带图形界面的客户端把 SSH、SFTP、系统监控、快捷命令这些东西整合到一个窗口里对刚从控制台迁移过来的人来说学习成本几乎为零。1.2 FinalShell 的定位以及它和其他方案的区别市面上的 SSH 客户端不少有纯命令行的 OpenSSH有老牌的 PuTTY也有跨平台的终端工具。FinalShell 的特点是把运维日常需要的东西都塞进一个界面左边是连接管理树中间是终端下面是文件管理右边是 CPU、内存、网络、磁盘的实时曲线。它还自带快捷命令面板和批量执行功能多台虚拟机来回切的时候特别省事。需要说清楚的几点一是 FinalShell 有免费版和专业版之分免费版已经覆盖 SSH 连接、SFTP 文件管理、监控面板、快捷命令这些日常高频功能个人学习和小规模测试完全够用二是如果确实需要专业版的会话同步、更多标签管理等特性请通过官方渠道获取授权网上流传的那些所谓激活文件、注册码来源不明很可能捆绑了别的程序为了省一点钱把宿主机环境搞脏并不划算。工具本身是拿来干活的稳定可靠比什么都重要。1.3 连接的本质一条从宿主机打到虚拟机的 TCP 通道很多人连不上的根本原因是没想清楚数据包到底怎么走。宿主机上的 FinalShell 要连192.168.x.x的 22 端口这个包先出门到宿主机的虚拟网卡进入 VMware 提供的虚拟交换机再被转到虚拟机的虚拟网卡上最后交给虚拟机里的 sshd 进程。这条链路上任何一环断了连接都会失败。所以排查思路永远是自下而上的宿主机的虚拟网卡在不在、虚拟机的 IP 对不对、两边能不能 ping 通、22 端口有没有在监听、防火墙放没放行、账号密码对不对。先把这条链路在脑子里画出来后面遇到任何报错都不会慌因为你知道该从哪一层开始查。2. 开工之前把虚拟机这边的底子打好2.1 网络模式怎么选NAT、桥接、仅主机这是整套流程里最关键的一个决定选错了后面所有步骤都白费。NAT 模式是新手最省心的选择。虚拟机通过宿主机的网络出去宿主机和虚拟机之间走的是 VMware 创建的一块虚拟网卡通常是 VMnet8虚拟机拿到的是一个独立网段的地址比如192.168.10.128。宿主机可以直接连虚拟机的 22 端口虚拟机也能正常上网装软件而且不受你所在办公网络、校园网络策略的影响IP 段是自己说了算的。我个人给初学者配置时一律推荐 NAT。桥接模式是把虚拟机直接插到宿主机所在的物理网络里虚拟机从路由器拿一个和宿主机同网段的地址。好处是局域网里其他设备也能直接访问它适合做小范围服务测试坏处是 IP 由路由器分配可能变而且在公司或学校网络里可能被策略限制甚至拿到一个无法互通的地址。仅主机模式只保留宿主机和虚拟机之间的通道虚拟机出不了外网。做隔离测试有用但你装个 JDK 都下不下来日常基本不选。选择逻辑很直白日常学习开发用 NAT需要被别人访问用桥接需要完全隔离用仅主机。这篇文章后面的所有例子都按 NAT 来写网段假设是192.168.10.0/24。2.2 确认 Linux 的 IP、网卡状态和基础连通性进虚拟机之后第一件事是确认自己拿到了什么地址。用下面几条命令都行ip -4 addr show hostname -I nmcli -t -f NAME,DEVICE,STATE connection showip -4 addr show会列出所有网卡的 IPv4 地址找到那个ens33或者eth0下面的inet行那就是你要连的地址。如果看到的是127.0.0.1或者压根没有 inet 行说明网卡没拿到地址这时候先检查 VMware 的网络设置别急着折腾 SSH。拿到地址之后在虚拟机上 ping 一下网关验证虚拟网络本身是通的ping -c 4 192.168.10.2NAT 模式下网关一般是网段的第二个地址.2结尾。同时回到 Windows 宿主机打开命令提示符或者 PowerShellipconfig | findstr /i VMnet8 ping 192.168.10.128VMnet8 那块网卡的地址通常是192.168.10.1。宿主机能 ping 通虚拟机说明链路已经打通了剩下的就是 SSH 服务的事。如果这一步就不通先去看 VMware 菜单里的编辑 → 虚拟网络编辑器确认 VMnet8 存在、NAT 模式、子网 IP 没被改乱还要打开 Windows 的服务面板检查VMware NAT Service和VMware DHCP Service这两个服务是不是处于运行状态——它们被某些系统优化软件关掉的情况我见过不止一次。提示虚拟机的 IP 默认是 DHCP 动态分配的重启后可能变化导致快捷方式突然失效。长期使用建议改成静态 IP或者在 VMware 的 DHCP 设置里给虚拟机的 MAC 地址绑定固定地址。2.3 把 SSH 服务装好、开好、放行好不同发行版装 SSH 服务的方式略有差别但思路一样安装、启动、设开机自启、放行防火墙端口。Debian 系的 Ubuntu 上sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh sudo systemctl status sshRHEL 系的 Rocky Linux、AlmaLinux、CentOS Stream 上sudo dnf install -y openssh-server sudo systemctl enable --now sshd sudo systemctl status sshd服务起来之后用ss确认 22 端口真的在监听ss -tlnp | grep :22你应该看到类似LISTEN 0 128 0.0.0.0:22的输出。如果只监听127.0.0.1:22说明配置里绑定了本地回环外面的连接自然进不来。防火墙是第二道坎。RHEL 系用 firewalldsudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --reload sudo firewall-cmd --list-servicesUbuntu 用 ufwsudo ufw status sudo ufw allow 22/tcp还有一种情况是 firewalld 或 ufw 根本没启用但你装了别的安全软件或者云主机面板这种就具体问题具体看。SELinux 一般不会拦住默认端口的 SSH但如果你把 sshd 改到了非标准端口就需要额外处理端口标签新手建议先老老实实用 22 端口把链路跑通了再折腾。2.4 先打快照再动手这一步很多人觉得多余但我强烈建议养成习惯。在开始改网络配置、改 sshd_config 之前先在 VMware 里点一下虚拟机 → 快照 → 拍摄快照起个名字叫网络与SSH配置前。理由很现实改网络配置是最容易把虚拟机搞到完全连不上的一类操作。静态 IP 写错网关、DNS 配错、sshd_config 里手滑删了一行都可能让你既连不上 SSH 也没法正常上网而 VMware 控制台还能进去救但修起来很烦。有了快照出问题一键回滚两分钟回到干净状态心态完全不一样。我给自己的规矩是任何涉及网络、认证、系统服务的改动动手前必打快照。3. FinalShell 的安装与第一次连接3.1 获取、安装与版本选择安装包从官方渠道下载注意认准域名别在第三方下载站随便点这类站点重打包塞东西的情况很常见。Windows 版是标准的安装向导一路下一步即可安装路径建议不要放在中文目录下有些老版本对中文路径处理不太好。第一次启动界面是空的左边是连接管理区域需要你自己新建。版本方面再强调一次免费版支持 SSH 终端、SFTP 文件管理、服务器监控、快捷命令日常学习完全够。专业版提供更多会话管理能力和同步特性。如果确实需要走官方渠道付费获取不要相信任何一键激活注册机之类的说法这类东西的风险完全不可控。3.2 新建连接每个参数都要讲清楚点击新建连接图标弹出的表单里有几个字段逐个说明字段填什么说明名称自定义比如rocky-test只是显示名随便起但要能让你一眼认出是哪台机器主机192.168.10.128虚拟机的 IP就是前面ip -4 addr查到的那个端口22除非改过 sshd 配置否则就是 22认证方式密码 / 密钥先用密码跑通之后再换密钥用户名你创建的普通用户不建议一上来就用 root密码对应用户的登录密码区分大小写注意输入法状态这里有两个高频错误值得单独说。第一个是用户名填成了root但虚拟机里 root 登录被禁用这是很多发行版的默认安全策略报错是认证失败而不是拒绝连接容易被误判成密码错了。想用 root 登录就得去改/etc/ssh/sshd_config里的PermitRootLogin但我更建议先用普通用户连上需要提权时用sudo安全且不用改配置。第二个是在中文输入法状态下输密码尤其是密码里带数字或符号的时候打出来的是全角字符肉眼几乎看不出来但认证一定失败。输密码前把输入法切回英文这个坑我见过太多人踩。3.3 首次连接的指纹确认点确定连接后第一次会弹出一个窗口显示服务器的公钥指纹问你是否信任。这是 SSH 的正常机制用来防止中间人攻击。虚拟机的场景下这就是你自己的机器选择接受并保存即可后续再连就不会提示了。但如果某天你突然又收到指纹变化的提示而且你没有重装过这台虚拟机就要留个心眼——可能是虚拟机的 SSH 主机密钥被重新生成了比如克隆虚拟机时没有重新生成也可能是网络环境里真的出了别的东西。虚拟机克隆的场景非常常见克隆出来的机器保留了母机的 SSH 主机密钥导致指纹冲突这时候登录会直接报错拒绝。解决办法是删掉虚拟机上/etc/ssh/ssh_host_*这几个密钥文件然后sudo ssh-keygen -A重新生成再重启 sshd 服务。3.4 主界面几个真正高频的功能区连上之后的界面大致分四块我按使用频率排一下终端区是主战场支持多标签可以复制粘贴、翻页、搜索历史输出。右键菜单里的发送命令到所有会话是个隐藏神器多台虚拟机同时执行同一条命令时非常好用。文件管理区默认展开在下方其实就是一个图形化的 SFTP 客户端支持拖拽上传下载、双击编辑远程文件、右键改权限。日常改配置文件用这个比在终端里vi快得多。监控面板在右侧实时显示 CPU、内存、磁盘、网络速率。虚拟机不给它分配太多资源的时候这个面板能帮你第一时间发现内存不够或者磁盘写满。快捷命令面板可以自己维护一份常用命令清单点一下就执行。我自己那份里长期放着查看端口占用、重启服务、查看日志尾部这几条用久了能省下大量重复敲键盘的时间。4. 把它用顺手几个高频场景4.1 文件传输从宿主机到虚拟机最直接的用法就是在文件管理区里拖拽。宿主机上下载好的jdk-17_linux-x64_bin.tar.gz直接从资源管理器拖到 FinalShell 的文件区松开就开始传进度条、速度、剩余时间都有显示。传大文件时这个体验比用共享文件夹或者临时开个 HTTP 服务好太多。传输路径要注意两点一是默认进入的是当前用户的家目录往/usr/local这类系统目录里写需要权限先传到/tmp再用sudo mv挪过去更稳妥二是上传 tar.gz 之后记得用tar -tzf先看一眼包里有什么确认来源可靠再解压养成这个习惯没坏处。解压并配置 Java 环境的完整流程大致是这样cd /tmp tar -xzf jdk-17_linux-x64_bin.tar.gz sudo mv jdk-17.0.x /usr/local/ sudo tee /etc/profile.d/java.sh EOF export JAVA_HOME/usr/local/jdk-17.0.x export PATH$JAVA_HOME/bin:$PATH EOF source /etc/profile.d/java.sh java -version用/etc/profile.d/下的独立脚本而不是直接改/etc/profile好处是干净、可回滚将来卸载只删一个文件就行。这是我在多台机器上统一环境时的固定做法。4.2 快捷命令与多会话批量执行快捷命令的价值在于把想一下再敲变成点一下。比如查端口占用、看服务状态、追日志这几件事一天要做几十次做成按钮后每条省三五秒一天能省出十几分钟。我的建议是刚开始别贪多先加三五条自己真的高频使用的用着用着自然知道该加什么。批量执行适合一次配多台的场景。比如三台测试机都要安装同一个依赖可以在 FinalShell 里把三个会话同时打开用发送命令到所有会话功能敲一次命令三台一起执行输出分别显示在各自终端里。省事但也要谨慎——涉及删除、覆盖这类破坏性命令时务必先确认列表里是不是混进了不该连的机器。我给生产性质的环境单独建了分组从不和测试机放一起批量操作。4.3 端口转发在宿主机浏览器里打开虚拟机里的网站这是个收益极高的技巧。假设你在虚拟机里跑了一个服务监听127.0.0.1:8080只能虚拟机自己访问。你想在宿主机的浏览器里打开它可以用 SSH 本地端口转发。FinalShell 的隧道功能在不同版本里入口略有差异一般在连接的属性设置里可以配置本地端口到远程地址的映射。如果找不到对应入口用系统自带的 ssh 命令也一样ssh -L 18080:127.0.0.1:8080 user192.168.10.128 -N这条命令的意思是把宿主机本地的 18080 端口转发到虚拟机上能访问到的127.0.0.1:8080。执行后保持窗口开着然后在宿主机浏览器访问http://127.0.0.1:18080就能看到虚拟机里的页面。-N表示不执行远程命令只做转发。为什么这个方式好用因为它不需要改虚拟机里服务的监听地址也不需要在虚拟机上开额外的防火墙端口整条转发通道本身就走加密的 SSH 连接。开发调试阶段把服务绑在127.0.0.1上、通过转发访问比直接监听0.0.0.0暴露给整个局域网安全得多。4.4 中文乱码和编码设置乱码分几种情况得分清是哪一层的问题。第一种是终端显示乱码比如中文变成问号或者方块。这通常是字符编码不匹配。先在虚拟机上确认 localelocale如果LANG是POSIX或者空的可以设置成en_US.UTF-8或者zh_CN.UTF-8。同时在 FinalShell 的会话属性里把编码明确设为 UTF-8两边一致就不会乱。第二种是解压 Windows 传过来的 zip 包时文件名乱码这个特别常见。原因是 zip 包里的中文文件名用 GBK 编码存储而 Linux 默认按 UTF-8 解析。处理方式是用 unzip 时指定编码unzip -O cp936 package.zip -d ./target如果 unzip 版本不支持-O参数可以装p7zip来处理或者干脆在 Windows 侧打包成 tar.gztar 格式对编码的处理宽容得多这也是我现在跟人交换文件时优先选 tar.gz 的原因。5. 连不上怎么办一套从下往上的排查方法5.1 固定的排查顺序连接失败时不要乱试按这个顺序走一遍九成问题能在三分钟内定位第一步虚拟机内执行ip -4 addr show确认有 IP 且不是127.0.0.1。第二步虚拟机 ping 网关宿主机 ping 虚拟机确认链路通。第三步虚拟机执行ss -tlnp | grep :22确认 sshd 在监听。第四步检查虚拟机防火墙是否放行 22。第五步检查账号密码、用户名、root 登录策略。第六步检查宿主机侧有没有别的因素干扰比如同网段冲突。5.2 常见报错速查表报错现象大概率原因处理方式连接超时 / Connection timed out网络不通、IP 变了、虚拟机没开机、VMware NAT 服务未运行先在宿主机 ping 虚拟机检查虚拟网络编辑器和 Windows 服务Connection refusedsshd 没启动、端口不是 22虚拟机内systemctl status sshd用ss确认端口认证失败 / Permission denied密码错、用户名错、root 被禁用、输入法全角确认用户名和密码改用普通用户切英文输入法一直提示指纹不匹配且无法登录克隆虚拟机导致主机密钥冲突删除/etc/ssh/ssh_host_*后ssh-keygen -A重新生成能连上但很卡、频繁断开虚拟机资源不足、宿主机负载高、网络模式为 NAT 且宿主机网络不稳增加虚拟机内存和 CPU查看 FinalShell 监控面板某天突然连不上之前一直正常DHCP 重新分配了 IP或快照回滚导致配置变化检查当前 IP改静态地址或重新绑定5.3 几个容易被误判的坑网段冲突是个很隐蔽的问题。假设你公司网络恰好用的是192.168.10.0/24而 VMware 的 NAT 默认也分了这个段宿主机就会同时存在两条指向同一网段的路由结果是访问虚拟机时包被发到了公司网络上去永远连不上。表现是宿主机 ping 虚拟机大概率不通但虚拟机自己上网一切正常。解决办法是在虚拟网络编辑器里把 VMnet8 的子网改成别的段比如192.168.88.0/24虚拟机重新取地址后再连。宿主机上装了其他虚拟化软件比如另一套虚拟化平台或者容器工具的虚拟网卡也可能占用相似网段。排查方法是在宿主机上看路由表和所有网卡的地址route print或者Get-NetIPAddress看看有没有多块网卡处在同一网段。改完配置忘记重启服务这个属于纯粹的操作疏漏但发生频率极高。改完/etc/ssh/sshd_config一定要sudo systemctl restart sshd改完网络配置要重启 NetworkManager 或者对应的连接。改完不生效然后花半小时怀疑人生这种事谁都干过。虚拟机的网卡在 VMware 里被设置成了未连接。虚拟机设置里那个已连接和启动时连接的勾选状态有时候会被误操作取消掉表现就是虚拟机完全没有网络。这种情况不需要改任何配置勾回来就行。6. 长期使用的几个习惯6.1 用密钥登录代替密码密码登录在本地虚拟机场景下够用但换成密钥更省事也更安全。流程是在 FinalShell 里生成一对密钥把公钥追加到虚拟机的~/.ssh/authorized_keys里权限设成600目录设成700然后在连接设置里改用密钥认证。mkdir -p ~/.ssh chmod 700 ~/.ssh cat ~/.ssh/authorized_keys EOF 粘贴你的公钥内容 EOF chmod 600 ~/.ssh/authorized_keys之后登录就不再输密码脚本化操作也方便。权限设置这一步如果漏了SSH 会直接拒绝使用这个密钥而且报错信息往往不够明确很多人卡在这里。6.2 快照、克隆与资源分配虚拟机用久了会积累一堆东西磁盘越来越满。我的做法是在几个关键节点打快照——系统装完、环境配好、重要变更前。快照不要留太多一方面占磁盘另一方面快照链太长会影响性能用完确认没问题就合并掉。克隆虚拟机做实验很方便但克隆完第一件事就是重新生成 SSH 主机密钥否则指纹冲突。另外克隆出来的机器如果保留了静态 IP记得改掉否则两台机器抢同一个地址表现是时通时不通非常难查。资源分配上跑 Linux 命令行环境的虚拟机给 2 核 CPU、2 到 4 GB 内存基本够用磁盘给 40 GB 起步别抠。内存给太小的后果是编译或者装包时频繁触发交换操作体感极差而宿主机一般也不缺这几 GB。6.3 一些零碎但管用的习惯给虚拟机起有意义的名称FinalShell 里的连接名跟虚拟机名保持一致久了以后你根本记不住192.168.10.133是哪台。把虚拟机的静态 IP 规划成一个小表格记在笔记里哪台是数据库、哪台是应用、哪台是纯净测试机一眼可查。定期在宿主机上导出 FinalShell 的连接配置换电脑或者重装系统时直接导入不用一台台重新填参数。养成改配置前先cp一份备份的习惯sshd_config.bak这种文件不占地方关键时刻能救你一次。用久了会发现本地虚拟机加 SSH 客户端这个组合的价值不在于某个单独的功能有多强而在于它把折腾环境这件事的成本压到了很低。想试一个新的发行版克隆一台、改个 IP、连上去五分钟就能开始配错了回滚快照重来不用重装系统。我在自己的工作机上长期挂着四五台这样的虚拟机分别对应不同的实验需求切换就是点一下标签页的事。真要给一句建议的话把静态 IP 规划和密钥登录这两件事在第一次配置时一次性做好后面能省掉的重复劳动远超你想象。