You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Ansible简便实现两台远端主机间公钥添加到authorized_keys

问题原因说明

lookup() 插件默认在Ansible控制节点本地执行,delegate_to 参数不会作用于lookup逻辑,所以你之前的代码拿到的始终是控制节点的公钥。

正确实现方案

不需要把公钥先存到控制节点本地,直接通过两个任务即可完成跨主机公钥同步:

  1. 首先用 slurp 模块从远端主机A读取公钥,该模块会在目标远端主机上执行文件读取操作,返回结果为base64编码的文件内容
- name: 读取远端主机A的ed25519公钥
  ansible.builtin.slurp:
    src: ~/.ssh/id_ed25519.pub
  register: host_a_pubkey
  delegate_to: "{{ backups_host }}"
  when: backups_host is defined
  1. 再用 authorized_key 模块把解码后的公钥写入远端主机B的授权列表,该模块会自动处理文件权限、避免重复插入相同公钥,比手动修改文件更安全
- name: 将主机A的公钥添加到主机B的授权列表
  ansible.posix.authorized_key:
    user: "{{ host_b_user }}" # 替换为你要授权的主机B的登录用户名
    state: present
    key: "{{ host_a_pubkey.content | b64decode | trim }}"
  when:
    - backups_host is defined
    - host_a_pubkey.content is defined

补充说明

如果公钥所属用户和你Ansible登录主机A的用户不一致,需要把公钥路径替换为绝对路径,比如 /home/对应用户名/.ssh/id_ed25519.pub,避免 ~ 解析到错误的用户目录。

内容的提问来源于stack exchange,提问作者Andrius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:54:03