SecureCRT SSH连接虚拟机失败,本质上是网络链路、SSH服务、防火墙或密钥配置中的某一环出了问题,按“网络层→服务层→配置层”顺序排查,多数情况下能在几分钟内解决。
很多朋友在VMware或VirtualBox里装好Linux,兴冲冲打开SecureCRT准备连接,结果提示“Connection refused”或“No route to host”,本文直接给你一套可落地的排查流程,每条命令都对应一个具体故障点,照着敲就行。
快速定位:用排除法缩小故障范围
先问自己三个问题,能帮你节省大量时间:
- 虚拟机里能上网吗? 如果能,说明网卡驱动和基本网络配置没问题。
- 宿主机能ping通虚拟机吗? 能通,说明物理链路和IP地址没问题。
- 虚拟机本地SSH能用吗? 能用,说明SSH服务本身是好的。
这三个问题的答案组合起来,基本能锁定90%的故障方向,如果宿主机ping不通虚拟机,重点看网络模式;如果能ping通但SecureCRT连不上,重点看服务端口和防火墙。
第一优先:SSH服务是否真的在运行
行业共识认为,超过一半的“连接被拒绝”是因为虚拟机里的SSH服务压根没启动,新装的Linux发行版(尤其是最小化安装)默认不带SSH服务端,需要手动安装开启。
检查并启动SSH服务
在虚拟机终端里执行以下命令:
# 查看SSH服务状态(适用于systemd系统) systemctl status sshd # 如果显示 inactive (dead),启动它 sudo systemctl start sshd # 设置开机自启 sudo systemctl enable sshd
对于Ubuntu/Debian系,服务名可能是ssh而不是sshd:
sudo systemctl status ssh sudo systemctl start ssh
没有安装怎么办
如果提示找不到命令,先安装OpenSSH Server:
# CentOS/RHEL/Fedora sudo yum install -y openssh-server # Ubuntu/Debian sudo apt update && sudo apt install -y openssh-server
安装完顺手启动并设为自启,判断SSH服务是否正常监听,用这条命令:
ss -tlnp | grep 22
看到0.0.0:22或::22的LISTEN状态,说明服务已正常监听,什么都没输出?说明根本没起来,回头检查上面两步。
第二优先:网络连通性securecrt连接linux虚拟机提示网络不通的排查
这是SecureCRT连接不上虚拟机最常见的报错场景,它提示的是网络层问题,也就是数据包根本没送到虚拟机手里,这里有个常见认知误区:虚拟机本地能上网,不代表宿主机能连上它。
确认IP地址归属
在虚拟机里执行ip addr查看当前IP地址,看看是168.x.x、x.x.x
还是x.x.x,然后确认你的宿主机网卡是否和它处于同一网段。
举例:虚拟机IP是168.10.128,宿主机VMnet8网卡IP是168.10.1,这就是同网段,可以通,如果宿主机是168.1.100,那就不通,要看下面的网络模式调整。
实测ping的语义
- ping虚拟机不通,ping网关通:虚拟机IP配置可能和实际网段冲突,或者子网掩码有误。
- ping虚拟机通,SecureCRT拒绝连接:跳过网络段,看SSH端口和防火墙。
- ping网关都不通:虚拟机网卡驱动没加载,或者NetworkManager服务异常,检查
systemctl status NetworkManager。
修改VMware网络模式适配
VMware有三种经典网络模式,对应不同场景需求,业内专家指出,连接失败且需要固定IP的场景下,桥接模式是首选,因为它让虚拟机和宿主机在物理网络中平起平坐。
| 网络模式 | 虚拟机IP特征 | 宿主机访问能力 | 外网能力 | 适合场景 |
|---|---|---|---|---|
| NAT(VMnet8) | 168.x.x | 默认可访问 | 共享宿主IP上网 | 临时测试 |
| 桥接(VMnet0) | 与局域网同网段 | 无NAT限制 | 独立IP直连 | 生产模拟 |
| 仅主机(VMnet1) | 168.x.x | 仅宿主机可达 | 不可上网 | 安全隔离 |
如果你用的是仅主机模式,虚拟机可以上网,但宿主机反而可能连不上(因为该模式本身就不提供NAT转发给外部),调整方式:VMware菜单栏→编辑→虚拟网络编辑器,选择对应网卡改成桥接模式,然后在虚拟机内重启网卡:
sudo ifdown ens33 && sudo ifup ens33
注意网卡名可能是ens33、ens160或eth0,用ip addr确认后再操作。
第三优先:防火墙securecrt ssh连接虚拟机超时的隐形杀手
如果ping能通,但SecureCRT提示“Connection timed out”,十有八九是防火墙把22端口丢了,Linux防火墙体系分为iptables和firewalld(CentOS 7+)/ufw(Ubuntu)两套,你至少需要确认其中一套没拦住SSH。
firewalld(RHEL/CentOS系)
# 查看防火墙状态 sudo firewall-cmd --state # 永久放行SSH服务 sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload # 确认规则已生效 sudo firewall-cmd --list-services
ufw(Ubuntu/Debian系)
sudo ufw status sudo ufw allow 22/tcp sudo ufw reload
iptables底层规则
如果你用的是纯iptables管理(部分云镜像或自定义系统),需要显式加一条:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo service iptables save
有时候防火墙默认策略是REJECT,光加ACCEPT还不够,先看默认策略:
sudo iptables -L INPUT -n --line-numbers
默认策略是DROP或REJECT的话,显式添加放行规则后,还要确认规则顺序在REJECT之前,规则太多嫌麻烦,直接临时清空测试:
sudo iptables -F
清空以后如果能连上,说明就是防火墙规则冲突,老老实实按上面步骤重新配置,注意生产环境别这么搞,虚拟机上排障无所谓。
SELinux的干扰
CentOS等系统的SELinux可能拦截SSH访问,虽然概率不高但确实出现过,查看状态:
getenforce
如果返回Enforcing,临时测试用setenforce 0关掉,然后尝试连接,能连上的话,说明SELinux布尔值需要调整,执行:
setsebool -P ssh_sysadm_login on
第四优先:SSH服务配置端口与监听地址
SSH服务配置错了,也会导致SecureCRT怎么都连不上,这里有两个极易忽略的点:
端口被修改了
默认22被很多人改掉以防扫描,检查虚拟机内/etc/ssh/sshd_config里的Port字段,如果是2222、22026之类,SecureCRT里连接的端口也得跟着改。
grep -i "^Port" /etc/ssh/sshd_config
监听地址限制
有些服务器出于安全考虑,把监听地址绑在特定IP上:
grep -i "ListenAddress" /etc/ssh/sshd_config
默认是注释状态,也就是监听所有网卡,如果你发现这里被配置成了0.0.1,那SSH只接受本机回环连接,外部跨机器连接必然失败,把它注释掉或改成0.0.0,然后重启服务。
RSA密钥算法兼容问题
新版OpenSSH(8.8+)默认禁用了RSA算法的SHA-1签名,而SecureCRT旧版本(8.x以下)可能存在兼容问题,这属于老客户端连新服务器的经典困境,解决办法是修改sshd_config追加:
# 在sshd_config末尾加入
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
然后重启sshd,反过来,如果虚拟机是CentOS 6这种老系统,SecureCRT新版可能因为算法不一致报错“Key exchange failed”,则需要在SecureCRT的会话选项→SSH2→密钥交换里勾选diffie-hellman-group-exchange-sha1等旧算法。
第五优先:虚拟机网络适配器本身
都不行?可能是虚拟机网卡驱动或VMware工具没装好。装了VMware Tools对网络性能提升有极大帮助,尤其在网卡类型选择上。
更换网卡类型
关闭虚拟机,在VMware设置里把网络适配器类型从VMXNET3换成E1000E(或反过来),然后重启虚拟机,有些老旧Linux内核对半虚拟化驱动支持不好,换E1000系列兼容性更好。
VMware虚拟网络编辑器的还原
VMware的虚拟网络服务偶尔会抽风,打开虚拟网络编辑器,点击左下角“更改设置”,依次执行:
- 选中VMnet8(NAT模式),点击“还原默认设置”。
- 等它重置完成,重新配置子网IP。
- 把DHCP服务重新启动一遍。
这一步适用于VMware中NAT模式突然不通、SecureCRT连接VMware虚拟机失败的场景,很多老鸟会用这招救急。
Q&A:securecrt连接虚拟机失败的三个高频补充问题
SecureCRT提示“The server has disconnected with error (code 0)”,但SSH服务明明是启动的,怎么回事?
排查方向:这通常是输入了错误的用户名重启了sshd服务,或者虚拟机磁盘满了导致无法建立新会话,先看磁盘空间:df -h确认根分区没有100%占用,尤其是/tmp和/var目录,再试着重启sshd:sudo systemctl restart sshd,如果用普通用户登录被拒,检查AllowUsers或DenyUsers配置项是否限制了登录名单。
从Windows宿主机能ping通虚拟机,但SecureCRT连接其他虚拟机正常,只有这台连不上?
排查顺序:先对比两台虚拟机的网络配置差异,重点看/etc/sysconfig/network-scripts/ifcfg-ens33(CentOS)或/etc/netplan/.yaml(Ubuntu),如果IP是静态配置,检查网关是否填错常见问题是子网掩码那行被错写成255.0.0,导致路由表计算异常,另外注意如果有多个网卡同时启用,可能存在路由优先级冲突,用ip route show查看默认路由是否指向正确网卡。
SecureCRT连接后过几分钟就自动断开,怎么解决?
这类问题前缀是“Connection closed by remote host”,大概率是SSH空闲超时或防火墙连接追踪表超时,在sshd_config里设置保活参数:
ClientAliveInterval 60
ClientAliveCountMax 3
最后这个数值代表服务器端每60秒向客户端发一次保活探测,连续3次没回应就断开,相当于允许3分钟无响应,客户端侧在SecureCRT的会话选项→连接设置里,勾选“发送保活消息”,间隔填60秒。
SecureCRT连接虚拟机失败,百分之九十逃不出SSH服务、网络模式、防火墙这三座大山,按本文顺序排查,从服务监听状态到防火墙规则逐一验证,大概率在五分钟内找到问题所在,记住一个核心原则:先保证虚拟机能被宿主机ping通,再谈SSH层配置,这条链路理清了,大部分连接问题都能迎刃而解。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/635257.html





