SSH连接虚拟机的核心在于确保宿主机与虚拟机之间的网络互通性,正确配置虚拟机的网络模式(桥接或NAT),并在虚拟机内部启动并开放SSH服务,只要掌握了网络配置与端口映射这两个关键点,无论是通过终端命令还是第三方工具,都能实现稳定、高效的远程管理。

确认网络环境与IP地址
在进行SSH连接之前,首要任务是明确虚拟机的网络拓扑结构,虚拟机的网络模式直接决定了IP地址的获取方式以及连接的稳定性,通常情况下,我们主要使用桥接模式和NAT模式。
桥接模式下,虚拟机就像局域网内的一台独立物理机,它会从路由器获取一个与宿主机在同一网段的IP地址,这种模式下,SSH连接最为直接,无需复杂的端口映射,只要局域网内允许,即可直接访问。NAT模式则是虚拟机通过宿主机共享网络IP,此时虚拟机处于一个虚拟的子网中,虽然安全性较高,但宿主机无法直接通过局域网IP访问虚拟机,必须依赖端口转发技术。
用户需要登录虚拟机系统,使用ip addr或ifconfig命令查看其具体的IP地址,对于Linux系统,确保网卡处于UP状态;对于Windows系统,则需在CMD中使用ipconfig确认,若IP地址显示为0.0.1或未分配,说明网络配置存在问题,需先调整虚拟机软件(如VMware或VirtualBox)的网络设置。
安装并启动SSH服务
获取到正确的IP地址后,必须确认虚拟机内部已经安装并运行了SSH服务端软件,这是建立连接的软件基础。
对于Ubuntu/Debian系列的Linux发行版,通常使用OpenSSH Server,可以通过执行sudo apt update && sudo apt install openssh-server命令进行安装,安装完成后,使用sudo systemctl status ssh命令检查服务状态,确保其显示为active (running),对于CentOS/RHEL系列,安装命令为sudo yum install openssh-server,并使用sudo systemctl start sshd启动服务。
值得注意的是,现代Windows 10及Windows 11专业版/企业版已内置OpenSSH Server功能,用户可以通过“设置”->“应用”->“可选功能”进行安装,并通过net start sshd命令启动服务,安装完毕后,建议编辑/etc/ssh/sshd_config(Linux)或配置文件,确认Port 22未被注释,且PermitRootLogin(是否允许root登录)已根据安全需求设置为yes或prohibit-password,修改配置后,需重启SSH服务使配置生效。
处理NAT模式的端口转发
如果虚拟机处于NAT模式,这是连接过程中最容易出现故障的环节,由于宿主机无法直接“看到”虚拟机的局域网IP,必须在虚拟化软件中设置端口转发规则。

以VMware Workstation为例,需点击“编辑”->“虚拟网络编辑器”,选择NAT模式的网络(通常是VMnet8),点击“NAT设置”,然后添加端口转发规则,将主机端口设置为一个未被占用的端口号(例如2222),类型选择TCP,主机IP地址留空(表示监听所有接口),虚拟机IP地址填写虚拟机实际的IP(如192.168.x.x),虚拟机端口填写22。
对于Oracle VirtualBox,则需选中虚拟机,点击“设置”->“网络”->“高级”->“端口转发”,规则设置逻辑相同:主机端口2222,协议TCP,主机IP留空,子系统IP填写虚拟机IP,子系统端口22,配置完成后,在宿主机访问localhost:2222,流量就会被虚拟化软件转发给虚拟机的22端口。
执行SSH连接命令与工具使用
当网络与服务准备就绪后,即可在宿主机执行连接操作,最通用、最专业的方式是使用命令行终端。
在Linux、macOS或Windows的PowerShell/CMD中,基础连接命令为ssh username@ip_address,连接IP为192.168.1.100的虚拟机,用户名为root,则命令为ssh root@192.168.1.100,如果是NAT模式且配置了端口转发,需使用-p参数指定端口:ssh -p 2222 root@127.0.0.1。
首次连接时,系统会提示无法验证主机真实性,并显示指纹信息,输入yes接受指纹即可,这一步是防止中间人攻击的关键安全机制,随后输入虚拟机用户的密码即可登录。
除了命令行,专业的运维人员常使用Xshell、MobaXterm或PuTTY等图形化工具,这些工具支持会话管理,可以保存虚拟机的IP、端口和用户名,避免每次重复输入,在这些工具中,只需在“主机”栏填入IP,端口栏填入22或映射端口(如2222),点击连接即可。
安全加固与密钥认证优化
为了提升远程管理的安全性与效率,强烈建议配置SSH密钥认证,替代传统的密码登录,这种方式不仅安全性更高(基于非对称加密),而且免去了每次输入密码的繁琐。

在宿主机终端执行ssh-keygen -t rsa -b 4096生成一对公钥和私钥,生成过程中可以按回车使用默认路径,生成完成后,使用ssh-copy-id username@ip_address命令将公钥自动上传到虚拟机的~/.ssh/authorized_keys文件中,如果是Windows系统,可能需要手动复制公钥内容到虚拟机对应文件中。
之后,编辑虚拟机的/etc/ssh/sshd_config文件,将PasswordAuthentication设置为no,禁用密码登录,重启SSH服务后,以后连接只需依赖私钥,彻底杜绝了暴力破解密码的风险,修改默认的22端口为一个高位端口,也是防止恶意扫描的有效手段。
常见连接故障排查
在实际操作中,遇到“Connection refused”通常意味着虚拟机SSH服务未启动或防火墙拦截,此时应检查虚拟机防火墙状态(如ufw status或firewall-cmd --list-all),确保放行SSH端口,若遇到“Connection timed out”,则通常是网络层面的问题,需检查宿主机与虚拟机是否可以互相Ping通,或者NAT端口转发规则是否配置正确,在VMware中,有时需要重启宿主机的“VMware NAT Service”服务来解决网络异常。
相关问答
Q1:虚拟机SSH连接速度很慢,每次都要等很久才提示输入密码,是什么原因?
A: 这通常是因为SSH服务器端开启了DNS反向解析功能,导致服务器在客户端登录时尝试解析客户端的IP地址的主机名,若解析超时就会卡顿,解决方法是编辑虚拟机的/etc/ssh/sshd_config文件,找到UseDNS项,将其设置为no,然后重启SSH服务即可显著提升连接速度。
Q2:在NAT模式下,宿主机能Ping通虚拟机,但SSH连接不上,为什么?
A: 这种情况通常是因为虚拟机内部的防火墙默认拒绝了入站连接,或者SSH服务监听的地址不对,首先检查虚拟机防火墙是否放行TCP 22端口;检查sshd_config中ListenAddress是否设置为0.0.0或具体IP,而非仅监听0.0.1,如果使用了端口转发,请确认宿主机连接的是0.0.1加上映射端口,而不是虚拟机的局域网IP。
如果您在配置SSH虚拟机的过程中遇到特殊的网络环境或报错信息,欢迎在评论区留言,我们将为您提供更具体的排查思路。


















