Назад | Перейти на главную страницу

Запуск sudo через SSH

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

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

Для 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

@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 [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
@include common-auth
@include common-account

Вуаля!

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

Ответ Андре де Миранды дает хорошее решение, используя 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

Если вы пользуетесь услугами шеф-повара, описанный выше процесс можно автоматизировать с помощью моей кулинарной книги, которую можно найти в любом из двух следующих мест:
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 и должны быть полезной отправной точкой при использовании других версий / дистрибутивов.