虚拟机报错:Linux[failed to connect to workstation port 80: no rotue to host]non-zero return code...如何解决?
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
📌 特别说明:
文中问题案例来源于真实生产环境与公开技术社区,并结合多位一线资深工程师与架构师的长期实践经验,经过人工筛选与AI系统化智能整理后输出。文中的解决方案并非唯一“标准答案”,而是兼顾可行性、可复现性与思路启发性的实践参考,供你在实际项目中灵活运用与演进。
欢迎订阅本专栏,一次订阅后,专栏内所有文章可永久免费阅读,后续更新内容皆不用再次订阅,持续更新中。
📢 问题描述
详细问题描述如下:
虚拟机报错:
Linux[failed to connect to workstation port 80: no rotue to host]non-zero return code
运行这个代码后就出现下面的问题了:
[greg@control ansible]$ ansible all -a 'yum -y install ftp'
[failed to connect to workstation port 80: no rotue to host]non-zero return code
如下是相关报错截图:

全文目录:
📣 请知悉:如下方案不保证一定适配你的问题!
如下是针对上述问题进行专业角度剖析答疑,不喜勿喷,仅供参考:
✅️ 问题理解
从截图和错误信息来看,这是一个 RHEL/CentOS Stream 9(EX294 考试环境) 中通过 Ansible 批量安装 ftp 包时触发的问题 🔍
核心错误:
Curl error (7): Couldn't connect to server for
http://workstation.lab.example.com/materials/RPM-GPG-KEY-redhat-release
[Failed to connect to workstation.lab.example.com port 80: No route to host]
non-zero return code
问题本质: yum/dnf 在安装包成功后,尝试去 workstation.lab.example.com 拉取 GPG Key 做签名校验,但该主机 80 端口不可达(No route to host),导致 GPG key 验证失败,返回 non-zero return code,Ansible 判定任务失败。

关键观察点:
ftp包实际已下载完成([SKIPPED] ftp-0.17-89.el9.x86_64.rpm: Already downloaded)- 安装来自
EX294_STREAM仓库,是本地/考试环境自定义源 serverd | FAILED | rc=1、serverc | FAILED | rc=1说明是多台被控节点都失败- 这是 EX294 红帽考试/练习环境 的典型网络拓扑问题
✅️ 问题解决方案
🟢 方案 A:在 repo 配置中关闭 GPG 检查(推荐 ⭐⭐⭐)
直接在问题 repo 的配置文件中将 gpgcheck 设为 0,从根源解决验证失败问题。
在 control 节点操作,批量修改所有被控机:
# 先查看被控机的 repo 文件位置
ansible all -a 'ls /etc/yum.repos.d/'
# 查看具体 repo 内容,找到 EX294_STREAM 对应的 repo 文件
ansible all -a 'cat /etc/yum.repos.d/EX294_STREAM.repo'
编写 Ansible Playbook 批量修改(推荐):
# fix_gpgcheck.yml
---
- name: Fix GPG check issue for EX294 repo
hosts: all
become: yes
tasks:
- name: Disable gpgcheck in all repo files
shell: |
sed -i 's/^gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/*.repo
- name: Clean yum cache
shell: yum clean all
- name: Install ftp package
yum:
name: ftp
state: present
# 执行 playbook
ansible-playbook fix_gpgcheck.yml
# 执行完后再安装 ftp
ansible all -a 'yum -y install ftp'
或者用一条 Ad-hoc 命令直接改:
# 批量关闭 gpgcheck
ansible all -b -a "sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/EX294_STREAM.repo"
# 然后再安装
ansible all -b -a 'yum -y install ftp'
🟡 方案 B:修复 workstation 的路由/网络可达性
如果你的实验环境中 workstation 必须可达(考试环境标准拓扑),需要检查网络配置:
第一步:检查 workstation 是否能 ping 通
# 在 control 节点测试
ping -c 3 workstation.lab.example.com
# 在被控节点测试
ansible all -a 'ping -c 3 workstation.lab.example.com'
第二步:检查 /etc/hosts 解析
# 查看 control 节点 hosts
cat /etc/hosts
# 查看所有被控节点 hosts
ansible all -a 'cat /etc/hosts'
标准 EX294 环境 /etc/hosts 应包含:
172.25.250.254 workstation.lab.example.com workstation
172.25.250.10 servera.lab.example.com servera
172.25.250.11 serverb.lab.example.com serverb
172.25.250.12 serverc.lab.example.com serverc
172.25.250.13 serverd.lab.example.com serverd
第三步:检查路由
# 在 serverd 上检查路由表
ansible serverd -b -a 'ip route show'
# 检查网卡状态
ansible all -b -a 'nmcli device status'
# 如果网卡未激活
ansible all -b -a 'nmcli connection up eth0'
第四步:检查 workstation 的 httpd 服务
# 在 workstation 上执行
systemctl status httpd
systemctl start httpd
systemctl enable httpd
# 检查防火墙
firewall-cmd --list-all
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
🔴 方案 C:使用 Ansible 的 yum 模块代替 ad-hoc shell 命令
直接用 yum 模块,可以通过参数控制行为,更稳定:
# install_ftp.yml
---
- name: Install ftp on all hosts
hosts: all
become: yes
tasks:
- name: Install ftp
yum:
name: ftp
state: present
disable_gpg_check: yes # 关键参数!跳过 GPG 检查
ansible-playbook install_ftp.yml
或用 Ad-hoc 方式:
# 使用 ansible yum 模块(注意不是 -a 直接执行命令)
ansible all -b -m yum -a 'name=ftp state=present disable_gpg_check=yes'
✅️ 问题延伸
1. EX294 考试环境标准网络拓扑

2. 为什么会出现 “No route to host”
| 原因 | 描述 | 检查命令 |
|---|---|---|
| workstation httpd 未启动 | 80 端口没有监听 | systemctl status httpd |
| 防火墙拦截 | firewalld 阻止了 80 端口 | firewall-cmd --list-all |
| 网络接口未激活 | 被控机网卡未启动 | nmcli device status |
| /etc/hosts 缺少解析 | 域名无法解析到正确IP | cat /etc/hosts |
| 虚拟机网络模式问题 | VMware 网络适配器配置错误 | VMware 网络设置 |
3. Ansible 返回码说明
# rc=1 代表命令执行失败(非零返回)
# Ansible 的 -a 参数执行 shell 命令时,
# 任何非零返回码都会被标记为 FAILED
# 使用 ignore_errors 临时忽略(仅用于调试)
ansible all -b -a 'yum -y install ftp' --ignore-errors
# 注意:ad-hoc 没有 ignore_errors 参数,需要在 playbook 中使用
✅️ 问题预测
| 后续可能的问题 | 原因分析 | 预防/解决方式 |
|---|---|---|
| 修改 gpgcheck=0 后在考试中被扣分 | 生产环境不推荐关闭 GPG | 优先修复网络可达性 |
| 其他包安装也报同样错误 | 所有包都走同一个有问题的 repo | 统一修改 repo 配置 |
| workstation 重启后 httpd 未自启 | 未设置 enable | systemctl enable httpd |
| Ansible 连接被控机失败 | SSH key 未配置 | ssh-copy-id 到各节点 |
become 权限不足 |
sudo 未配置 | 检查 /etc/sudoers |
| 修改 hosts 后 DNS 仍然失败 | nscd 缓存未刷新 | systemctl restart nscd |
✅️ 小结
🎯 问题核心: 被控节点安装 ftp 包后,yum/dnf 尝试从 workstation.lab.example.com:80 拉取 GPG Key 做签名验证,但 workstation 的 HTTP 服务不可达,导致验证失败,Ansible 判定任务失败。
注意:ftp 包本身已经安装成功! 报错只是 GPG Key 验证阶段失败。
快速排查优先级:
# Step 1: 确认 ftp 是否真的装上了
ansible all -b -a 'rpm -q ftp'
# Step 2: 检查 workstation httpd
ssh workstation 'systemctl status httpd'
# Step 3: 如果 httpd 未启动,启动它
ssh workstation 'systemctl start httpd && systemctl enable httpd'
# Step 4: 再次执行安装,应该成功
ansible all -b -m yum -a 'name=ftp state=present'
选方案建议:
- 🟢 考试/临时环境 → 直接
disable_gpg_check或gpgcheck=0,最快解决 - 🟡 标准学习环境 → 修复 workstation httpd 服务,还原正确拓扑
- 🔴 生产环境参考 → 务必保持 GPG 验证,确保网络可达性 💪✨
🌹 结语 & 互动说明
希望以上分析与解决思路,能为你当前的问题提供一些有效线索或直接可用的操作路径。
若你按文中步骤执行后仍未解决:
- 不必焦虑或抱怨,这很常见——复杂问题往往由多重因素叠加引起;
- 欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区;
- 我会在力所能及的范围内,结合大家的反馈一起帮你继续定位 👀
💡 如果你有更优或更通用的解法:
- 非常欢迎在评论区分享你的实践经验或改进方案;
- 你的这份补充,可能正好帮到更多正在被类似问题困扰的同学;
- 正所谓「赠人玫瑰,手有余香」,也算是为技术社区持续注入正向循环
🧧 文末福利:技术成长加速包 🧧
文中部分问题来自本人项目实践,部分来自读者反馈与公开社区案例,也有少量经由全网社区与智能问答平台整理而来。
若你尝试后仍没完全解决问题,还请多一点理解、少一点苛责——技术问题本就复杂多变,没有任何人能给出对所有场景都 100% 套用的方案。
如果你已经找到更适合自己项目现场的做法,非常建议你沉淀成文档或教程,这不仅是对他人的帮助,更是对自己认知的再升级。
如果你还在持续查 Bug、找方案,可以顺便逛逛我专门整理的 Bug 专栏👉《全栈 Bug 调优(实战版)》👈️
这里收录的都是在真实场景中踩过的坑,希望能帮你少走弯路,节省更多宝贵时间。
✍️ 如果这篇文章对你有一点点帮助:
- 欢迎给 bug菌 来个一键三连:关注 + 点赞 + 收藏
- 你的支持,是我持续输出高质量实战内容的最大动力。
同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」:
获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G+ 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料,通通免费领取。
你能想到的绝大部分学习资料,我都尽量帮你准备齐全,剩下的只需要你愿意迈出那一步来拿。
🫵 Who am I?
我是 bug菌:
- 热活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区;
- CSDN 博客之星 Top30、华为云多年度十佳博主/卓越贡献者、掘金多年度人气作者 Top40;
- 掘金、InfoQ、51CTO 等平台签约及优质作者;
- 全网粉丝累计 30w+。
更多高质量技术内容及成长资料,可查看这个合集入口 👉 点击查看 👈️
硬核技术公众号 「猿圈奇妙屋」 期待你的加入,一起进阶、一起打怪升级。
- End -
更多推荐


所有评论(0)