Как избежать пароля root
Я сделал эту модификацию:
vim /etc/sudoers
# User privilege specification
root ALL=(ALL) NOPASSWD: ALL
Когда я использую:
sudo service cassandra start
это работает без пароля. Но когда я использую:
script shell
ssh -t root@$machine -x "sshpass -p 'ubuntu' ssh -t ubuntu@$address -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nul -x 'sudo service cassandra start'"
Я должен ввести пароль!
У вас есть идея, почему она не работает с ssh?
Большое спасибо за помощь. С уважением.
1 ответ
"Корень" в /etc/sudoers должен быть идентификатором пользователя, выполняющего команды.... Я полагаю, что в вашем примере это будет "ubuntu".
Ваш пример делает это:
- регистрируется в $ machine как root (я предполагаю, что вы настроили эту машину на возможность входа в систему как root. Если нет, вам нужно настроить параметры pam.d, чтобы разрешить вход в систему root через ssh. Это не имеет ничего общего с sudo).
- В качестве пользователя root@# ваша команда ssh обращается к ubuntu@address и выполняет команду 'sudo service cassandra start'.
Ваш пример показывает, что вам нужно включить sudo для ubuntu, а не root, чтобы иметь возможность выполнять сервисные команды.
Пример:
# User privilege specification
ubuntu ALL=(root) NOPASSWD: /usr/bin/service cassandra *
РЕДАКТИРОВАТЬ: Я действительно смущен относительно того, что вы пытаетесь достичь. Если вы просто пытаетесь подключиться по ssh к другому серверу и запустить эту служебную команду, все, что требуется, это в вашем сценарии оболочки:
Ваша команда будет выглядеть так:
sshpass -p 'ubuntu' ssh -t ubuntu@$address -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nul -x 'sudo service cassandra start'
Кроме того, вам все еще нужно добавить мои правки в /etc/sudoers, как описано выше, чтобы разрешить ubuntu выполнять эту команду.