
1. 项目概述为什么我们需要远程连接VMware虚拟机如果你和我一样经常在本地电脑上用VMware Workstation或VMware Player鼓捣Linux虚拟机那你肯定遇到过这样的场景在VMware窗口和本地桌面之间来回切换复制粘贴文本不方便虚拟机窗口太小看着费劲或者想用本地更强大的编辑器比如VSCode直接编辑虚拟机里的代码文件。这时候一个稳定、高效的远程连接方案就显得至关重要了。它能让虚拟机的操作体验从“隔着一层玻璃”变成“仿佛就在本地”极大地提升开发和学习的效率。简单来说远程连接VMware中的Linux虚拟机核心目标就是摆脱VMware自带的图形化控制台VMware Console的束缚通过网络协议主要是SSH从你本地操作系统Windows/macOS上的终端或专业工具直接访问并操作虚拟机内部的命令行界面或桌面环境。这不仅仅是换个操作窗口它意味着你可以获得更好的终端体验如分屏、主题、历史命令搜索、实现本地与虚拟机之间无缝的文件传输甚至能利用本地IDE的远程开发功能。对于运维、开发和学习者而言这是从“虚拟机使用者”进阶到“高效系统管理者”的必备技能。2. 核心方案选型与原理浅析实现远程连接主流且推荐的方式是SSHSecure Shell。为什么是SSH而不是其他首先SSH是Linux/Unix世界的标准远程管理协议加密、稳定、资源占用极低。其次VMware虚拟机默认提供了几种网络连接模式为SSH连接铺平了道路。我们需要理解虚拟机网络是如何“透”出来的。2.1 虚拟机网络模式选择桥接 vs NAT这是决定你能否从宿主机你本身的电脑连接到虚拟机的第一步。VMware通常提供几种网络模式最常用的是“桥接模式Bridged”和“NAT模式”。桥接模式Bridged虚拟机会被虚拟交换机分配到和你宿主机同一个物理局域网中的一个独立IP地址。相当于你的物理网络上多了一台“真实”的电脑。虚拟机可以和宿主机、同一局域网下的其他设备包括你的路由器、其他电脑直接通信。这种模式下获取虚拟机IP地址非常直观通常通过ifconfig或ip addr命令查看远程连接也最直接。但前提是你的物理网络环境允许新增设备比如公司网络可能有MAC地址绑定等限制。NAT模式Network Address Translation这是VMware默认且最常用的模式。VMware会为宿主机虚拟一个NAT设备和一个虚拟DHCP服务器通常是VMnet8网卡。虚拟机处于一个独立的私有子网中例如192.168.xxx.xxx通过NAT共享宿主机的IP地址访问外网。宿主机和虚拟机之间可以互相通信但局域网内的其他设备默认无法直接访问虚拟机。对于“宿主机远程连接虚拟机”这个场景NAT模式完全够用且更安全、配置更简单。注意如果你的需求仅限于从宿主机连接虚拟机NAT模式是首选。它避免了桥接模式可能遇到的网络冲突或权限问题。本文后续操作也主要基于NAT模式展开。2.2 SSH服务虚拟机的“远程访问门户”光有网络通路还不够虚拟机内部必须运行一个“接待员”——SSH服务端。最常见的实现是openssh-server。安装并启动它就等于在虚拟机的22号端口默认打开了一个安全的远程登录入口。我们后续的所有连接工具FinalShell、系统终端、VSCode等本质上都是SSH客户端它们通过这个入口与虚拟机交互。2.3 连接工具从终端到图形化客户端系统原生终端/命令提示符/PowerShell最纯粹的方式。在Windows上你可以使用内置的OpenSSH客户端Win10 1809后版本自带或PuTTY在macOS或Linux宿主机上直接使用终端ssh命令。这种方式轻量、直接适合快速登录和执行命令。FinalShell一个功能强大的国产SSH客户端集成了终端、SFTP文件传输、服务器监控于一体。它的优势在于图形化操作友好管理多台服务器方便文件拖拽传输直观特别适合初学者和日常运维。VSCode Remote - SSH开发者的神器。通过安装Remote Development扩展包你可以用本地的VSCode直接打开虚拟机上的文件夹使用本地的VSCode界面和插件来编辑、运行、调试虚拟机中的代码体验如同在本地开发一样流畅。我们的实操将覆盖从基础的网络配置、SSH服务安装到使用FinalShell和系统终端进行连接的全过程。3. 环境准备与虚拟机内部配置在开始远程连接之前我们需要确保虚拟机本身已经做好了“被连接”的准备。假设你已经安装好了一个Linux虚拟机如Ubuntu, CentOS等。3.1 步骤一确认虚拟机网络模式并获取IP地址首先关闭虚拟机在VMware的虚拟机设置中确认“网络适配器”选择的是“NAT模式”。然后启动虚拟机并登录。关键操作获取虚拟机的IP地址。在虚拟机内部打开终端输入以下命令# 对于较新的系统推荐 ip addr # 或者使用老命令部分系统可能已不预装 ifconfig在输出信息中找到你的主要网卡通常是eth0或ens33。在NAT模式下你会看到一个类似于192.168.xxx.xxx的IP地址。记下这个地址比如192.168.1.128。这就是你从宿主机访问虚拟机的“门牌号”。实操心得如果ip addr显示的信息太多可以配合grep命令过滤ip addr | grep inet。另外确保这个IP不是127.0.0.1本地环回地址。3.2 步骤二安装并启动SSH服务端大多数Linux发行版默认不安装SSH服务端需要手动安装。对于Ubuntu/Debian系列sudo apt update # 首先更新软件包列表 sudo apt install openssh-server -y安装后SSH服务通常会自动启动。你可以用以下命令检查状态sudo systemctl status ssh如果显示active (running)说明服务已在运行。如果没有使用sudo systemctl start ssh启动它并使用sudo systemctl enable ssh设置开机自启。对于CentOS/RHEL/Fedora系列sudo yum install openssh-server -y # 或者在新版本上使用 dnf # sudo dnf install openssh-server -y同样安装后启动并设置开机自启sudo systemctl start sshd sudo systemctl enable sshd sudo systemctl status sshd3.3 步骤三配置防火墙如有必要如果你的Linux系统开启了防火墙如ufw或firewalld需要放行SSH端口默认22。Ubuntu (使用ufw):sudo ufw allow ssh # 或者 sudo ufw allow 22/tcp sudo ufw enable # 如果还没启用UFWCentOS (使用firewalld):sudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --reload完成以上三步虚拟机端的准备工作就基本完成了。现在它已经是一个可以通过SSH从宿主机进行访问的“服务器”了。4. 从宿主机进行远程连接实战有了虚拟机的IP地址和开启的SSH服务我们就可以从宿主机发起连接了。这里介绍两种最常用的方式。4.1 方法一使用系统自带终端/命令提示符连接这是最基础、最通用的方法不依赖任何第三方图形工具。在Windows宿主机上使用PowerShell或CMD打开PowerShell或命令提示符。输入以下命令将192.168.1.128替换为你的虚拟机IPssh username192.168.1.128例如如果你的虚拟机用户名叫ubuntuIP是192.168.1.128那么命令就是ssh ubuntu192.168.1.128。首次连接时会提示你确认主机的指纹RSA key fingerprint输入yes继续。然后输入该用户在虚拟机上的登录密码。输入时密码不会显示这是正常的。输入正确后你就会看到虚拟机的命令行提示符了这表示连接成功。在macOS或Linux宿主机上 过程完全一样直接在终端中执行ssh username虚拟机IP即可。注意事项如果连接时出现Connection refused或Network is unreachable错误请按以下顺序排查1. 确认虚拟机IP是否正确2. 确认虚拟机SSH服务是否运行systemctl status ssh(d)3. 确认宿主机能ping通虚拟机IP在宿主机终端执行ping 虚拟机IP4. 检查虚拟机防火墙设置。4.2 方法二使用FinalShell图形化客户端连接对于喜欢图形化界面、需要管理多台服务器或频繁进行文件传输的用户FinalShell是一个极佳的选择。下载与安装从FinalShell官网下载对应你宿主机操作系统Windows/macOS/Linux的安装包并完成安装。创建连接打开FinalShell你会看到左侧的“连接管理器”。点击左上角的文件夹图标“新建连接”选择“SSH连接Linux”。在弹出的窗口中填写连接信息名称给你这个连接起个名字如“My Ubuntu VM”。主机填写你的虚拟机IP地址如192.168.1.128。端口默认22除非你在虚拟机修改过SSH端口。用户名虚拟机上你要登录的用户名如ubuntu。认证方式选择“密码”然后在下方输入该用户的密码。你也可以选择“公钥”方式更安全但这需要先在虚拟机配置SSH密钥对对于初次使用密码方式更简单。保存并连接点击“确定”保存配置。然后在连接管理器中找到你刚创建的连接双击它。首次连接确认和命令行一样首次连接会弹出安全警告确认主机密钥点击“接受并保存”。成功连接连接成功后FinalShell窗口下半部分会显示虚拟机的终端上半部分左侧可以浏览虚拟机的文件系统SFTP方便地进行文件上传下载。右侧可能还有资源监控面板。FinalShell的优势在于它将终端、文件传输、多会话管理集成在一个窗口特别适合需要一边操作命令一边管理文件的场景。你可以同时打开多个虚拟机连接并通过标签页轻松切换。5. 进阶配置与深度优化基础的连接建立后为了更安全、更便捷地使用我们可以进行一些进阶配置。5.1 配置SSH密钥对登录免密码登录每次连接都要输密码很麻烦也不够安全尤其是密码简单时。使用SSH密钥对公钥和私钥可以实现免密登录且安全性更高。在宿主机生成密钥对如果还没有 在宿主机终端Windows PowerShell macOS/Linux Terminal执行ssh-keygen -t rsa -b 4096一路按回车使用默认选项密钥保存路径~/.ssh/id_rsa不设置密码短语。这样会在你的用户目录下的.ssh文件夹生成两个文件id_rsa私钥绝不能泄露和id_rsa.pub公钥。将公钥上传到虚拟机 使用一个命令即可完成假设虚拟机IP是192.168.1.128用户是ubuntussh-copy-id ubuntu192.168.1.128这个命令会自动将你宿主机~/.ssh/id_rsa.pub的内容追加到虚拟机~/.ssh/authorized_keys文件中。过程中需要输入一次虚拟机用户的密码。验证免密登录 再次执行ssh ubuntu192.168.1.128如果不需要输入密码就直接登录成功说明配置生效。实操心得在FinalShell中也可以使用密钥登录。在创建或编辑连接时“认证方式”选择“公钥”然后“私钥”选择你宿主机上生成的id_rsa文件注意FinalShell可能需要.pem格式如果不行可以用ssh-keygen -p -m PEM -f ~/.ssh/id_rsa命令转换一下或者生成时指定-m PEM参数。5.2 修改SSH端口与禁用密码登录增强安全对于长期运行或有安全要求的虚拟机建议进行以下加固修改SSH默认端口编辑虚拟机上的SSH配置文件。sudo nano /etc/ssh/sshd_config找到#Port 22这一行去掉注释#并将22改为一个大于1024的端口号例如2222。Port 2222禁用root用户直接登录和密码登录在配置了密钥登录后 在同一配置文件中找到并修改以下行PermitRootLogin no PasswordAuthentication no重启SSH服务使配置生效sudo systemctl restart sshd # 或 ssh取决于发行版更新连接配置使用终端连接时需要指定端口ssh -p 2222 username192.168.1.128在FinalShell中编辑连接将“端口”从22改为你设置的新端口。重要警告在禁用PasswordAuthentication之前务必确保你的密钥登录已经配置成功并测试无误。否则你可能会把自己锁在虚拟机外面5.3 配置静态IP地址NAT模式下在NAT模式下虚拟机的IP地址通常由VMware的虚拟DHCP服务器动态分配重启后可能会变。为了避免每次重启都要重新查询IP可以为虚拟机配置静态IP。以Ubuntu 20.04/22.04使用netplan为例编辑网络配置文件sudo nano /etc/netplan/00-installer-config.yaml你的配置文件名称可能略有不同通常是以.yaml结尾的文件修改配置文件。你需要知道当前网络的网关和DNS服务器。通常在NAT模式下网关是192.168.xxx.2可以在虚拟机里用ip route | grep default查看DNS可以设为8.8.8.8和114.114.114.114。假设你想设置静态IP为192.168.1.200network: ethernets: ens33: # 你的网卡名用 ip addr 查看 dhcp4: no addresses: [192.168.1.200/24] gateway4: 192.168.1.2 nameservers: addresses: [8.8.8.8, 114.114.114.114] version: 2应用配置sudo netplan apply配置完成后虚拟机的IP就会固定为192.168.1.200以后连接就方便多了。6. 常见问题与故障排查实录在实际操作中你可能会遇到各种各样的问题。这里记录了几个最常见的问题和我的排查思路。6.1 连接超时或“Network is unreachable”症状ssh命令长时间卡住后报错Connection timed out或者直接报Network is unreachable。排查思路检查虚拟机网络模式确认虚拟机设置是“NAT模式”或“桥接模式”。如果是“仅主机模式”宿主机可以访问但可能无法通过某些工具直接连接取决于VMnet配置。检查虚拟机IP再次在虚拟机内用ip addr确认IP地址。确保你没有看错成127.0.0.1或localhost。从宿主机Ping测试在宿主机终端执行ping 虚拟机IP。如果ping不通说明网络层就不通。如果NAT模式下ping不通检查VMware的虚拟网络编辑器在VMware菜单“编辑”-“虚拟网络编辑器”确保VMnet8NAT模式对应的网卡是启用状态并且子网IP段和虚拟机IP在一个网段。尝试暂时关闭宿主机和虚拟机的防火墙仅用于测试。检查虚拟机SSH服务状态在虚拟机内执行sudo systemctl status sshd确保服务是active (running)。6.2 连接被拒绝Connection refused症状ssh命令迅速返回Connection refused。排查思路SSH服务未运行这是最常见的原因。在虚拟机内启动SSH服务sudo systemctl start sshd。防火墙拦截虚拟机防火墙可能阻止了22端口。按照上文“步骤三”检查并放行SSH端口。SSH服务监听问题在虚拟机内执行sudo netstat -tlnp | grep :22查看是否有进程应该是sshd在监听22端口。如果没有说明SSH服务配置或启动有问题。端口被修改如果你修改过SSH端口连接时需要使用-p参数指定新端口。6.3 身份验证失败Permission denied症状连接时提示Permission denied (publickey,password).。排查思路用户名或密码错误仔细检查输入的用户名和密码。Linux密码区分大小写且输入时不显示。密钥登录配置错误如果你配置了密钥登录但失败了系统会回退到密码登录。如果密码也错误就会报此错。检查ssh-copy-id是否成功以及虚拟机~/.ssh/authorized_keys文件权限是否正确应为600或644。服务器端认证配置检查/etc/ssh/sshd_config确保没有设置AllowUsers或DenyUsers限制了你的用户并且PubkeyAuthentication和PasswordAuthentication至少有一个是yes。6.4 FinalShell连接时反复弹出密码输入框症状在FinalShell中输入密码后窗口关闭又立刻弹出循环往复。排查思路密码错误这是最可能的原因。确保密码正确注意大小写和数字。用户权限问题某些系统如某些版本的Ubuntu默认禁止root用户通过密码SSH登录。尝试使用一个普通的sudo用户进行连接。FinalShell的密钥格式如果你使用密钥登录FinalShell对私钥格式有要求。尝试将OpenSSH格式的私钥转换为PEM格式ssh-keygen -p -m PEM -f ~/.ssh/id_rsa直接回车不设置新密码然后在FinalShell中选择这个PEM格式的私钥文件。服务器端配置同6.3检查SSH服务端配置确保密码认证未被禁用。6.5 文件传输速度慢或中断症状使用FinalShell的SFTP或scp命令传输文件时速度很慢或者大文件传输中途断开。排查思路与优化网络模式桥接模式通常比NAT模式有更好的网络性能因为NAT多了一层转换。如果对传输速度要求高可以尝试切换到桥接模式需注意网络环境。使用rsync代替scprsync支持断点续传和增量传输对大文件或网络不稳定情况更友好。命令如rsync -avzP /local/path/ user虚拟机IP:/remote/path/。调整SSH参数通过修改~/.ssh/config文件在宿主机为你的虚拟机连接启用压缩和保持连接可以提升体验Host myvm # 别名 HostName 192.168.1.128 User ubuntu Port 22 Compression yes ServerAliveInterval 60 ServerAliveCountMax 3这样以后只需要ssh myvm即可连接且启用了压缩和心跳保活。检查磁盘I/O如果虚拟机磁盘性能差例如使用动态分配且碎片多也会影响传输速度。可以考虑在虚拟机设置中使用“单个文件”存储磁盘或分配更多内存。远程连接VMware Linux虚拟机从配置网络、安装服务到使用工具连接、再到安全加固和故障排除整个过程就像给一台新电脑配置远程桌面。核心在于理解虚拟机网络与宿主机的通信原理以及SSH协议的工作方式。一旦打通你会发现本地与虚拟机的边界变得模糊工作效率得到质的提升。我个人最推荐的组合是NAT模式 静态IP SSH密钥登录 FinalShell/VSCode这套组合在安全、便捷和性能上取得了很好的平衡。遇到问题不要慌按照“网络通不通 - 服务在不在 - 认证对不对”的层次一步步排查大部分问题都能迎刃而解。