家用住宅主机Linux Ansible批量管理多台住宅主机

为什么家用住宅主机需要 Ansible 批量管理

很多个人玩家在家里有好几台 Linux 设备,比如 NAS、下载机、远程办公机或家庭媒体服务器。
手动一台台更新、修改配置或者执行命令非常低效。
Ansible 正好解决这个问题:只需要一台主控机,就能通过 SSH 向所有被控机下发指令,而且不需要在被控机上装 agent。

本教程假设你的主控机(能运行 Ansible 的那台)和被控机(要管理的那几台)都在同一个家庭局域网内,
并且都已经装好了 Linux 系统(Ubuntu、
Debian、
CentOS 等均适用)。

准备工作:主控机与被控机的 SSH 连接

主控机上安装 Ansible

在 Debian/Ubuntu 系列:

sudo apt update && sudo apt install ansible -y

CentOS/RHEL 系列:

sudo yum install epel-release -y && sudo yum install ansible -y

安装完成后用 ansible --version 确认版本。

打通 SSH 免密登录

这是最关键的一步。
Ansible 默认通过 SSH 连接被控机,所以需要让主控机能直接 SSH 到每台被控机而不需要密码。

  1. 在主控机上生成密钥对(如果已经有了可跳过):
   ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
  1. 将公钥复制到每台被控机(将被控机 IP 或主机名替换为你的实际地址):
   ssh-copy-id 用户名@被控机IP

例如:ssh-copy-id pi@192.168.1.101
如果被控机没有默认开启密钥认证,可以先手动登录一次设置。

  1. 测试免密登录是否成功:
   ssh pi@192.168.1.101 "hostname"

如果能直接返回主机名就 OK。

编写 Inventory 并执行第一条命令

创建 inventory 文件

在主控机上新建一个文件(比如 hosts.ini),列出所有要被管理的设备:

[home_servers]
# 建议用家用设备的内网 IP,避免 DDNS 变动影响
192.168.1.101 ansible_user=pi
192.168.1.102 ansible_user=user2
# 也可以给主机起别名便于记忆
# nas ansible_host=192.168.1.101 ansible_user=pi

测试 Ansible 连通性

执行以下命令,Ansible 会用 ping 模块检测所有主机是否在线(注意不是 ICMP ping,而是 SSH 连通性测试):

ansible all -i hosts.ini -m ping

如果返回绿色 "pong" 表示成功。

批量执行命令

现在就能用 Ansible 对多台设备同时执行命令了。
比如查看所有被控机的 uptime:

ansible all -i hosts.ini -m shell -a "uptime"

更常见的场景是批量更新系统:

ansible all -i hosts.ini -m apt -a "upgrade=yes update_cache=yes" -b
  • -b 表示使用 sudo 提权。如果被控机普通用户没有 sudo 免密码权限,需要先在每台被控机上配置 sudo visudo,添加一行:pi ALL=(ALL) NOPASSWD:ALL

避坑指南(家用场景特别容易踩的坑)

  1. 被控机 IP 经常变化:家用路由器的 DHCP 租约短,建议在路由器里给每台设备绑定静态 IP,或者在 hosts.ini 里用 Mac 地址对应的固定 IP。
  2. SSH 端口非默认:如果你改了 SSH 端口,需要在 inventory 里加上 ansible_port=2222
  3. host key checking 报错:第一次连接会出现 The authenticity of host... 的确认提示。可以在 ansible.cfg 里关闭首次连接检查:
   [defaults]
   host_key_checking = False

注意:生产环境建议保持检查,家用内部网络可酌情关闭。

  1. 普通用户 sudo 无密码:Ansible 使用 -b 时默认会尝试用当前用户 sudo。如果提示需要密码,要么配置 NOPASSWD,要么改用 --ask-become-pass 每次输入密码(不推荐批量)。
  2. Python 版本不一致:如果被控机是旧系统(如 CentOS 6),可能默认 Python2,而本机 Ansible 要求 Python3。可以在 inventory 里指定 ansible_python_interpreter=/usr/bin/python3

常见问题解答

Q:我只有一台设备,还用学 Ansible 吗?
可以先用官网的 playbook 模版练手,未来设备多了直接上手。

Q:被控机没有公网 IP,能不能用 Ansible 管理?
完全可以,家用局域网内操作不限公网。如果需要外网管理,给主控机配置 DDNS 并做好安全组限制即可。

Q:执行 playbook 时返回 "UNREACHABLE" 怎么办?
检查被控机是否开机、网络是否连通、SSH 端口是否开放,以及密钥是否复制成功。

效果验证与进阶

执行 ansible all -i hosts.ini -m shell -a "free -h" 查看所有主机的内存状况。
如果顺利,你会看到每个被控机的输出结果。
至此,你已经实现了家用住宅主机的 Ansible 批量管理。

下一步可以尝试编写简单的 playbook(YAML 文件)实现自动部署 Docker、修改 NTP 配置等操作。
如果你在搭建家庭服务器时遇到问题,欢迎继续翻看本站其他教程,比如《家庭 NAS 的 Ansible 一键部署》等相关内容。

分享到:
上一篇
外贸站宝塔面板服务器fail2ban自动拉黑爆破IP
下一篇
跨境独立站宝塔面板多语言外贸站搭建实操教程:从零到上线
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意