SSH 是一种网络协议,它本身不是 VMware 的特定命令。 你通过 SSH 连接的是 VMware 虚拟机(Guest OS)的操作系统,而不是 VMware ESXi 主机(Host)本身(除非你明确配置了 ESXi 的 SSH 服务)。

整个过程分为两步:
- 在 VMware 环境中配置:确保虚拟机可以接收 SSH 连接。
- 在你的本地计算机上使用 SSH 命令:通过命令行连接到虚拟机。
第一步:在 VMware 环境中配置 SSH 访问
你需要确保虚拟机已经安装并启用了 SSH 服务。
连接到客户机操作系统 (Guest OS)
这是最常见的用法,比如连接到 Ubuntu、CentOS、Windows 等。
对于 Linux 虚拟机 (如 Ubuntu, CentOS):

-
安装 SSH 服务器: 如果你的 Linux 系统没有安装 SSH 服务器,需要先安装。
- Ubuntu/Debian:
sudo apt update sudo apt install openssh-server
- CentOS/RHEL/Fedora:
sudo yum install openssh-server # 或者使用 dnf (新版) sudo dnf install openssh-server
- Ubuntu/Debian:
-
启动并启用 SSH 服务:
# 启动 SSH 服务 sudo systemctl start sshd # 设置 SSH 服务开机自启 sudo systemctl enable sshd
-
检查防火墙: Linux 防火墙可能会阻止 SSH 连接(默认端口 22),你需要允许流量通过。
- 使用 UFW (Ubuntu/Debian):
sudo ufw allow ssh sudo ufw reload
- 使用 firewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
- 使用 UFW (Ubuntu/Debian):
-
获取虚拟机的 IP 地址: 你需要知道虚拟机的 IP 地址才能连接,可以在虚拟机内部使用以下命令查看:
(图片来源网络,侵删)ip a # 或者 ifconfig
记下
enp0s3(或类似名称) 网卡下的inet地址,168.1.105。
对于 Windows 虚拟机 (如 Windows 10/11, Windows Server):
-
启用 OpenSSH 服务器:
- 进入 设置 -> 应用 -> 可选功能。
- 点击 添加功能,搜索并安装 OpenSSH 服务器。
- 安装完成后,可以在服务中找到
sshd服务,并确保其正在运行。
-
配置防火墙: Windows Defender 防火墙通常会自动为 OpenSSH 创建入站规则,如果没有,请手动添加一个允许 TCP 端口
22的入站规则。 -
获取虚拟机的 IP 地址: 在 Windows 命令提示符或 PowerShell 中运行:
ipconfig
记下 IPv4 地址,
168.1.106。
连接到 ESXi 主机 (Host)
如果你需要直接管理 ESXi 主机,可以启用其 SSH 服务。
-
通过 vSphere Client (Web Client) 启用:
- 登录到 vSphere Client。
- 在左侧导航栏中,右键点击你的 ESXi 主机,选择 服务。
- 在服务列表中找到 SSH。
- 右键点击 SSH,选择 启动并添加到启动列表。
- ⚠️ 安全警告:出于安全考虑,建议仅在需要时临时启用,用完后立即禁用,长时间开启 SSH 会使 ESXi 主机暴露在网络风险中。
-
获取 ESXi 主机的 IP 地址:
- 在 vSphere Client 中,点击主机名称,在 摘要 页面可以找到其 IP 地址。
第二步:使用 SSH 命令进行连接
现在你可以在你的本地计算机(Windows, macOS, Linux)上使用 SSH 命令了。
基本语法
ssh [用户名]@[虚拟机IP地址]
[用户名]:虚拟机操作系统上的用户名。- Linux 通常是
root或你创建的普通用户(如ubuntu,centos)。 - Windows 默认是
Administrator。
- Linux 通常是
[虚拟机IP地址]:你在第一步中获取的 IP 地址。
常用 SSH 命令示例
基本连接
# 连接到 IP 为 192.168.1.105 的 Ubuntu 虚拟机,用户名为 ubuntu ssh ubuntu@192.168.1.105
指定端口
如果虚拟机的 SSH 服务运行在非标准端口(2222),需要使用 -p 选项。
ssh -p 2222 ubuntu@192.168.1.105
使用密钥进行无密码登录(推荐)
每次输入密码很麻烦,可以通过 SSH 密钥对实现免密登录。
-
在本地电脑生成密钥对(如果还没有的话):
ssh-keygen -t rsa -b 4096 # 一路回车即可,会在 ~/.ssh/ 目录下生成 id_rsa (私钥) 和 id_rsa.pub (公钥)
-
将公钥复制到远程虚拟机:
# 使用 ssh-copy-id 工具(最简单) ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.1.105 # 如果没有 ssh-copy-id,可以手动复制 # 1. 在本地查看公钥内容 cat ~/.ssh/id_rsa.pub # 2. 将输出的内容,追加到虚拟机 ~/.ssh/authorized_keys 文件的末尾
-
之后连接时就不需要密码了:
ssh ubuntu@192.168.1.105
指定私钥文件
如果你的密钥文件不在默认位置 ~/.ssh/id_rsa,可以使用 -i 选项指定。
ssh -i /path/to/your/private_key.pem ubuntu@192.168.1.105
在一条命令中执行远程命令
有时候你只是想在远程机器上执行一个命令,然后退出,可以在 SSH 命令后直接跟命令。
# 在远程机器上获取磁盘使用情况 ssh ubuntu@192.168.1.105 "df -h" # 在远程机器上创建一个目录 ssh ubuntu@192.168.1.105 "mkdir -p /tmp/mytest"
调试连接问题
如果连接失败,可以使用 -v (verbose) 选项来查看详细的连接过程,帮助定位问题。
ssh -v ubuntu@192.168.1.105
通过 SSH 隧道转发端口
这是一个高级用法,比如你想通过 SSH 访问虚拟机上的一个 Web 服务(端口 8080)。
# 将本地电脑的 8888 端口映射到虚拟机的 8080 端口 ssh -L 8888:localhost:8080 ubuntu@192.168.1.105
然后你就可以在本地浏览器中访问 http://localhost:8888 来查看虚拟机上运行的服务。
常见问题排查
-
Connection timed out / Connection refused
- 原因:虚拟机无法通过网络访问。
- 解决:
- 检查虚拟机的 IP 地址是否正确。
- 检查 VMware 的网络设置(NAT、桥接等),确保虚拟机可以和你的主机通信。
- 检查虚拟机操作系统的防火墙是否阻止了 SSH 端口(22)。
-
Permission denied (publickey,password).
- 原因:认证失败。
- 解决:
- 确认用户名和密码是否正确。
- 如果使用密钥,确认公钥是否已正确添加到远程机器的
~/.ssh/authorized_keys文件中。 - 检查远程机器的 SSH 服务器配置文件 (
/etc/ssh/sshd_config),确保PasswordAuthentication yes(如果你用密码登录)或PubkeyAuthentication yes(如果你用密钥登录)。
-
Could not resolve hostname
- 原因:你的本地电脑无法通过域名或 IP 地址找到虚拟机。
- 解决:
- 确认 IP 地址输入无误。
- 确认虚拟机和你的主机在同一个局域网内(如果是桥接模式),或者 VMware 的 NAT/DHCP 服务是否正常工作。
| 步骤 | 操作 | 命令/工具 | 说明 |
|---|---|---|---|
| 配置虚拟机 | 安装并启动 SSH 服务 | sudo apt install openssh-server (Linux) 或 "设置" (Windows) |
确保虚拟机本身能提供 SSH 服务。 |
| 检查网络 | 获取虚拟机 IP 地址 | ip a (Linux) / ipconfig (Windows) |
找到虚拟机的网络身份,用于连接。 |
| 检查防火墙 | 允许 SSH 流量 | sudo ufw allow ssh (Linux) 或 Windows Defender 防火墙 |
确保网络流量能到达 SSH 服务。 |
| 连接 | 使用 SSH 命令连接 | ssh [user]@[ip] |
核心命令,用于建立安全连接。 |
| 进阶 | 使用密钥/执行命令 | ssh-copy-id, ssh -i keyfile, ssh "command" |
提高效率和自动化操作。 |
希望这份详细的指南能帮助你顺利使用 SSH 连接到你的 VMware 虚拟机!
