Запуск sudo по SSH

8

Я пишу скрипт, который должен войти на несколько удаленных машин и запустить на них команду. Я установил ключи, чтобы пользователь, выполняющий скрипт, не должен вводить пароль каждой машины, а только вводить парольную фразу в начале скрипта.

Проблема в том, что команда на удаленных машинах требует sudoзапуска. И в то же время весь смысл сценария состоит в том, чтобы избавить пользователя от необходимости вводить пароли несколько раз. Есть ли способ избежать ввода пароля для sudo? Изменение разрешений команды на удаленных машинах не вариант.

vahidg
источник

Ответы:

8

Для sudo вы можете разрешить пользователю запускать sudo без запроса пароля, попробуйте man sudoers. Вы можете редактировать файл /etc/sudoers, выполнив visudoкоманду. Это должно быть настолько особенным, потому что в противном случае файл перезагружается неправильно. Результирующие строки (здесь взяты из примеров в самом файле) должны быть:

## Allows people in group wheel to run all commands
# %wheel    ALL=(ALL)   ALL

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL
DaDaDom
источник
Спасибо. Забавно, потому что мой коллега предложил решение в том же ключе, что и это, прямо перед тем, как вы опубликовали свой ответ. Можете ли вы добавить, что файл для редактирования есть /etc/sudoersи его также можно отредактировать, запустивsudo /usr/sbin/visudo
vahidg
8
Если вы знаете команду, которую хотите выполнить, возможно, вы не захотите указывать ВСЕ команды. Знаете, дыра в безопасности.
Том О'Коннор
3
@ Том О'Коннор: Да, я предоставил только необходимую команду. Для полноты %wesho ALL=NOPASSWD: /sbin/service httpd
картины приведу
Ах, достаточно справедливо. :)
Том О'Коннор
7

@Wesho,

Вы можете сделать то, что сказал DaDaDom (это будет работать, и это просто), или вы можете увеличить ваши настройки, используя модуль PAM под названием pam-ssh-agent-auth .

Процесс для систем Debian / Ubuntu достаточно прост:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

Редактирование конфигурации sudo:

$ sudo visudo

Добавьте следующее:

Defaults env_keep += SSH_AUTH_SOCK

Продолжите, изменив настройки sudo PAM:

$ sudo vi /etc/pam.d/sudo

Добавьте строку auth чуть выше двух существующих строк @include :

auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
@include common-auth
@include common-account

Вуаля!

sudo без аутентификации, но полагается на SSH Agent для выполнения строгой аутентификации вместо простого удаления пароля из конфигурации sudo.

Андре де Миранда
источник
1
Вы также можете проверить это
Андре де Миранда
1
authorized_keysНЕОБХОДИМО заблокировать, чтобы его мог изменить только root, иначе вы можете отключить пароль.
IJK
2

Ответ Андре де Миранды дает хорошее решение с использованием pam_ssh_agent_auth , но некоторые части устарели. В частности, /etc/pam.d/sudoинструкции при использовании многих текущих версий Linux.

Если вы используете Ubuntu 12.04, я упростил процесс, предоставив сборку pam_ssh_agent_auth из ppa: ppa: cpick / pam-ssh-agent-auth .

Вы можете установить пакет, запустив:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

После установки, если вы хотите использовать этот модуль PAM с sudo, вам нужно будет настроить параметры sudo и конфигурацию PAM, в Ubuntu 12.04, точнее, вы можете сделать это, создав следующие два файла:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

Если вы используете chef, описанный выше процесс можно автоматизировать с помощью моей кулинарной книги, которую можно найти в любом из двух следующих мест:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / cookbooks / pam-ssh-agent-auth .

filesКаталог поваренной книги содержит описанные выше файлы /etc/pam.d/sudoи /etc/sudoers.d/pam-ssh-agent-authфайлы, которые работают с Ubuntu 12.04 точно, и должны быть полезной отправной точкой при использовании других версий / дистрибутивов.

Крис Пик
источник