问题描述
在使用Ansible创建客户端机器上的用户时遇到了问题。虽然成功创建了用户并添加了认证文件,但在使用创建的用户SSH到该机器时出现错误。以下是用户的源代码:
--- # This file is used to create a single user or multiple with password
- hosts: hostMachine
become_method: sudo
become_user: root
become: true
gather_facts: no
vars_files:
- ../../../group_vars/required_varlist.yml
tasks:
- name: Ensure group is exist
group:
name: "{{ item.groups }}"
with_items:
- "{{ users }}"
- name: create a new user without password
user:
name: "{{ item.username }}"
group: "{{ item.groups }}"
groups: "sudo,{{ item.username }}"
shell: /bin/bash
createhome: yes
with_items:
- "{{ users }}"
- name: Add Sudo privileges to user
command: usermod -aG sudo "{{ item.username }}"
with_items:
- "{{ users }}"
- name: Add user in sudoders
shell: sh -c "echo \""{{ item.username }}" ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers"
with_items:
- "{{ users }}"
- name: create directory
file:
path: "/home/{{ item.username }}/.ssh"
state: directory
mode: 0700
owner: "{{ item.username }}"
group: "{{ item.groups }}"
with_items:
- "{{ users }}"
- name: Set Authorized key token from the file
become: true
authorized_key:
user: "{{ item.username }}"
state: present
key: "{{ lookup('file', '{{ pem_file_path }}') }}"
# path: '/etc/ssh/authorized_keys/"{{ item.username }}"'
with_items:
- "{{ users }}"
- name: restart ssh
service: name=sshd state=restarted
required_varlist.yml
文件内容如下:
---
password: raspberry
users:
- username: ABC
groups: ABC
pem_file_path: /home/ubuntu/XYZ.pem
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据回答1,问题可能是您尝试将私钥插入authorized_keys
文件中,而实际上只需要在目标机器上使用公钥。
您需要执行以下操作来从私钥中提取公钥:
- name: Generate an OpenSSL public key with a passphrase protected private key
openssl_publickey:
path: /tmp/key-{{ item.username }}.pub
privatekey_path: {{ item.pem_file_path }}
privatekey_passphrase: ansible
format: OpenSSH
with_items:
- "{{ users }}"
然后使用公钥:
- name: Set Authorized key token from the file
become: true
authorized_key:
user: "{{ item.username }}"
state: present
key: "{{ lookup('file', '/tmp/key-{{ item.username }}.pub') }}"
with_items:
- "{{ users }}"
方案2
使用脚本或工具来管理密钥可能会增加复杂性,并且需要确保密钥的正确性。
另一种方法是使用脚本或工具来管理密钥。您可以使用ssh-keygen
命令生成密钥对,并使用ssh-copy-id
命令将公钥复制到目标机器上的authorized_keys
文件中。
以下是一个示例脚本,可以在Ansible中使用:
#!/bin/bash
# 生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f /tmp/key
# 将公钥复制到目标机器上
ssh-copy-id -i /tmp/key.pub user@host
在这个示例中,我们使用ssh-keygen
命令生成一个RSA密钥对,并将公钥复制到目标机器上的authorized_keys
文件中。您需要将your_email@example.com
替换为您的电子邮件地址,user@host
替换为目标机器的用户名和主机名。
请注意,使用脚本或工具来管理密钥可能会增加复杂性,并且需要确保密钥的正确性。
正文完