ARTICLE DETAIL

资讯详情

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

VMware虚拟机SSH连接配置完整指南:从网络模式到密钥登录

VMware虚拟机SSH连接配置完整指南:从网络模式到密钥登录 1. 先把思路理清楚为什么非要把 SSH 打通装好 VMware Workstation把 Ubuntu 或 Windows 虚拟机跑起来之后我干的第一件事永远是把这台虚拟机的 SSH 打通。原因特别直接——谁受得了来回切窗口的日子在虚拟机面板里复制粘贴东西得靠 VMware Tools 勉强撑着滚动日志要开大控制台窗口想在宿主机上写脚本远程操作虚拟机更是无从下手。尤其当你用笔记本跑开发环境、在虚拟机里起服务、盯日志、重启应用的时候SSH 连上去的体验和操作一台真实服务器几乎没有区别。这篇文章完整记录一条从零到一打通宿主机与 VMware 虚拟机 SSH 链路的路径。网卡模式怎么选、虚拟机 IP 怎么查、SSH 服务怎么装、防火墙怎么放行、静态 IP 怎么配、密钥登录怎么搞一次讲清楚。刚开始玩虚拟机的小白能照着抄作业已经有一定基础、想把本地开发环境彻底理顺的同学也能在“排查问题”和“安全加固”这两节里找到平时容易忽略的点。前置条件很简单宿主机是 Windows 或 Linux 都行VMware Workstation Pro 17目前个人使用已经免费授权了跑着一台虚拟机虚拟机上装的是 Ubuntu 22.04/24.04或者 Windows 10/11。不同系统的细节我会单独标注不影响整体流程。2. 网络模式选型NAT、桥接、仅主机到底怎么选2.1 三种模式的核心区别很多人觉得 SSH 连不上虚拟机问题往往不在 SSH 本身而在虚拟机网卡工作模式。VMware 给虚拟机提供了三种虚拟网络模式理解它们各自的拓扑和适用场景比上来就敲命令重要得多。桥接模式Bridged虚拟机直接蹭宿主机的物理网卡相当于局域网里多了一台独立电脑IP 由路由器分配和宿主机在同一网段。NAT 模式虚拟机通过宿主机共享 IP 上网外部网络看虚拟机只会看到宿主机的 IP虚拟机和宿主机之间通过虚拟网卡 VMnet8 互通。仅主机模式Host-Only虚拟机只能和宿主机通信不能访问外部网络用的是 VMnet1 虚拟网卡。用个生活化的类比桥接模式是虚拟机在外面租了房子有自己的门牌号谁都能直接找到它NAT 模式是虚拟机住在宿主机这栋公寓里出门办事统一走大门但内部串门宿主机访问虚拟机直接敲门就行仅主机模式是宿主机在自家地下室隔了一个房间除了房间主人谁都进不来。2.2 NAT 模式为什么是首选我个人最常用 NAT 模式原因很实在。虚拟机通过宿主机上网不需要占用局域网 IP也没那么容易被局域网里的其他设备扫描到。对于本地开发、学习 Linux、跑数据库、部署测试服务来说NAT 模式带来的隔离性刚刚好。NAT 模式的拓扑里有一个关键角色VMnet8 虚拟网卡。安装 VMware 后Windows 网络连接里会多出一块叫“VMware Network Adapter VMnet8”的虚拟网卡它的 IP 一般是 192.168.x.1这就是宿主机访问虚拟机的第一跳。虚拟机网络里也有一个同网段的地址比如 192.168.x.128网关指向 192.168.x.1数据的转发由 VMware NAT 服务完成。在配置之前最好先打开 VMware 的“编辑 → 虚拟网络编辑器”看看 VMnet8 的子网 IP 和 DHCP 范围。尤其是当你装过多个版本的 VMware或者和 WSL、Hyper-V 的虚拟网卡撞了网段VMnet8 的子网可能不是默认的 192.168.x.0 网段这会直接导致宿主机 ping 不通虚拟机。2.3 不同场景下的模式选择三类场景我实际都踩过坑给个直观的选择表场景推荐模式原因本地开发、写代码、跑服务NAT虚拟机可以上网宿主机能访问虚拟机外部网络对虚拟机不可见局域网内共享服务或需要手机/其他电脑访问桥接虚拟机有独立局域网 IP像一台真实主机纯测试、不联网、想隔离仅主机和外部网络完全隔离网络行为可控校园网、需要拨号/网页认证的网络NAT桥接模式在这种网络下经常拿不到合法 IP一个容易误解的地方NAT 模式下宿主机访问虚拟机时走的是 VMnet8 虚拟交换机这是一个二层网络宿主机 192.168.x.1 和虚拟机 192.168.x.128 可以直接互通不需要经过任何真实路由器。所以理论上只要网段一致、防火墙放行SSH 一定能通。通不了问题基本出在网段不一致、防火墙拦截、SSH 服务没起来这三个方向上后面逐一排查。3. 实操全流程从虚拟机装好到 SSH 连上3.1 VMware 侧配置网络适配器和虚拟网络编辑器先把虚拟机的网卡模式确认一遍。在 VMware 主界面右键虚拟机 →“设置”→“网络适配器”→“网络连接”里选中“NAT 模式”。如果之前改过其他模式这里切换后最好重新启动虚拟机。然后打开“编辑 → 虚拟网络编辑器”找到 VMnet8确认下面几个信息“NAT 模式”前面的勾要打上。子网 IP 是多少子网掩码是不是 255.255.255.0。DHCP 设置里分配的起始和结束地址范围。如果你在“编辑”菜单里根本看不到“虚拟网络编辑器”通常是安装包被精简过或者 VMware 安装时虚拟网卡组件被安全软件拦了。解决方法是去官网下载完整版安装包在“控制面板 → 卸载程序”里修复安装一次。这个选项不恢复的话虚拟网卡不会正常生成后面全都不用谈。3.2 Ubuntu 虚拟机内安装并启动 SSH 服务Ubuntu 默认装的是 openssh-client没有服务端所以要先安装 openssh-server。打开虚拟机控制台终端sudo apt update sudo apt install -y openssh-server安装完成之后先确认服务状态sudo systemctl status ssh如果显示 active (running)说明服务已经起来了。顺手设置开机自启sudo systemctl enable ssh这一步很多人会忘结果虚拟机重启之后 SSH 又连不上了还以为是系统坏了。如果你用的是 Windows 虚拟机两种常见方式系统设置 → 应用 → 可选功能 → 添加功能找“OpenSSH 服务器”安装后启动服务或者装第三方的 Bitvise SSH Server。Windows 下的 OpenSSH 服务名是 sshd启动命令Start-Service sshd同时记得把启动类型改成自动。3.3 查看虚拟机 IP确认宿主机能 ping 通IP 查看命令是ip addr或者ip a。找到类似 ens33、ens160 或 eth0 的网络接口底下inet后面那串就是虚拟机 IP。注意区分lo回环接口别把 127.0.0.1 当成了可用 IP。拿到 IP 之后先做两个测试。第一在虚拟机里 ping 网关和公网ping -c 4 192.168.x.1 ping -c 4 223.5.5.5如果网关能通、外网不通多半是 DNS 或者 NAT 服务有问题如果网关都不通说明 VMnet8 网段配置有问题或者 VMware NAT 服务没跑起来。Windows 下可以在“服务”管理器里检查 “VMware NAT Service”和“VMware DHCP Service”两个服务是否正在运行。第二回到宿主机终端ping 虚拟机的 IPping 192.168.x.128能通说明二层链路正常直接进入下一步。不能通不要慌直接跳到第 4 节看排查思路。我先按“能通”继续讲。3.4 宿主机连接虚拟机从系统自带终端到专业 SSH 工具链路通了之后SSH 连接本身很直接。Windows 10/11 自带的 PowerShell 或 Windows Terminal 里直接敲ssh 用户名虚拟机IP比如ssh ying192.168.x.128首次连接会提示确认目标主机指纹输入 yes然后输入虚拟机里对应用户的密码就到命令行了。如果提示 Port 22: Connection refused说明虚拟机 OpenSSH 服务没监听 22 端口回到 3.2 检查。系统自带终端够用但日常开发我更推荐专业工具MobaXterm标签式会话管理、内置 SFTP、文件拖拽上传用起来最顺手。FinalShell国内开发者做的中文界面、有实时资源监控适合新手。Xshell老牌工具免费个人版足够日常用。VSCode Remote-SSH如果你主要用 VSCode 写代码直接在扩展商店装 Remote - SSH然后通过配置~/.ssh/config连接虚拟机体验和在本地开发几乎一致非常适合远程改代码、调试。MobaXterm 的连接方式是完全图形化的Session → SSH → 填虚拟机 IP 和用户名 → OK输入密码就进去了。VSCode 稍微特殊一点需要在远程机器上也安装对应版本的 VSCode Server第一次连接会自动部署稍等一会儿就好。3.5 进阶配置静态 IP告别 SSH 断连虚拟机默认用 DHCP 拿地址IP 可能会在重启后变化。一旦变了你在宿主机上保存的 IP 就失效了下次用 SSH 还得重新查。与其每次忍不如直接把虚拟机的网络配置改成静态 IP。Ubuntu 18.04 之后的版本用 netplan 管理网络。先找到配置文件ls /etc/netplan/通常文件名叫01-network-manager-all.yaml或50-cloud-init.yaml。编辑它需要 sudo 权限。以 Ubuntu 22.04 为例配置大概长这样sudo nano /etc/netplan/01-network-manager-all.yamlnetwork: version: 2 ethernets: ens33: addresses: - 192.168.x.50/24 routes: - to: default via: 192.168.x.1 nameservers: addresses: - 223.5.5.5 - 114.114.114.114这里ens33要替换成你虚拟机实际网卡名称192.168.x.50是要固定的 IP192.168.x.1是 VMnet8 的宿主机 IP 也是默认网关。保存后执行sudo netplan apply再执行ip addr确认新 IP 生效。从这一刻起你的虚拟机 IP 就稳定不变了SSH 连接不再受 DHCP 租约影响。4. 常见问题与排查技巧实录4.1 宿主机 ping 不通虚拟机这是出现频率最高的问题。先分类排查第一确认虚拟机网卡确实接在 NAT 模式的 VMnet8 上。在虚拟机里执行ip route查看默认网关如果网关不是 192.168.x.1说明网卡模式不对或者 VMware 网络服务出了问题。第二确认宿主机上 VMnet8 网卡正常存在并且 IP 在同一个网段。Windows 下ipconfig找到 VMware Network Adapter VMnet8看 IPv4 地址是不是 192.168.x.1。如果找不到这块网卡多半是 VMware 安装不完整或者和 Hyper-V/WSL 冲突。曾经排查过一个案例宿主机开了 Hyper-V 之后VMware 的虚拟网卡全部消失VMnet8 跟着没了。解决方法是关闭 Hyper-V或者使用 VMware 兼容 Hyper-V 的版本。第三检查 Windows 防火墙。Windows 防火墙默认会拦截 ICMP 的 ping 请求会出现“宿主机 ping 不通虚拟机但 SSH 却能连上”的怪现象。所以不要执着于 ping直接用 PowerShell 测端口Test-NetConnection 192.168.x.128 -Port 22返回 TcpTestSucceeded : True说明链路和 SSH 服务都没问题。4.2 SSH Connection refused这个报错信息的关键在“refused”意思是端口有响应但服务拒绝了连接。优先级最高的是虚拟机里 SSH 服务没起来。在虚拟机控制台执行sudo systemctl status ssh如果服务没有运行执行sudo systemctl start ssh并确认开机自启。还有一种情况改了 sshd 配置后没重启服务或者配置文件语法错误导致 sshd 没正常监听。改完配置后建议先测试语法sudo sshd -t没有任何输出代表语法正常再执行sudo systemctl restart ssh。另一点容易忽略如果之前操作过 UFW 防火墙sudo ufw status看一下 22 端口是否被放行sudo ufw allow 22/tcp4.3 Connection timed out“timed out”和“refused”的区别很关键。refused 表示网络能到但服务拒绝timed out 则表示网络根本没通。按 4.1 的思路排查链路网段是否一致、VMnet8 是否正常、NAT 和 DHCP 服务是否在跑。还有一个坑虚拟机里网卡没启用。ip link看一下网卡状态如果显示 DOWN手动启用sudo ip link set ens33 up如果是桥接模式下的 DHCP 网关问题或者 NAT 模式下 VMware NAT Service 停止了也会出现 timed out。Windows 服务管理器里找到 “VMware NAT Service”确认状态是“正在运行”。有时重启宿主机后 VMware 服务不会自动启动手动启动一次就能恢复。4.4 Permission deniedSSH 服务是通的但密码正确也进不去问题基本在 sshd 配置。多数情况有两个第一个是密码认证被关闭。检查/etc/ssh/sshd_config确认这一行不是 noPasswordAuthentication yes修改后重启 sshd。第二个是 root 用户无法登录。如果你习惯直接用 root 账号连需要在 sshd_config 里添加或修改PermitRootLogin yes但我不推荐直接开 root 远程登录更安全的做法是普通用户登录后用sudo执行管理命令或者配置普通用户的 sudo 免密。如果只是想省事也要先把密钥认证配好再考虑。4.5 VMware 17 里找不到虚拟网络编辑器或选项变灰“编辑”菜单下没有“虚拟网络编辑器”或者虚拟网络编辑器打开后条目都是灰色的一般是两个原因安装的是精简版/绿色版 VMware组件被阉割了或者当前登录系统的用户没有管理员权限。解决方式建议优先用管理员身份运行 VMware如果选项还不出现直接卸载后从官网下载完整版安装包重新安装。网络配置是 VMware 虚拟化的基础底座这部分不稳定后面一切操作都会事倍功半。5. 安全加固与后续扩展5.1 用密钥登录代替密码登录SSH 打通后的第一步很多人忽略了安全默认密码登录容易被暴力破解。哪怕虚拟机只是本地环境一旦你后续开了端口转发或 SSH 端口暴露到局域网风险就会成倍放大。最稳妥的方式是改成密钥登录。在宿主机生成密钥对ssh-keygen -t ed25519 -C local-vm-ssh一路回车后Windows 下会生成C:\Users\用户名\.ssh\id_ed25519和id_ed25519.pub。把公钥拷贝到虚拟机最简单的方式是用 ssh-copy-idssh-copy-id 用户名虚拟机IP这个命令会自动将公钥追加到虚拟机的~/.ssh/authorized_keys。Windows 自带终端没有 ssh-copy-id 的话可以手动执行type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh 用户名虚拟机IP mkdir -p ~/.ssh cat ~/.ssh/authorized_keys之后再用 SSH 连接就不需要输密码了。确认密钥登录正常后再去修改 sshd_config把密码认证关掉PasswordAuthentication no然后把服务重启一遍从此只能靠私钥登录安全性上一个台阶。5.2 修改 SSH 端口与限制登录来源如果你想把 SSH 长期开着建议把默认的 22 端口改掉。修改/etc/ssh/sshd_configPort 2222然后防火墙放行新端口sudo ufw allow 2222/tcp sudo systemctl restart ssh后续连接时要带端口参数ssh -p 2222 用户名虚拟机IP如果只想让宿主机访问虚拟机还可以在虚拟网络编辑器里调整防火墙策略或者在虚拟机里设置仅允许特定来源 IP 登录。一般本地开发环境做到密钥登录加改端口就够用了除非这台机器长期暴露在公网才需要更复杂的规则。5.3 端口转发让局域网其他机器也能访问虚拟机默认情况下 NAT 模式只有宿主机能访问虚拟机局域网里的其他电脑最多能访问宿主机够不到虚拟机。如果你希望手机、另一台笔记本或同事也能访问虚拟机里的服务可以在虚拟网络编辑器里加端口转发规则。“编辑 → 虚拟网络编辑器 → 选择 VMnet8 → NAT 设置”点击“添加”把宿主机某个端口映射到虚拟机的某个端口。比如映射宿主机 2222 端口到虚拟机 2222 端口局域网其他机器就能通过宿主机 IP 加 2222 端口 SSH 到虚拟机。这样做的好处是不用改网卡模式NAT 的隔离性还在对外只暴露指定端口。坏处是端口转发规则多了之后自己容易记混建议在会话管理工具里给每个连接标注清楚到底映射到哪台虚拟机的哪个服务。5.4 文件传输与远程开发扩展SSH 打通之后日常开发效率能再上一层的几个扩展操作使用scp传文件scp 本地文件 用户名虚拟机IP:/home/用户名/使用rsync做增量同步适合频繁部署代码或备份目录MobaXterm 的 SFTP 面板直接拖拽文件VSCode Remote-SSH 把整个开发环境搬到虚拟机里本地只当一个编辑器我个人最常用的组合是VSCode Remote-SSH 连接虚拟机写代码MobaXterm 看日志和传文件一套下来和操作物理服务器几乎没区别。SSH 打通的意义不只是省了个窗口而是让虚拟机和宿主机真正融为一起变成一个高效的本地开发平台。最后再分享一个我自己的习惯每次装完虚拟机系统第一件事就是配置静态 IP 和 SSH 密钥然后才去装其他软件。这样做的原因很简单——有了稳定的网络链路和安全的登录方式后续所有操作都可以直接通过 SSH 完成不会再被虚拟机控制台窗口卡住手脚。按这套流程走一遍SSH 访问 VMware 虚拟机这件事就算彻底稳了。
返回列表