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

如何使用Ansible正确创建Linux用户并解决SSH密钥登录异常问题

家目录权限差异原因及SSH登录失败根因

SSH服务对用户家目录、.ssh目录、authorized_keys文件的权限有严格安全校验:如果家目录开放了同组用户的写权限(也就是user1家目录的rwxrwxr-x里的第二个w),sshd会判定目录存在被其他用户篡改的风险,直接拒绝使用密钥登录,回退到密码验证逻辑,所以会出现提示输入密码的情况。

家目录权限不一致的核心原因有2个:

  • 你当前使用的Ansible user 模块没有显式指定home_mode参数,创建用户时家目录的权限会继承目标主机 /etc/login.defs 里配置的UMASK值:如果UMASK是002,家目录权限就是775(对应user1的情况);如果UMASK是022,权限就是755(对应user2的情况);如果UMASK是077,权限就是700(对应user3的情况)。不同发行版、不同主机的UMASK配置可能存在差异,就会出现权限不一致的问题。
  • 如果创建用户前,对应的/home/[用户名]目录已经存在,user模块默认不会修改已有目录的权限,也会导致权限和预期不符。

Ansible修复方案

1. 优化现有创建用户的任务,从根源避免权限问题

在创建用户和创建.ssh目录的任务之间,新增一个设置家目录权限的任务,显式指定权限,避免受主机UMASK影响:

- name: Add user
  ansible.builtin.user:
    name: "{{ item.name }}"
    uid: "{{ item.uid }}"
    shell: /bin/bash
    group: "{{ item.group }}"
    groups: sshgroup
    append: yes
  with_items: "{{ users }}"

# 新增以下任务,统一设置家目录权限为755,也可以根据安全需求调整为700
- name: Set correct home directory permission
  ansible.builtin.file:
    path: "/home/{{ item.name }}"
    state: directory
    mode: '0755'
    owner: "{{ item.name }}"
    group: "{{ item.group }}"
  with_items: "{{ users }}"

- name: Add .ssh directory
  file:
    path: "/home/{{ item.name }}/.ssh"
    state: directory
    mode: 0700
    owner: "{{ item.name }}"
    group: "{{ item.group }}"
  with_items: "{{ users }}"

- name: Add key
  lineinfile:
    dest: "/home/{{ item.name }}/.ssh/authorized_keys"
    state: present
    create: yes
    line: "{{ item.auth_key }}"
    owner: "{{ item.name }}"
    group: "{{ item.group }}"
    mode: 0600
  with_items: "{{ users }}"

你也可以直接在user模块里加home_mode: '0755'参数,效果和新增任务一致,不过新增任务还可以修复已经存在的家目录权限错误的问题,兼容性更好。

2. 单独修复user1的权限

如果只需要临时修复user1的登录问题,可以执行以下Ansible临时命令:
ansible 目标主机组或IP -m file -a "path=/home/user1 mode=0755"


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:03