资讯详情

资讯详情

建站行业动态 · 设计趋势 · 数字化升级干货

VMware虚拟机远程连接实战:NAT模式配置与SSH工具详解

VMware虚拟机远程连接实战:NAT模式配置与SSH工具详解 1. 项目概述为什么我们需要远程连接VMware虚拟机如果你和我一样经常在本地电脑上用VMware Workstation跑Linux虚拟机做开发、测试或者学习那你肯定遇到过这个场景在VMware窗口里操作屏幕小、复制粘贴不方便尤其是想同时开多个终端或者编辑代码时感觉特别局促。直接在虚拟机里装图形界面又笨重消耗资源。这时候一个稳定、高效的远程连接方案就成了刚需。简单来说“远程连接VMware中Linux虚拟机”这个事核心就是摆脱VMware自带的那个“窗口”的束缚让我们能像操作一台真正的、放在别处的Linux服务器一样通过专业的终端工具比如FinalShell、Xshell或者VSCode的Remote-SSH插件来连接它。这样做的好处太多了你可以获得全屏的终端体验轻松实现本地与虚拟机之间的文件拖拽传输还能利用现代IDE的强大功能进行远程开发效率提升不是一点半点。这个需求看似简单但新手常会卡在几个关键环节虚拟机的网络怎么配才能让宿主机找到它SSH服务怎么安装和启动防火墙规则怎么设置连接工具怎么选、怎么配别担心接下来我会结合我多年的运维和开发经验把这些坑一个个填平带你从零搭建一个既稳定又高效的远程连接环境。无论你是刚接触Linux的新手还是想优化现有工作流的老手这篇内容都能给你提供可直接“抄作业”的详细步骤和避坑指南。2. 核心思路与网络模式选型远程连接的本质是网络通信。因此第一步也是最重要的一步就是为你的VMware Linux虚拟机选择一个正确的网络模式。VMware提供了几种网络模式选错了可能宿主机根本找不到虚拟机连接也就无从谈起。2.1 主流网络模式深度解析VMware Workstation/Player 主要提供三种网络模式我们需要深入理解其原理和适用场景。桥接模式 (Bridged Networking)这是最像真实物理机的模式。在这种模式下虚拟机会通过你宿主机的物理网卡直接连接到你的局域网比如你家或公司的路由器。虚拟机会从局域网的DHCP服务器通常是你的路由器那里获取一个IP地址这个地址和你的宿主机、你的手机、你的其他电脑都在同一个网段。工作原理VMware会在宿主机上创建一个虚拟的网桥将虚拟机的虚拟网卡和宿主机的物理网卡“桥接”起来。对路由器而言虚拟机就是一台新加入网络的独立设备。优点虚拟机与宿主机、局域网内其他设备完全平等可以互相访问也能直接上互联网。配置简单直观IP地址稳定如果路由器DHCP分配固定IP的话。缺点需要局域网环境支持。在一些严格管控的公司网络或公共Wi-Fi下可能因为MAC地址过滤或网络策略导致虚拟机无法获取IP。同时它“暴露”在局域网中安全性需要考虑。适用场景家庭网络、可控的内部开发网络或者你需要虚拟机被局域网内其他设备如另一台电脑、手机直接访问的情况。NAT模式 (Network Address Translation)这是VMware默认推荐也是我个人最常用的模式。NAT模式下VMware会在宿主机内部虚拟出一个私有的NAT网络通常是192.168.xxx.0/24网段。虚拟机在这个私有网络内并通过宿主机的IP地址“共享上网”。工作原理宿主机扮演了路由器的角色。虚拟机发出的网络请求会经过宿主机的NAT服务进行地址转换然后以宿主机的名义发出去。外部网络看到的源头是宿主机而不知道虚拟机的存在。优点对宿主机友好。虚拟机可以无障碍上网但宿主机所在的局域网却看不到虚拟机形成了一个天然的隔离层。非常适合在笔记本上移动办公无论连接到哪个网络虚拟机的网络配置都无需更改。配置也极为简单。缺点默认情况下局域网内的其他设备无法直接访问NAT模式下的虚拟机因为它在宿主机“背后”。不过我们可以通过端口转发来解决这个问题这也是我们远程连接的关键步骤。适用场景绝大多数个人开发、学习场景。你只需要宿主机能上网虚拟机就能上网且网络环境切换无感。仅主机模式 (Host-Only Networking)这种模式创建了一个完全封闭的网络只包含宿主机和虚拟机。虚拟机之间可以互通也可以与宿主机通信但完全不能访问外部互联网。工作原理VMware会为宿主机创建一个虚拟网卡如VMnet1并赋予其一个IP如192.168.1.1。所有使用Host-Only网络的虚拟机都会连接到这个虚拟网络并获取同网段的IP。优点绝对的安全隔离适合进行纯内网测试、网络攻防实验或需要完全断网的环境。缺点无法上网安装软件、更新系统需要事先下载好包或者通过宿主机共享。适用场景安全测试、模拟隔离网络、不需要互联网的特定实验环境。2.2 模式选择与决策建议对于“远程连接”这个目标NAT模式是平衡了便利性、安全性和功能性的最佳选择。它保证了虚拟机上网的便捷同时我们只需要在宿主机和虚拟机之间打通一条SSH通道即可无需惊动整个局域网。注意如果你选择桥接模式请确保你的网络环境允许新设备加入并且你知道如何查看虚拟机获取到的IP地址通常用ip addr或ifconfig命令。如果选择NAT模式我们接下来的所有配置都将基于此展开。这里有一个快速决策表网络模式虚拟机能否上网宿主机能否访问虚拟机局域网其他设备能否访问虚拟机配置复杂度推荐场景桥接 (Bridged)是是是低虚拟机需作为独立服务器被局域网访问NAT是是需端口转发否默认低推荐个人开发、学习远程连接首选仅主机 (Host-Only)否是否低纯内网、安全测试、断网环境实操心得我90%的时间使用NAT模式。它的优势在于“移动性”。今天在家连Wi-Fi明天到公司插网线虚拟机的网络配置完全不用动宿主机换网络对它没影响。只需要在VMware里配好端口转发远程连接就能一直稳定工作。3. 虚拟机侧核心配置详解选定NAT模式后我们需要在Linux虚拟机内部进行一系列配置让它准备好接受SSH连接。这个过程就像给房子装上门和锁并告诉别人门牌号。3.1 确保网络连通性与获取IP地址首先启动你的Linux虚拟机以Ubuntu/CentOS等常见发行版为例打开终端。检查网络接口与IP使用ip addr命令。你会看到类似ens33或eth0的网络接口。找到inet后面跟着的IP地址它应该属于192.168.xxx.xxx这样的私有地址段。记下这个IP比如192.168.137.128。这就是虚拟机在NAT网络内的“门牌号”。ip addr show # 或者使用老命令如果系统有 ifconfig测试网络连通性测试宿主机通信尝试ping你的宿主机在NAT网络中的网关。通常这个网关地址是你的宿主机虚拟网卡VMnet8的IP一般是192.168.xxx.1或192.168.xxx.2。用ping -c 4 192.168.137.1测试。测试外网ping -c 4 8.8.8.8或ping -c 4 www.baidu.com。如果能通说明虚拟机上网没问题。注意如果ip addr显示没有inet地址或者网络不通首先检查VMware虚拟网络编辑器编辑-虚拟网络编辑器确保NAT模式通常是VMnet8是启用状态并且子网IP范围合理。其次在虚拟机设置里确认网卡已连接并选择了NAT模式。最后在Linux内尝试重启网络服务sudo systemctl restart networking(Debian/Ubuntu) 或sudo systemctl restart NetworkManager(RHEL/CentOS 8)。3.2 安装与配置SSH服务SSHSecure Shell是我们远程连接的协议。大多数Linux服务器版默认安装了SSH客户端(ssh)和服务端(sshd)但桌面版可能没有。安装OpenSSH服务端Debian/Ubuntu:sudo apt update sudo apt install openssh-server -yRHEL/CentOS/Fedora:sudo yum install openssh-server -y # 或者使用 dnf (新版本) sudo dnf install openssh-server -y启动并设置开机自启SSH服务sudo systemctl start ssh # Ubuntu/Debian 服务名可能是 ssh sudo systemctl start sshd # RHEL/CentOS 服务名通常是 sshd # 设置开机自启 sudo systemctl enable ssh # 或 sshd可以通过sudo systemctl status ssh来检查服务是否正常运行。可选但推荐配置SSH以增强安全性与体验 编辑SSH服务端配置文件/etc/ssh/sshd_config。使用sudo vim /etc/ssh/sshd_config或sudo nano /etc/ssh/sshd_config。修改默认端口可选找到#Port 22去掉注释#将22改为一个大于1024的端口如Port 2222。这可以避免一些简单的自动化攻击扫描。禁止root用户直接登录强烈推荐找到#PermitRootLogin yes改为PermitRootLogin no。这能极大提升安全性日常使用普通用户登录再用sudo提权。启用公钥认证推荐确保PubkeyAuthentication yes是启用的。这是我们后续使用密钥登录的基础。保持连接活跃添加或修改以下两行防止连接因超时断开ClientAliveInterval 60 ClientAliveCountMax 3修改后保存文件并重启SSH服务使配置生效sudo systemctl restart ssh # 或 sshd3.3 配置系统防火墙如果启用如果你的Linux发行版默认开启了防火墙如Ubuntu的ufwCentOS的firewalld你需要放行SSH端口。Ubuntu (使用ufw):sudo ufw allow 22/tcp # 如果你改了SSH端口比如2222则用 sudo ufw allow 2222/tcp sudo ufw enable # 如果还没启用UFW这条命令会启用它并设置规则 sudo ufw status verbose # 查看规则状态RHEL/CentOS (使用firewalld):sudo firewall-cmd --permanent --add-servicessh # 默认端口22 # 如果改了端口比如2222则需要添加端口 # sudo firewall-cmd --permanent --add-port2222/tcp sudo firewall-cmd --reload # 重载配置 sudo firewall-cmd --list-all # 查看所有规则实操心得对于个人开发环境我有时会暂时关闭防火墙以排除网络问题sudo systemctl stop firewalld或sudo ufw disable但在配置稳定后建议还是开启并只开放必要的端口这是一个好习惯。另外修改SSH端口后一定要记得同步修改防火墙规则和后续VMware的端口转发设置。4. 宿主机侧关键配置VMware端口转发这是连接NAT模式虚拟机的“魔法”步骤。因为虚拟机在宿主的私有网络里外部的SSH客户端如FinalShell默认是找不到它的。端口转发的作用就是在宿主机的某个端口比如2222和虚拟机的SSH端口比如22之间建立一条隧道。打开VMware虚拟网络编辑器 在VMware Workstation菜单栏点击编辑-虚拟网络编辑器。你需要有管理员权限可能会提示输入密码或点击“更改设置”。选择NAT网络并设置端口转发在列表中选择VMnet8通常对应NAT模式点击右下角的NAT设置...按钮。在弹出的窗口中点击添加...按钮。填写端口转发规则主机端口这是宿主机上对外开放的端口。你可以选择一个未被占用的高端口号例如2222。这意味着你将在SSH客户端里连接localhost:2222。类型选择TCP。虚拟机IP地址填入你在虚拟机里用ip addr查到的那个IP地址例如192.168.137.128。虚拟机端口填入虚拟机SSH服务监听的端口如果你没改过SSH配置就是22如果改了比如改成了2222这里就填2222。描述可以写个备注如SSH to Ubuntu VM。点击确定保存所有设置。原理剖析完成这个配置后当你在宿主机上向127.0.0.1:2222发起连接时VMware的NAT服务会拦截这个请求并将其转发到192.168.137.128:22也就是你的虚拟机。这样SSH客户端就通过宿主机这个“中介”成功连接到了内部的虚拟机。重要提示虚拟机的IP地址如果是通过DHCP动态获取的重启后可能会变化。一旦IP变化端口转发规则就失效了。因此我强烈建议在虚拟机内将IP设置为静态。具体方法因发行版而异通常是修改/etc/netplan/*.yaml(Ubuntu 18.04) 或/etc/sysconfig/network-scripts/ifcfg-ens33(CentOS 7)你可以搜索“你的发行版名 设置静态IP NAT”来找到详细教程。设置静态IP能保证连接的长久稳定。5. 远程连接工具实战与对比一切准备就绪现在可以挑选顺手的“兵器”来连接了。这里我重点介绍两款最常用、体验最好的工具FinalShell和VSCode Remote-SSH。5.1 FinalShell一站式终端与SFTP解决方案FinalShell是一款国产的、功能强大的SSH客户端集成了终端、SFTP文件传输、服务器监控于一体对中文用户非常友好。下载与安装 从其官网下载对应操作系统的安装包。安装过程很简单一路下一步即可。创建SSH连接打开FinalShell点击左上角的文件夹图标“连接管理器”然后点击窗口左上角的“新建”按钮一个小电脑带加号。在弹出的窗口中名称给你这个连接起个名字如“Ubuntu-Dev”。主机填写127.0.0.1或localhost。因为我们在宿主机上连接且配置了端口转发到本机。端口填写你在VMware中设置的主机端口例如2222。用户名填写虚拟机中你的登录用户名。密码可以先不填连接时输入。更推荐使用“密钥”方式后面会讲。点击“确定”保存。发起连接与文件传输在连接管理器里双击你刚创建的连接。首次连接会提示保存主机密钥点击“接受并保存”。输入用户密码即可进入熟悉的终端界面。文件传输FinalShell界面下方默认有SFTP面板直接以图形化方式浏览虚拟机文件系统拖拽即可上传下载文件极其方便。FinalShell的优点界面直观功能集成度高终端、SFTP、监控一体。服务器资源监控CPU、内存、网络很直观。命令自动补全、历史记录管理做得不错。对于需要频繁进行文件交互的操作效率极高。5.2 VSCode Remote-SSH无缝远程开发体验如果你主要进行代码开发那么VSCode的Remote-SSH扩展绝对是“神器”。它让你感觉像是在本地开发一样却能使用远程虚拟机的所有环境。安装扩展 在VSCode的扩展商店中搜索并安装Remote - SSH扩展由Microsoft发布。配置连接安装后VSCode左侧活动栏会出现一个远程资源管理器图标。点击它在“SSH TARGETS”旁边点击加号。在弹出的命令框中输入连接命令ssh username127.0.0.1 -p 2222。这里的username是你的虚拟机用户名2222是宿主机转发端口。按回车VSCode会生成一个配置文件通常在~/.ssh/config中你可以选择保存位置默认用户目录下的.ssh/config即可。接下来在SSH TARGETS列表里会出现你刚配置的主机右键点击它选择“在当前窗口中连接”或“在新窗口中连接”。连接与开发首次连接会要求选择远程主机的平台Linux然后输入用户密码。VSCode会在远程虚拟机上自动安装一个轻量级的服务端。完成后整个VSCode的界面就变成了连接到远程虚拟机的状态。此时你可以打开文件夹就是虚拟机上的目录、安装扩展扩展可以安装在本地或远程、运行终端终端直接是远程虚拟机的Shell编码、调试、运行一气呵成体验与本地开发几乎无差。VSCode Remote-SSH的优点开发体验无缝直接使用远程环境避免本地与远程环境不一致的问题。可以方便地使用远程的计算资源如GPU、大内存进行开发调试。所有操作git、调试、插件都在远程上下文完成非常干净。工具选择建议日常运维、服务器管理、需要看实时监控选FinalShell。专注于写代码、项目开发选VSCode Remote-SSH。我个人的工作流是两者结合用VSCode Remote-SSH进行日常编码和调试当需要深度系统排查、看实时性能或者快速传文件时就用FinalShell。5.3 进阶配置SSH密钥登录免密码每次连接都要输密码太麻烦也不够安全容易被暴力破解。配置SSH密钥对可以实现免密且更安全的登录。在宿主机生成密钥对如果你用FinalShell它自带生成工具这里以命令行通用方法为例 在宿主机Windows可用Git BashmacOS/Linux直接用终端执行ssh-keygen -t rsa -b 4096 -C your_emailexample.com一路回车使用默认路径~/.ssh/id_rsa和空密码如需更高安全可设密码。完成后会在~/.ssh/目录下生成两个文件id_rsa私钥绝不能泄露和id_rsa.pub公钥。将公钥上传到虚拟机ssh-copy-id -p 2222 username127.0.0.1输入一次密码公钥就会自动追加到虚拟机对应用户的~/.ssh/authorized_keys文件中。如果ssh-copy-id不可用可以手动复制公钥内容然后登录虚拟机粘贴到~/.ssh/authorized_keys文件末尾需要创建.ssh目录并设置权限。修改虚拟机SSH配置以启用密钥认证如果之前没做 确保/etc/ssh/sshd_config中有PubkeyAuthentication yes。然后重启SSH服务。测试免密登录ssh -p 2222 username127.0.0.1现在应该可以直接登录无需密码。在FinalShell或VSCode中使用密钥FinalShell在新建或编辑连接时在“认证”方式里选择“密钥”然后浏览选择你生成的私钥文件id_rsa。VSCode Remote-SSH它默认会使用宿主机~/.ssh/下的密钥如果密钥路径和名称是标准的通常会自动识别。如果不行可以在~/.ssh/config文件中为该主机指定密钥路径Host myvm HostName 127.0.0.1 User username Port 2222 IdentityFile ~/.ssh/id_rsa实操心得务必保护好你的私钥文件id_rsa它相当于你的“数字身份证”。建议为私钥设置一个强密码在ssh-keygen时输入这样即使私钥文件泄露没有密码也无法使用。虽然每次连接需要输入密钥密码但可以通过SSH-Agent来管理实现一次输入多次使用。6. 常见问题排查与实战技巧即使按照步骤操作你也可能会遇到一些问题。这里我整理了最常见的几种情况及其解决方法。6.1 连接超时或拒绝连接这是最常见的问题通常意味着网络路径没通。症状Connection timed out或Connection refused。排查思路从内到外虚拟机内SSH服务状态在虚拟机内执行sudo systemctl status ssh确保服务是active (running)。虚拟机内防火墙检查UFW或firewalld是否放行了SSH端口。可以暂时关闭防火墙测试sudo ufw disable或sudo systemctl stop firewalld。虚拟机IP是否变化在虚拟机内再次运行ip addr确认IP地址和你在VMware端口转发规则里设置的是否一致。如果变了要么修改端口转发规则要么去设置静态IP。VMware端口转发规则仔细检查虚拟网络编辑器中的NAT设置确认主机端口、虚拟机IP、虚拟机端口填写无误。可以尝试删除规则重新添加。宿主机防火墙Windows用户特别注意Windows Defender防火墙或第三方安全软件可能会阻止VMware的入站连接。你需要为VMware的相关进程如vmware-authd.exe,vmware-hostd.exe或直接为你的主机端口如2222在Windows防火墙中添加入站规则允许TCP连接。端口占用在宿主机上使用netstat -ano | findstr :2222(Windows) 或lsof -i:2222(macOS/Linux) 检查你设置的“主机端口”是否已被其他程序占用。如果占用换一个端口。6.2 连接成功但提示“密码错误”或“权限被拒绝”症状能连上但认证失败。排查确认用户名和密码Linux系统大小写敏感确认用户名和密码无误。可以在虚拟机本地登录测试。检查SSH配置确认/etc/ssh/sshd_config中PasswordAuthentication是否为yes如果使用密码登录。修改后需重启SSH服务。检查用户目录权限如果使用密钥登录失败检查虚拟机上对应用户的~/.ssh目录权限必须是700~/.ssh/authorized_keys文件权限必须是600。chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keysSELinux仅限RHEL/CentOSSELinux可能会阻止SSH访问某些文件。可以尝试临时禁用SELinux测试sudo setenforce 0。如果问题解决需要调整SELinux策略或永久禁用不推荐生产环境。6.3 连接缓慢或卡顿症状输入命令后响应慢或者登录过程卡住很久。可能原因与解决DNS反向解析SSH服务端默认会尝试解析客户端的IP地址为主机名如果DNS服务器响应慢或不可达就会造成延迟。在虚拟机SSH配置文件中/etc/ssh/sshd_config添加或修改UseDNS no然后重启SSH服务。GSSAPI认证同样可能导致延迟。可以禁用GSSAPIAuthentication no网络模式问题NAT模式在数据包转发时会有轻微开销但对于本地连接影响微乎其微。如果卡顿严重检查宿主机和虚拟机的资源CPU、内存占用是否过高。6.4 文件传输问题使用FinalShell SFTP或scp命令症状SFTP连接失败或传输文件权限错误。排查确保SSH连接本身正常SFTP是SSH的一个子系统SSH能连上SFTP通常没问题。检查磁盘空间虚拟机磁盘空间不足会导致传输失败。用df -h命令检查。权限问题你登录的用户是否有权写入目标目录尝试传输到用户家目录~下。6.5 高级技巧使用Hosts映射简化连接如果你觉得每次都要记127.0.0.1:2222很麻烦可以在宿主机的hosts文件里加个映射。Windows编辑C:\Windows\System32\drivers\etc\hosts需要管理员权限。macOS/Linux编辑/etc/hosts。 在文件末尾添加一行127.0.0.1 myubuntu-vm保存后你就可以在FinalShell或SSH命令中用myubuntu-vm代替127.0.0.1了。注意端口号仍需指定ssh usermyubuntu-vm -p 2222。我个人习惯是为每个虚拟机在hosts文件中设置一个别名并在FinalShell或VSCode的SSH配置中使用这个别名这样管理多个虚拟机时非常清晰不用再记IP和端口。这套组合拳下来从虚拟机网络配置到远程连接优化基本覆盖了你会遇到的所有核心场景和坑点。关键在于理解每一步背后的原理这样无论遇到什么问题你都能自己分析和解决。

相关资讯