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