Мне приходится иметь дело с настройкой в "/ etc / sudoers", которую я не могу изменить, потому что рассматриваемые серверы управляются другой командой, и они не хотят ее менять.
У меня есть root-доступ, только сначала sudoing к другой учетной записи. Моя учетная запись может выполнять только определенную команду «sudo su - admin» (дополнительные аргументы не могут быть добавлены). Затем, как пользователь «admin», я могу запускать любые корневые команды обычно с помощью sudo (например, «sudo vi / etc / shadow» и т. Д.) Или открывать корневую оболочку с помощью «sudo -s» или «sudo su -», и т.п.
Я хочу запускать специальные команды и плейбуки Ansible от имени пользователя root (например, «стать: да») на этих серверах с другого сервера, который я контролирую, но для этого потребуется, чтобы Ansible сначала запускал «sudo su - admin», а затем запускал обычная команда "sudo".
Я знаю, что вы можете создавать собственные методы. Мне кажется, это способ решить эту проблему, но конкретное решение мне не по силам. Может кто-нибудь помочь с этим?
Кстати, если это помогает, «NOPASSWD:» устанавливается как для моей учетной записи, так и для «admin» в «/ etc / sudoers».
Так сложно управлять системами / автоматизировать. На самом деле у меня нет для вас прямого ответа, но это может быть отправной точкой и дать вам несколько идей.
Предполагая следующее на удаленном сервере:
[root@node3 ~]# grep "gheo\|admin" /etc/sudoers
Defaults:admin !requiretty
Defaults:gheo !requiretty
gheo ALL=(ALL) NOPASSWD:/bin/su - admin
admin ALL=(ALL) NOPASSWD: ALL
Играть:
---
- name: something
hosts: node3
vars:
maybe: "sudo su - admin <<EOF\nsudo su -"
tasks:
- name: check something
shell: "{{ maybe }}; sudo tail -1 /etc/shadow"
register: aa
- debug:
var: aa.stdout_lines
Вывод:
PLAY [something] *******************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [node3]
TASK [check something] *************************************************************************************************************************************************************************
[WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo
changed: [node3]
TASK [debug] ***********************************************************************************************************************************************************************************
ok: [node3] => {
"aa.stdout_lines": [
"Last login: Sat Aug 8 01:05:16 CEST 2020",
"admin:!!:18481:1:90:7:::",
"Last login: Sat Aug 8 01:05:16 CEST 2020"
]
}
PLAY RECAP *************************************************************************************************************************************************************************************
node3 : ok=3 changed=1 unreachable=0 failed=0
К сожалению, я не вижу, чтобы это работало ни с одним другим модулем оболочки или, возможно, командой, я не пробовал.
Другой вариант, хотя я не знаю, насколько он практичен, - использовать ansible для запуска сценария на удаленном сервере.
[gheo@node3 ~]$ cat /home/gheo/bla.sh
#!/bin/sh
sudo su - admin <<EOF
sudo su -
tail -1 /etc/shadow
EOF
[gheo@mgt1 ~]$ ansible node3 -a "/home/gheo/bla.sh"
node3 | CHANGED | rc=0 >>
admin:!!:18481:1:90:7:::
Last login: Sat Aug 8 01:03:28 CEST 2020
Last login: Sat Aug 8 01:04:24 CEST 2020 on pts/2
Вы не упомянули, но я предположил, что вы не можете напрямую войти в систему как «администратор», было бы проще, если бы вы могли.