ansible fetch模块用于将远程主机文件拉取至本地,方向为“远程→本地”,仅支持单个文件且需指定src绝对路径和已存在的dest目录,自动按主机名/ip分层存储。

用 Ansible 拉取远程服务器上的文件,核心是 fetch 模块,它专用于把远程主机的单个文件复制到本地控制机,方向是「远程 → 本地」,和 copy 模块正好相反。
fetch 模块的基本用法
fetch 只支持拉取文件(不能拉目录),默认会按远程主机的 IP 或 hostname 自动分层存放,避免不同主机文件覆盖。
- src=:指定远程主机上要拉取的文件绝对路径(必须存在且为文件)
- dest=:指定本地保存的根目录(必须是已存在的目录)
- 执行后,文件实际保存路径为:
dest/hostname/src或dest/ip_address/src
常见使用场景与写法
假设远程主机名为 web01,想拉取它的 /etc/hosts 文件:
- 基础命令(自动按主机名归类):
ansible web01 -m fetch -a "src=/etc/hosts dest=/backup/"
结果路径示例:/backup/web01/etc/hosts - 扁平化保存(不带主机目录,直接存到 dest 下):
ansible web01 -m fetch -a "src=/etc/hosts dest=/backup/ flat=yes"
结果路径:/backup/hosts(注意:dest 必须以/结尾才生效) - 处理源文件可能不存在的情况:
加fail_on_missing=no,避免报错中断:ansible web01 -m fetch -a "src=/var/log/app.log dest=/logs/ fail_on_missing=no"
注意事项
- src 必须是具体文件,不支持通配符(
*)或目录路径 - dest 目录需在本地提前创建好,Ansible 不会自动创建父目录
- 若需批量拉取多台主机的同一文件,可对主机组执行,每台主机的文件会各自归入对应子目录
- 如需校验文件完整性,可加
validate_checksum=yes,拉取后自动做 MD5 校验
替代方案补充
如果需要拉取整个目录或更灵活同步,fetch 不适用,可考虑:
- synchronize 模块(基于 rsync):支持目录、排除规则、压缩传输
- script + tar 组合:先在远程打包,再 fetch 压缩包,最后解压











