Я реализовал небольшой кластер Беовульфа для тестирования цели, всех узлов с сервером Ubuntu 18.04.
Я установил pdsh для выполнения той же команды на ssh одновременно на нескольких узел. вход в систему ssh предоставляют без пароля с общедоступным/с закрытым ключом распределением по узлам (пример: https://www.rittmanmead.com/blog/2014/12/linux-cluster-sysadmin-ssh-keys/).
Если я пробую простую команду как "дата", все в порядке:
me@master:~$ pdsh -w me@node[0-3] date
node0: Mon Mar 9 18:56:04 UTC 2020
node2: Mon Mar 9 17:26:15 UTC 2020
node3: Mon Mar 9 16:42:37 UTC 2020
node1: Mon Mar 9 17:42:52 UTC 2020
me@master:~$
Но если я пробую команду, которые требуют sudoer полномочий как это:
me@master:~$ pdsh -w me@node[0-3] apt update
затем это возвращает эти ошибки:
node0:
node0: Reading package lists...
node0: E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
node0: E: Unable to lock directory /var/lib/apt/lists/
node0: W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
node0: W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
pdsh@node00: node0: ssh exited with exit code 100
... и так далее для всех других узлов.
Проблемой является "способное обновление" команда, которые требуют sudo выполнения, но я не нашел способ передать его с pdsh
Тот же вид команд, запущенных с "настоящим" пользователем root, хорошо работает:
root@master:~ $ pdsh-w root@node [0-3] способное обновление
но в этом случае это означает на самом деле включать "настоящему" пользователю root на всех узлах, которых я хотел бы избежать.
Действительно ли это возможно? Существует ли путь к возрастающим командам полномочий с pdsh, не включая пользователю root? Или есть ли альтернативные инструменты, которые могут сделать это?
Большое спасибо
B.
Необходимо смочь использовать -S
отметьте для передачи по каналу пароля к sudo
как это:
pdsh -w me@node[0-3] echo "password" | sudo -S apt update
где password
Ваш фактический пароль.
Кроме того, можно препятствовать тому, чтобы пароль обнаружился в Вашем ~/.bash_history
путем размещения следующей строки в Ваш ~/.bashrc
файл:
export HISTIGNORE='*sudo -S*'
и не забывайте получать Ваш ~/.bashrc
файл для применения изменений:
source ~/.bashrc
Вы, возможно, должны сделать это на всех машинах.