Ejecutar 'sudo' sobre SSH

8

Estoy escribiendo un script que es para iniciar sesión en un montón de máquinas remotas y ejecutar un comando en ellas. He configurado las claves para que el usuario que ejecuta el script no tenga que escribir la contraseña de cada máquina, sino que solo escriba la frase de contraseña al comienzo del script.

El problema es que el comando en las máquinas remotas requiere sudoejecutarse. Y al mismo tiempo, el objetivo de la secuencia de comandos es librar al usuario de tener que escribir las contraseñas varias veces. ¿Hay alguna forma de evitar escribir la contraseña sudo? Cambiar los permisos del comando en las máquinas remotas no es una opción.

vahidg
fuente

Respuestas:

8

Para sudo, puede permitir que un usuario ejecute sudo sin solicitar la contraseña, intente man sudoers. Puede editar el archivo /etc/sudoersemitiendo el visudocomando. Tiene que ser tan especial porque, de lo contrario, el archivo no se vuelve a cargar correctamente. Las líneas resultantes (aquí tomadas de los ejemplos en el archivo mismo) deberían 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
fuente
Gracias. Es curioso ya que mi colega propuso una solución en las mismas líneas que esta, justo antes de que publicaras tu respuesta. ¿Puede agregar que el archivo a editar es /etc/sudoersy también se puede editar ejecutandosudo /usr/sbin/visudo
Vahidg
8
Si conoce el comando que desea ejecutar, es posible que no desee especificar TODOS los comandos ... Un agujero de seguridad, ya sabe.
Tom O'Connor
3
@ Tom O'Connor: Sí, proporcioné solo el comando necesario. Pondré un ejemplo aquí en aras de la integridad:%wesho ALL=NOPASSWD: /sbin/service httpd
vahidg
Ah, bastante justo. :)
Tom O'Connor
7

@Wesho,

Puede hacer lo que DaDaDom dijo (funcionará y es simple) o puede que desee reforzar su configuración mediante el uso de un módulo PAM llamado pam-ssh-agent-auth .

El proceso para los sistemas Debian / Ubuntu es razonablemente simple:

$ 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

Editar la configuración de sudo:

$ sudo visudo

Agregue lo siguiente:

Defaults env_keep += SSH_AUTH_SOCK

Continúe cambiando la configuración de sudo PAM:

$ sudo vi /etc/pam.d/sudo

Agregue la línea de autenticación justo arriba de las 2 líneas @include existentes :

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

Voilà!

sudo sin autenticación pero confiando en el Agente SSH para realizar una autenticación sólida, en lugar de simplemente eliminar la contraseña de la configuración de sudo.

Andre de Miranda
fuente
1
También es posible que desee comprobar esto
Andre de Miranda
1
authorized_keysDEBE estar bloqueado para que solo la raíz pueda cambiarlo; de lo contrario, también podría deshabilitar la contraseña.
ijk
2

La respuesta de Andre de Miranda proporciona una buena solución usando pam_ssh_agent_auth , pero las partes están desactualizadas. Particularmente las /etc/pam.d/sudoinstrucciones cuando se usan muchas versiones actuales de Linux.

Si está ejecutando Ubuntu 12.04 con precisión, en realidad he simplificado el proceso al proporcionar una compilación pam_ssh_agent_auth a partir de una ppa: ppa: cpick / pam-ssh-agent-auth .

Puede instalar el paquete ejecutando:

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

Después de la instalación, si desea utilizar este módulo PAM con sudo, tendrá que configurar los ajustes de sudo y la configuración PAM, en Ubuntu 12.04 preciso puede hacerlo creando los siguientes dos archivos:

/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

Si usa chef, el proceso anterior se puede automatizar con mi libro de cocina, que se encuentra en cualquiera de las dos ubicaciones siguientes:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / libros de cocina / pam-ssh-agent-auth .

El filesdirectorio del libro de cocina contiene los archivos /etc/pam.d/sudoy /etc/sudoers.d/pam-ssh-agent-authdescritos anteriormente que funcionan con Ubuntu 12.04 precisa y debería ser un punto de partida útil cuando se usan otras versiones / distribuciones.

Chris Pick
fuente