Executando 'sudo' sobre SSH

8

Estou escrevendo um script que é para entrar em várias máquinas remotas e executar um comando nelas. Eu configurei as chaves para que o usuário que está executando o script não precise digitar a senha de cada máquina, mas apenas digite a senha no início do script.

O problema é que o comando nas máquinas remotas requer sudoa execução. E, ao mesmo tempo, o objetivo principal do script é livrar o usuário de ter que digitar senhas várias vezes. Existe uma maneira de evitar digitar a senha para sudo? Alterar as permissões do comando nas máquinas remotas não é uma opção.

vahidg
fonte

Respostas:

8

Para o sudo, você pode permitir que um usuário execute o sudo sem solicitar a senha, tente man sudoers. Você pode editar o arquivo /etc/sudoersemitindo o visudocomando Tem que ser tão especial porque, caso contrário, o arquivo não será recarregado corretamente. As linhas resultantes (aqui tiradas dos exemplos no próprio arquivo) devem ser:

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

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL
DaDaDom
fonte
Obrigado. É engraçado, já que meu colega propôs uma solução nas mesmas linhas, pouco antes de você postar sua resposta. Você pode adicionar que o arquivo a editar é /etc/sudoerse também pode ser editado executandosudo /usr/sbin/visudo
#
8
Se você conhece o comando que deseja executar, pode não querer especificar TODOS os comandos. É uma brecha na segurança, você sabe.
Tom O'Connor
3
@ Tom O'Connor: Sim, eu forneci apenas o comando necessário. Vai colocar um exemplo aqui em prol da integralidade:%wesho ALL=NOPASSWD: /sbin/service httpd
vahidg
Ah, é justo. :)
Tom O'Connor
7

@Wesho,

Você pode fazer o que o DaDaDom disse (funcionará e é simples) ou você pode aprimorar sua configuração usando um módulo PAM chamado pam-ssh-agent-auth .

O processo para sistemas Debian / Ubuntu é razoavelmente simples:

$ 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

A edição da configuração do sudo:

$ sudo visudo

Adicione o seguinte:

Defaults env_keep += SSH_AUTH_SOCK

Continue alterando as configurações do sudo PAM:

$ sudo vi /etc/pam.d/sudo

Adicione a linha de autenticação logo acima das 2 linhas @include existentes :

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

Voilà!

sudo sem autenticação, mas confiando no SSH Agent para executar autenticação forte, em vez de simplesmente remover a senha da configuração do sudo.

Andre de Miranda
fonte
11
Você também pode querer verificar isso
Andre de Miranda
11
authorized_keysDEVE estar bloqueado para que apenas o root possa alterá-lo - caso contrário, você também pode desativar a senha.
IJK
2

A resposta de Andre de Miranda fornece uma boa solução usando pam_ssh_agent_auth , mas as peças estão desatualizadas. Particularmente as /etc/pam.d/sudoinstruções ao usar muitas versões atuais do Linux.

Se você está executando o Ubuntu 12.04 com precisão, simplifiquei o processo fornecendo uma compilação pam_ssh_agent_auth a partir de um ppa: ppa: cpick / pam-ssh-agent-auth .

Você pode instalar o pacote executando:

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

Após a instalação, se você quiser usar este módulo PAM com o sudo, terá que definir as configurações e a configuração do PAM, no Ubuntu 12.04, você precisará fazer isso criando os dois arquivos a seguir:

/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

Se você estiver usando chef, o processo acima pode ser automatizado com meu livro de receitas, encontrado em um dos dois locais a seguir:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / livros de culinária / pam-ssh-agent-auth .

O filesdiretório do livro de receitas contém os arquivos /etc/pam.d/sudoe /etc/sudoers.d/pam-ssh-agent-authdescritos acima que funcionam com o Ubuntu 12.04 precisos e devem ser um ponto de partida útil ao usar outras versões / distribuições.

Chris Pick
fonte