Exécuter 'sudo' sur SSH

8

J'écris un script qui consiste à se connecter à un tas de machines distantes et à exécuter une commande dessus. J'ai configuré des clés pour que l'utilisateur exécutant le script n'ait pas à taper le mot de passe de chaque machine, mais seulement à saisir la phrase secrète au début du script.

Le problème est que la commande sur les machines distantes doit sudoêtre exécutée. Et en même temps, le but du script est de débarrasser l'utilisateur d'avoir à taper des mots de passe plusieurs fois. Est-il possible d'éviter de taper le mot de passe pour sudo? La modification des autorisations de la commande sur les machines distantes n'est pas une option.

vahidg
la source

Réponses:

8

Pour sudo, vous pouvez autoriser un utilisateur à exécuter sudo sans demander le mot de passe, essayez man sudoers. Vous pouvez modifier le fichier /etc/sudoersen exécutant la visudocommande. Cela doit être spécial car sinon le fichier n'est pas correctement rechargé. Les lignes résultantes (ici extraites des exemples du fichier lui-même) doivent être:

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

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL
DaDaDom
la source
Je vous remercie. C'est drôle puisque mon collègue a proposé une solution dans le même sens que celle-ci, juste avant de poster votre réponse. Pouvez-vous ajouter que le fichier à modifier est /etc/sudoerset il peut également être modifié en exécutantsudo /usr/sbin/visudo
vahidg
8
Si vous connaissez la commande que vous souhaitez exécuter, vous ne voudrez peut-être pas spécifier TOUTES les commandes. Un trou de sécurité, vous savez.
Tom O'Connor
3
@ Tom O'Connor: Oui, je n'ai fourni que la commande nécessaire. %wesho ALL=NOPASSWD: /sbin/service httpd
Mettra
Ah, assez bien. :)
Tom O'Connor
7

@Wesho,

Vous pouvez faire ce que DaDaDom a dit (cela fonctionnera et c'est simple) ou vous pouvez renforcer votre configuration en utilisant un module PAM appelé pam-ssh-agent-auth .

Le processus pour les systèmes Debian / Ubuntu est relativement 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

L'édition de la configuration sudo:

$ sudo visudo

Ajoutez ce qui suit:

Defaults env_keep += SSH_AUTH_SOCK

Continuez en modifiant les paramètres sudo PAM:

$ sudo vi /etc/pam.d/sudo

Ajoutez la ligne d' authentification juste au-dessus des 2 lignes @include existantes :

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

Voilà!

sudo sans authentification mais s'appuyant sur l'agent SSH pour effectuer une authentification forte, au lieu de simplement supprimer le mot de passe de la configuration sudo.

Andre de Miranda
la source
1
Vous pouvez également vérifier cela
Andre de Miranda
1
authorized_keysDOIT être verrouillé pour que seul root puisse le changer - sinon vous pourriez aussi bien désactiver le mot de passe.
ijk
2

La réponse d'André de Miranda fournit une bonne solution en utilisant pam_ssh_agent_auth , mais les pièces sont obsolètes. En particulier les /etc/pam.d/sudoinstructions lors de l'utilisation de nombreuses versions Linux actuelles.

Si vous exécutez Ubuntu 12.04 précis, j'ai en fait simplifié le processus en fournissant une construction pam_ssh_agent_auth à partir d'un ppa: ppa: cpick / pam-ssh-agent-auth .

Vous pouvez installer le package en exécutant:

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

Après l'installation, si vous souhaitez utiliser ce module PAM avec sudo, vous devrez configurer les paramètres de sudo et la configuration PAM, dans Ubuntu 12.04 précis, vous pouvez le faire en créant les deux fichiers suivants:

/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 vous utilisez chef, le processus ci-dessus peut être automatisé avec mon livre de cuisine, disponible à l'un des deux emplacements suivants:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / livres de cuisine / pam-ssh-agent-auth .

Le filesrépertoire du livre de recettes contient les fichiers /etc/pam.d/sudoet /etc/sudoers.d/pam-ssh-agent-authdécrits ci-dessus qui fonctionnent avec Ubuntu 12.04 précis et devraient être un point de départ utile lors de l'utilisation d'autres versions / distributions.

Chris Pick
la source