fz连接虚拟机失败时,多数情况下问题不在软件本身,而是虚拟机的网络模式、IP地址或SSH服务没配好;先把网络切成桥接模式并固定IP,再检查22端口,基本就能解决。
刚接触Linux虚拟机的朋友,几乎都用过fz这类SSH工具,它能让你在Windows桌面上直接操作虚拟机,省去来回切换窗口的麻烦,可现实往往不顺利,连不上、卡死、提示拒绝连接,各种问题能把人逼疯,下面按最常见的问题场景逐一拆解,每步都可直接照着操作。
fz连接虚拟机失败?先找出卡住的那一层
连接失败分很多种,但排查路径其实有固定套路,别急着反复点重试,按顺序看三件事:fz本身、虚拟机的网络、虚拟机的SSH服务,这三层任何一层出问题,结果都一样连不上,但处理方法完全不同。
fz连接虚拟机一直失败,先验证工具本身是否正常
打开fz,点击快速连接的界面,先别填虚拟机IP,直接在Windows的命令行窗口(Win+R输入cmd回车)里执行:
ping 虚拟机IP
能收到回应,说明网络链路通着,没回应,先看虚拟机的IP到底是多少,如果压根不知道虚拟机IP,就在虚拟机里打开终端,输入:
ip addr
看到类似168.x.x或x.x.x的地址,这个就是你的目标,没有IP,说明虚拟机网卡没拿到地址,重启网络服务试试:
sudo systemctl restart NetworkManager
ping通了但fz依然提示拒绝连接或超时,那问题在SSH服务或防火墙,往下看。
fz连接虚拟机提示拒绝连接?查端口和防火墙
报错是“Connection refused”而不是“timed out”,这其实是个好消息,说明网络是通的,只是虚拟机上的22号端口没人听,依次执行:
sudo systemctl status sshd sudo systemctl start sshd sudo systemctl enable sshd
如果系统提示Unit sshd.service not found,说明装的是openssh-server,安装命令根据发行版不同有差异,Debian/Ubuntu系:
sudo apt install openssh-server
CentOS/RHEL系:
sudo yum install openssh-server
装好再启动,然后检查防火墙是否放行了22端口:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
如果是Ubuntu自带的ufw防火墙:
sudo ufw allow 22
这步做完,绝大多数“拒绝连接”的问题都能解决。
fz连不上虚拟机但只能ping通网关?手动指定允许IP网段
有一种情况很隐蔽:虚拟机的网络配置只允许来自特定网段的主机连接SSH,如果你在虚拟机里修改过sshd_config,比如加了AllowUsers或AllowGroups,那IP不在白名单里,fz无论怎么试都会被拒,解决办法是编辑配置文件:
sudo vim /etc/ssh/sshd_config
确认文件里没有AllowUsers或AllowGroups的限制,或把你Windows主机的IP加进去,改完重启服务:
sudo systemctl restart sshd
fz连接虚拟机卡慢,问题多半在握手策略
能连上但卡顿、命令半天才回一句,这比连不上更折磨人,尤其是输入一条命令要等好几秒,排查起来优先级从高到低排列。
fz连接虚拟机越来越卡是DNS解析在拖后腿
在fz里执行命令时,如果虚拟机尝试反向解析连接来源的IP,而DNS服务器又没配好,会白白等好几秒,最明显的特征是:登录时慢,进去后敲回车都快,在fz的设置里,找到“连接”-“SSH”-“隧道转发”相关选项,关闭DNS反向解析功能,同时在Linux端,编辑/etc/ssh/sshd_config,确认下面这行没被注释掉且参数为no:
UseDNS no
改完重启sshd,这一招能解决大部分“卡在登录界面但最后能进”的问题。
换个优化算法试试,fz连接虚拟机传文件慢有救
传文件慢则是另一回事,fz传文件走的是SFTP协议,速度受加密算法和TCP窗口影响,可以在fz的会话属性里,把压缩选项设为“禁用”,或者降低加密算法优先级,Linux端也可以加大SFTP传输缓冲区,修改/etc/ssh/sshd_config:
Subsystem sftp internal-sftp
然后加一行:
-sftp-server -u 1024 -l 1000
重启服务后重新连接,传输速度会有一定提升。
fz连接局域网虚拟机,桥接模式是最省心的解法
VMware和VirtualBox的虚拟机默认网络模式不太一样,术语比较多,但实际需要记住的只有两种:桥接模式和仅主机模式。
先弄懂fz连接虚拟机桥接模式和仅主机模式的本质区别
| 模式 | IP段特征 | 能不能被外部设备访问 | 虚拟机能否上网 |
|---|---|---|---|
| 桥接模式 | 与宿主机同一网段 | 可以 | 可以 |
| NAT模式 | 不与宿主机同段 | 受限 | 可以 |
| 仅主机模式 | 私有网段 | 只有宿主机可以 | 不可以 |
行业共识认为,桥接模式就像把虚拟机变成局域网里的另一台独立电脑,它和Windows主机平级,fz连接时最稳定,不用额外配置端口转发,NAT模式下,Windows主机能访问虚拟机,但虚拟机访问Windows或其他局域网设备的路由比较绕。
所以如果你有频繁用fz连接的刚需,建议直接在虚拟机的网络设置里换成桥接模式,以VMware为例,右键虚拟机-设置-网络适配器,选择“桥接模式”,并在虚拟网络编辑器中确认桥接到你Windows当前正在用的物理网卡,在VirtualBox里则是设置为“桥接网卡”。
顺便解决fz连接虚拟机IP变了又连不上的问题
桥接模式遇到的最大问题是:IP会随着路由器DHCP分配变化而变化,今天连得通,明天虚拟机IP变了,fz里保存的会话配置还是旧地址,自然连不上,两个办法能彻底根治:
固定IP:编辑Linux的网络配置文件,基于Netplan的Ubuntu系统,修改/etc/netplan/01-network-manager-all.yaml,把DHCP改成静态地址,基于ifcfg的CentOS系统,编辑/etc/sysconfig/network-scripts/ifcfg-ens33,将BOOTPROTO=dhcp改为BOOTPROTO=static,并添加IPADDR、NETMASK、GATEWAY、DNS1,改完重启网络服务。
fz里保存主机名:不要以IP创建会话,改填虚拟机的主机名,但这要求局域网内DNS能解析,普通家用路由器不太可靠,所以固定IP是更稳妥的路径。
fz连接虚拟机固定IP后连不上,多半是网段变了
固定IP后连不上,先看Windows的IP是不是换了网段,公司网络切了Wi-Fi、出差换了网络环境,Windows主机的IP网段会变,虚拟机的静态IP还在旧网段,两边自然不同路,解决办法是重新修改Linux的静态IP,和Windows保持同一网段、不同主机号,Windows本机IP用ipconfig查看。
一张表搞清fz连接虚拟机的完整配置清单
把前面的操作总结成一段可执行的完整流程,假设你的Windows主机IP是168.1.100,虚拟机想设为168.1.150,
- 虚拟机网络模式选桥接模式
- Linux里配置静态IP为
168.1.150,子网掩码255.255.0,网关填Windows主机的网关(通常是168.1.1) - Windows cmd里
ping 192.168.1.150,通 - fz新建会话:主机填
168.1.150,端口22,用户名填Linux系统的用户名 - 连接时如果提示密钥指纹,选“接受并保存”
完整操作命令按顺序整理如下:
sudo vim /etc/netplan/01-network-manager-all.yaml
sudo netplan apply
sudo systemctl restart sshd
ip addr # 确认IP生效
从开始排查到成功连接,整个过程在顺畅的情况下用时几分钟,其中真正等时间的是安装openssh-server和重启服务。
fz连接失败常见疑问解答
fz连接虚拟机一直显示正在连接,最后超时怎么弄
先确认Windows防火墙是否拦截了出站连接,在Windows安全中心里检查防火墙是否允许fz通过;再确认虚拟机防火墙状态可执行sudo systemctl stop firewalld临时测试,若停了就通,说明防火墙规则没写对,重新按前面步骤放行22端口。
fz连接虚拟机提示密钥错误是什么情况
这是虚拟机在重装系统、或ssh服务重新生成主机密钥后,Windows端的fz里还保存着旧的密钥信息,在fz的会话管理里找到对应的主机记录,删除旧密钥记录,重新连接并选择接受新密钥即可。
用FinalShell连卡,换Xshell是不是会好一点
如果卡顿原因是虚拟机的网络性能瓶颈,换任何工具都无效,如果卡顿原因是软件自身的渲染和缓存策略,FinalShell占用资源偏高是事实,Xshell的响应体感上会更轻快,但更根本的,还是先把虚拟机的UseDNS关掉、检查宿主机内存是否被虚拟机吃满,换工具不如先排查环境,多数情况下卡顿来自前者。