Executando 'sudo' por SSH

8

Estou escrevendo um script que é para logar em um monte de 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 frase secreta no início do script.

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

    
por Wesho 25.02.2010 / 10:27

3 respostas

8

Para o sudo, você pode permitir que um usuário execute o sudo sem pedir a senha, tente man sudoers . Você pode editar o arquivo /etc/sudoers emitindo o comando visudo . Tem que ser especial porque senão o arquivo não é corretamente recarregado. 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
    
por 25.02.2010 / 10:54
7

@Wesho,

Você pode fazer o que o DaDaDom disse (funcionará e é simples) ou o seu pode querer reforçar 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 auth logo acima das duas linhas existentes @include :

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 contando com o Agente SSH para executar uma autenticação strong, em vez de simplesmente remover a senha da configuração do sudo.

    
por 21.08.2011 / 05:55
2

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

Se você está usando o Ubuntu 12.04 preciso, eu realmente simplifiquei o processo, fornecendo uma compilação pam_ssh_agent_auth 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, você terá que configurar o sudo e a configuração do PAM. No Ubuntu 12.04, você pode 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 o chef, o processo acima pode ser automatizado com meu livro de receitas, encontrado em um dos dois locais a seguir: link
link .

O diretório files do livro de receitas contém os arquivos /etc/pam.d/sudo e /etc/sudoers.d/pam-ssh-agent-auth descritos acima que funcionam com o Ubuntu 12.04 precisos e devem ser um ponto de partida útil ao usar outras versões / distros.

    
por 28.06.2013 / 04:39

Tags