Esecuzione di "sudo" su SSH


8

Sto scrivendo uno script che accede a un gruppo di macchine remote ed esegue un comando su di esse. Ho impostato le chiavi in ​​modo che l'utente che esegue lo script non debba digitare la password di ogni macchina, ma digita la passphrase all'inizio dello script.

Il problema è che il comando sui computer remoti richiede sudol'esecuzione. E allo stesso tempo il punto centrale dello script è liberare l'utente dal dover digitare le password più volte. C'è un modo per evitare di digitare la password per sudo? La modifica delle autorizzazioni del comando sui computer remoti non è un'opzione.

Risposte:


8

Per sudo è possibile consentire a un utente di eseguire sudo senza richiedere la password, provare man sudoers. È possibile modificare il file /etc/sudoerseseguendo il visudocomando. Deve essere così speciale perché altrimenti il ​​file non viene ricaricato correttamente. Le righe risultanti (qui prese dagli esempi nel file stesso) dovrebbero essere:

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

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL

Grazie. È divertente dal momento che il mio collega ha proposto una soluzione con le stesse linee di questa, appena prima di pubblicare la tua risposta. Puoi aggiungere che il file da modificare è /etc/sudoerse può anche essere modificato eseguendosudo /usr/sbin/visudo
vahidg

8
Se conosci il comando che desideri eseguire, potresti non voler specificare TUTTI i comandi. Bit di sicurezza, sai.
Tom O'Connor,

3
@ Tom O'Connor: Sì, ho fornito solo il comando necessario. %wesho ALL=NOPASSWD: /sbin/service httpd
Metterà

Ah, abbastanza giusto. :)
Tom O'Connor,

7

@Wesho,

Puoi fare quello che ha detto DaDaDom (funzionerà ed è semplice) o potresti voler rinforzare la tua configurazione usando un modulo PAM chiamato pam-ssh-agent-auth .

Il processo per i sistemi Debian / Ubuntu è ragionevolmente semplice:

$ 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

Modifica la configurazione sudo:

$ sudo visudo

Aggiungi quanto segue:

Defaults env_keep += SSH_AUTH_SOCK

Continua modificando le impostazioni sudo PAM:

$ sudo vi /etc/pam.d/sudo

Aggiungi la riga di autenticazione appena sopra le 2 righe @include esistenti :

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

Ecco!

sudo senza autenticazione ma affidandosi all'agente SSH per eseguire un'autenticazione avanzata, invece di rimuovere semplicemente la password dalla configurazione di sudo.


1
Potresti anche voler controllare questo
Andre de Miranda,

1
authorized_keysDEVE essere bloccato in modo che solo root possa cambiarlo, altrimenti potresti anche disabilitare la password.
ijk,


2

La risposta di Andre de Miranda fornisce una buona soluzione usando pam_ssh_agent_auth , ma le parti non sono aggiornate. In particolare le /etc/pam.d/sudoistruzioni quando si utilizzano molte versioni correnti di Linux.

Se stai eseguendo Ubuntu 12.04 con precisione, ho effettivamente semplificato il processo fornendo un pam_ssh_agent_auth compilato da un ppa: ppa: cpick / pam-ssh-agent-auth .

È possibile installare il pacchetto eseguendo:

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

Dopo l'installazione, se desideri utilizzare questo modulo PAM con sudo dovrai configurare le impostazioni di sudo e la configurazione PAM, in Ubuntu 12.04 preciso puoi farlo creando i seguenti due file:

/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 stai usando lo chef, il processo di cui sopra può essere automatizzato con il mio libro di cucina, disponibile in una delle due seguenti posizioni:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / libri di cucina / pam-ssh-agent-auth .

La filesdirectory del ricettario contiene i file /etc/pam.d/sudoe /etc/sudoers.d/pam-ssh-agent-authsopra descritti che funzionano con Ubuntu 12.04 preciso e dovrebbero essere un utile punto di partenza quando si usano altre versioni / distribuzioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.