У меня есть пользователь Linux с различными папками и файлами в их доме:
User: foo
/home/foo/somefolder
Я хочу переименовать этого пользователя и переместить его домашний каталог, чтобы в итоге получилось:
User: bar
/home/bar/somefolder
Я бы сделал это вручную с
sudo usermod --login new_username old_username
С последующим
sudo usermod --home /home/new_username --move-home new_username
Могу ли я создать роль Ansible, чтобы делать это за меня?
В Ансибле пользовательский модуль Я могу найти:
home Optionally set the user's home directory.
move_home If set to yes when used with home=, attempt to move the user's old home directory to the specified directory if it isn't there already and the old home exists.
Звучит так, будто предполагается изменение, но как указать само переименование?
Я придумал быстрый доступный playbook, когда мне пришлось самому переименовывать пользователя в нескольких системах. Playbook делает следующее:
Необходимо установить три переменные: одну для старого имени пользователя, одну для нового имени пользователя и одну для ключа ssh, который нужно добавить в root.
---
- name: "Rename user"
hosts: all
become: true
gather_facts: no
ignore_errors: true
vars:
ssh_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_ed25519.pub') }}"
old_username: john
new_username: johnny
handlers:
- name: restart sshd
service:
name: ssh
state: restarted
tasks:
- name: Install ssh key for root access
authorized_key:
user: root
key: "{{ ssh_key }}"
state: present
remote_user: "{{ old_username }}"
- name: Make sure root can ssh in
lineinfile:
dest: /etc/ssh/sshd_config
backup: yes
regexp: "^PermitRootLogin"
line: "PermitRootLogin prohibit-password"
state: present
remote_user: "{{ old_username }}"
register: sshd_config
notify: restart sshd
- name: Kill processes by user
shell: "pkill -u {{ old_username }}"
remote_user: root
ignore_errors: true
- name: Move home directory
user:
name: "{{ old_username }}"
home: "/home/{{ new_username }}"
move_home: yes
remote_user: root
- name: Rename user
command: "usermod --login {{ new_username }} {{ old_username }}"
remote_user: root
ignore_errors: true
- name: Restore sshd config
copy:
remote_src: yes
src: "{{ sshd_config.backup }}"
dest: /etc/ssh/sshd_config
remote_user: root
notify: restart sshd