FinalShell 远程连接 VMware Linux 虚拟机 SSH 配置指南
2026/9/17 4:18:09 网站建设 项目流程

虚拟机装好那一刻挺有成就感,可真正进去干活才发现,VMware 那个控制台窗口实在不适合长时间敲命令:复制粘贴要绕一圈,窗口不能随手缩放,开不了多标签,传个文件还得折腾共享文件夹或者临时搭个服务。FinalShell、VMware、Linux、虚拟机这四个词凑到一起,要解决的其实是一个非常具体的问题——把虚拟机从"隔着玻璃看"变成"直接走进去"。做法就是让 Linux 虚拟机跑起 SSH 服务,再让宿主机上的 FinalShell 通过 SSH 连上去,之后命令行、文件传输、系统监控全在同一个界面里完成。这篇内容面向的是刚装完虚拟机还在用控制台敲字的新手,也面向那些装了十几台虚拟机、每次都要翻笔记回忆网络配置的老手。下面会把网络模式怎么选、SSH 怎么开、连接参数怎么填、连不上怎么查这一整条链路拆开讲,顺带把我在这个过程里踩过的坑都摊开说清楚。

1. 动手前先想明白:这套组合到底在解决什么问题

1.1 为什么用 FinalShell 而不是继续用 VMware 控制台

VMware 的控制台窗口本质上是一台"虚拟显示器 + 虚拟键盘",它传递的是画面和按键,不是数据流。这就带来几个绕不开的麻烦:虚拟机里的中文输入经常和宿主机打架,需要按 Ctrl+Alt 才能把鼠标"释放"回宿主机;窗口分辨率跟着虚拟机调,字体要么糊要么小;最要命的是复制粘贴,长命令稍微多几行就得手打。而且控制台窗口一关,如果没配置好后台运行,正在跑的任务可能就跟着受影响。

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 show

ip -4 addr show会列出所有网卡的 IPv4 地址,找到那个ens33或者eth0下面的inet行,那就是你要连的地址。如果看到的是127.0.0.1或者压根没有 inet 行,说明网卡没拿到地址,这时候先检查 VMware 的网络设置,别急着折腾 SSH。

拿到地址之后,在虚拟机上 ping 一下网关,验证虚拟网络本身是通的:

ping -c 4 192.168.10.2

NAT 模式下网关一般是网段的第二个地址,.2结尾。同时回到 Windows 宿主机,打开命令提示符或者 PowerShell:

ipconfig | findstr /i "VMnet8" ping 192.168.10.128

VMnet8 那块网卡的地址通常是192.168.10.1。宿主机能 ping 通虚拟机,说明链路已经打通了,剩下的就是 SSH 服务的事。如果这一步就不通,先去看 VMware 菜单里的"编辑 → 虚拟网络编辑器",确认 VMnet8 存在、NAT 模式、子网 IP 没被改乱,还要打开 Windows 的"服务"面板检查VMware NAT ServiceVMware 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 ssh

RHEL 系的 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 系用 firewalld:

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

Ubuntu 用 ufw:

sudo 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 user@192.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 中文乱码和编码设置

乱码分几种情况,得分清是哪一层的问题。

第一种是终端显示乱码,比如中文变成问号或者方块。这通常是字符编码不匹配。先在虚拟机上确认 locale:

locale

如果LANGPOSIX或者空的,可以设置成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.gz,tar 格式对编码的处理宽容得多,这也是我现在跟人交换文件时优先选 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 规划和密钥登录这两件事在第一次配置时一次性做好,后面能省掉的重复劳动远超你想象。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询