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
相关产品推荐
相关产品推荐

