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

Ansible能否在用户主目录未创建时推送SSH公钥?

解决方案

不需要单独创建主目录的说法不准确——AD域用户的主目录默认不会自动生成,而authorized_key模块的manage_dir: yes参数在处理AD用户时,可能因为权限或用户身份的问题无法自动创建目录(毕竟AD用户的UID/GID由域控管理,root创建目录后需要正确归属给该AD用户)。

正确的做法是先确保主目录存在且权限符合SSH要求,再推送公钥,具体步骤如下:

  • 先创建AD用户的主目录,设置归属为该用户,权限为700(SSH要求主目录权限不能对其他用户开放写权限)
  • 再执行authorized_key任务,此时manage_dir: yes可以辅助维护.ssh目录的权限

修改后的Playbook示例:

---
- hosts: all
  become: yes
  tasks:
  - name: 创建AD用户主目录并设置权限
    file:
      path: "/home/user1"
      state: directory
      owner: user1
      group: user1
      mode: '0700'

  - name: 推送SSH公钥到authorized_keys
    authorized_key:
      user: user1
      state: present
      manage_dir: yes
      key: "{{ lookup('file', item) }}"
    with_fileglob:
    - user1.pubkey

关键说明

  • file模块创建主目录时必须指定owner和group为AD用户,否则后续authorized_key写入时会因为权限问题失败
  • 主目录权限设为0700是SSH的硬性要求,否则即使公钥推送成功,也可能无法实现无密码登录
  • manage_dir: yes会自动创建.ssh目录并设置为700权限,同时确保authorized_keys文件权限为600,这部分无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:50:50