putty连接虚拟机失败,大概率不是putty本身的问题,而是虚拟机网络、SSH服务、防火墙这三处配置没对齐,按本文顺序检查,几分钟内就能定位并解决。很多新手在第一步就卡住了,因为根本不知道从哪个环节排查,下面直接按权重从高到低拆解,每一步都给具体命令和操作路径。
排查思路:putty连接虚拟机失败先看这三个环节
putty本质上是一个SSH客户端,它做的事就是通过网络协议连接到虚拟机的22端口。putty连接虚拟机失败,只可能发生在三个层面:网络不通、端口没监听、数据被拦截,这三个层面对应三个快速自查命令,新手在虚拟机终端里依次执行就行。
-
查看虚拟机IP地址,确认你填的IP没写错:
ip addr show注意看ens33或eth0这类网卡下的inet值,格式类似192.168.x.x,如果你看到的是127.0.0.1或169.254.x.x,说明网卡没获取到有效IP,这是最常见的原因之一。
-
查看SSH服务是否在运行:
systemctl status sshd如果显示active (running),说明服务正常,如果报错或显示inactive,说明SSH服务没起来,Ubuntu系统可能显示的是ssh.service,名称略有不同。
-
查看22端口是否在监听:
netstat -tlnp | grep 22这个命令能直接看到sshd进程是否绑定了0.0.0.0:22或具体IP的22端口。
行业内不少运维人员习惯用telnet或nc做端口连通性测试,但新手阶段不建议,因为会引入防火墙干扰判断,先跑上面三个命令,把问题范围缩小,再针对性处理。
putty连接ubuntu虚拟机连不上?多半是SSH服务没开启
Ubuntu桌面版默认不安装或不启用SSH服务,这是putty连接ubuntu虚拟机连不上最常见的原因,很多新手用的是桌面版镜像,装完虚拟机直接用putty去连,结果必然超时,行业共识认为,桌面版追求开箱即用的图形界面体验,默认不启用来宾SSH访问以免暴露端口。
解决方式很简单,在虚拟机里打开终端,执行安装并启动:
sudo apt update
sudo apt install openssh-server -y
sudo systemctl start ssh
sudo systemctl enable ssh
装完确认一下状态,看到active (running)就说明SSH已经就绪,这里有个重要的隐蔽点,Ubuntu 18.04及之后版本的服务名是ssh而不是sshd,如果你习惯用systemctl status sshd查,会提示找不到单元文件,但这不代表服务没装好。

如果确认服务已经运行,putty还是连不上,那就要看IP获得得合不合理,用dhclient手动续租一下IP试试:
sudo dhclient -r
sudo dhclient
然后重新执行ip addr show看IP是否变化,如果是NAT模式,虚拟机一般能在192.168.x.x或10.0.2.x网段拿到地址。
网络配置导致putty连接虚拟机超时怎么解决
putty连接虚拟机超时,说明客户端发出的数据包根本没到虚拟机,或者回复包没回来,这种情况下,问题通常在虚拟机的网络模式配置上,虚拟机的网络模式就是VirtualBox或VMware里那个看似不起眼的下拉选项,但影响巨大。
- NAT模式(默认):虚拟机共享宿主机的IP对外访问,外部设备(包括宿主机本身)默认无法直接访问虚拟机,这时候putty连不上不是bug,是NAT的正常行为。
- 桥接模式(Bridged):虚拟机像一台独立设备接入宿主机所在局域网,有自己独立的局域网IP,这个模式下,宿主机可以直接用虚拟机的局域网IP去连。
- 仅主机模式(Host-Only):虚拟机只能和宿主机通信,无法访问外网,这种模式适合测试但不符合一般场景。
如果你的虚拟机是NAT模式,又不想改成桥接,可以在VirtualBox里设置端口转发,把宿主机的2222端口转发到虚拟机的22端口,具体路径是:虚拟机设置 -> 网络 -> 高级 -> 端口转发,添加一条规则,协议TCP,主机端口2222,子系统端口22,之后putty连接地址填127.0.0.1,端口2222,就能绕过NAT限制直接连上。
VMware用户路径类似:虚拟机设置 -> 网络适配器 -> NAT模式,然后在编辑 -> 虚拟网络编辑器中设置NAT端口转发,相比传统NAT模式,业内更推荐新手直接选桥接模式,因为它最接近真实物理机的网络环境,排查问题时变量更少。
防火墙和安全组拦路:putty连接linux虚拟机拒绝连接的原因之一
putty连接linux虚拟机拒绝连接的报错,和超时不一样,说明网络能通,但目标端口被主动拒绝了,这时检查虚拟机防火墙,以及云平台安全组(如果你用的是云服务器而非本机虚拟机)。
主流Linux防火墙交互工具有firewalld和ufw,记住一条规则:优先放行22端口,而不是关掉防火墙。
- CentOS / RHEL系列(firewalld):
sudo firewall-cmd --add-port=22/tcp --permanent sudo firewall-cmd --reload sudo firewall-cmd --list-all
- Ubuntu / Debian系列(ufw):
sudo ufw allow 22/tcp sudo ufw reload sudo ufw status
如果你的虚拟机是Windows Server,对应的排查路径是:控制面板 -> Windows Defender防火墙 -> 高级设置 -> 入站规则,找到"文件和打印机共享(回显请求 - ICMPv4-In)"这一条,确认它处于允许状态,很多Windows虚拟机能ping通但putty连不上,就是因为入站规则里禁用了SSH相关的端口。
另外还要留意SELinux,这是CentOS系统独有的安全模块,运行在防火墙更底层:
sudo setenforce 0
执行后如果putty能连上了,说明SELinux拦截了SSH连接,需要去看audit日志或者调整布尔值,不过setenforce 0只是一次性临时生效,重启后还会恢复,正式解决需要用semanage命令放行相关端口或上下文。
新手常见的putty配置误区和端口设置
你做了上面所有排查,服务在跑、网络通、防火墙放行,但putty还是连不上,那最后一步回来看putty本身,新手最常见的三个配置误区:
-
端口填错:默认端口是22,不是2222或22后面的空白,有些教程教人用其他端口登录,但你如果照抄命令改了sshd_config,端口就变了,putty的Port栏必须与sshd_config里的Port一致,查看方式:
sudo grep 'Port' /etc/ssh/sshd_configputty连接ubuntu虚拟机时,这个文件通常默认是22,但如果之前有人改过,就会对不上。
-
协议选错:putty左侧Connection type选的是SSH,不是Telnet也不是Raw,Telnet走23端口,Raw不走加密,属于历史遗留选项,用了多半报错。
-
用户名填错:putty打开后第一行填的是Host Name(IP),第二行Port(22),第三行Connection type(SSH),但Auto-login username不能在这个界面填,要在Connection -> Data里填,如果你填错了用户名,SSH会直接断连,很多新手以为是密码错,其实是用户名输在主界面错误位置了。
端口修改后的情况特殊,如果你确实改了SSH端口(比如改成22026),那连接时就要用:
ssh -p 22026 用户名@IP
在putty里对应改成Port 22026,其他不用动,改端口能减少大量扫描攻击,但相应地连接时多了一个步骤,新手权衡后决定即可。
从IP到服务:putty连接虚拟机失败怎么办的完整自查清单
这些配置全部对齐之后,putty连接虚拟机失

败的概率基本为零,说实话,大多数情况就集中在IP地址填错和SSH服务没装这两件事上,尤其刚装完系统,虚拟机IP和宿主机不在同一网段,或者桌面版Ubuntu没装openssh-server,这两个坑几乎能覆盖一半以上的新手求助,而QQ群或论坛里很多老鸟的回复之所以让新手听不明白,是因为默认你知道了很多前置概念。
按下面的清单自查一遍,逐项打钩:
- 虚拟机网络模式属于NAT还是桥接,知晓自己该填哪个IP
- 虚拟机的IP和宿主机的IP是否在同一网段,互通确认
- SSH服务已安装,正在运行,开机自启已设置
- 22端口已监听,用netstat确认
- 防火墙已放行22/tcp,SELinux未拦截
- putty端口是22,连接类型是SSH,用户名大小写正确
- 最后尝试用ping命令确认IP是否通(防火墙允许ICMP的情况)
最后一招相对暴力,但也有效:直接关机重启虚拟机,再重新看IP,DHCP租约问题、网卡驱动加载失败这些偶发情况,重启后通常能自动恢复正常,如果重启后IP变了,putty连接虚拟机时就要填新IP,这个细节也容易让人误判,另外注意一下,VirtualBox默认给NAT模式网段分配IP的机制在不同版本间有细微差异,有些版本是10.0.2.15,有些是192.168.56.x,以ip addr show输出的实际值为准,别凭记忆填数据。
Q&A:putty连接虚拟机失败排查常见问题
putty显示Connection refused,但虚拟机里SSH服务明明是running,这是为什么?
答:Connection refused表示数据到达了目标机器,但目标机器上对应的端口没有监听或被拒绝,先用netstat -tlnp | grep 22确认sshd绑定的地址和端口,注意看是0.0.0.0:22还是127.0.0.1:22,后者说明sshd只监听本地回环地址,检查/etc/ssh/sshd_config里的ListenAddress和Port配置,改了配置后执行sudo systemctl restart ssh重启生效,之后再从putty连接。
putty连接时一直卡在Network error: Connection timed out,但虚拟机可以ping通宿主机,问题出在哪里?
答:虚拟机ping通宿主机说明虚拟机到宿主机的单向流量是通的,但putty的流量方向是宿主机到虚拟机的SSH端口,超时通常意味着虚拟机防火墙拦截了入站22端口流量,在虚拟机里执行sudo iptables -L -n查看是否有DROP规则,同时确认firewalld或ufw是否放行了22端口,另一类情况是虚拟机安全组或宿主机的第三方安全软件拦截了虚拟机网卡流量,暂时关闭安全软件测试即可判断。