'Sudo' über SSH ausführen

8

Ich schreibe ein Skript, das sich bei einer Reihe von Remotecomputern anmeldet und auf ihnen einen Befehl ausführt. Ich habe Schlüssel eingerichtet, damit der Benutzer, der das Skript ausführt, nicht das Kennwort jedes Computers eingeben muss, sondern nur die Passphrase am Anfang des Skripts eingeben muss.

Das Problem ist, dass der Befehl auf den Remotecomputern ausgeführt werden muss sudo. Gleichzeitig besteht der Sinn des Skripts darin, den Benutzer von der mehrfachen Eingabe von Passwörtern zu befreien. Gibt es eine Möglichkeit, die Eingabe des Passworts für zu vermeiden sudo? Das Ändern der Berechtigungen des Befehls auf den Remotecomputern ist keine Option.

vahidg
quelle

Antworten:

8

Für sudo können Sie einem Benutzer erlauben, sudo auszuführen, ohne nach dem Passwort zu fragen. Versuchen Sie es man sudoers. Sie können die Datei bearbeiten, /etc/sudoersindem Sie den visudoBefehl eingeben. Es muss etwas Besonderes sein, da sonst die Datei nicht korrekt neu geladen wird. Die resultierenden Zeilen (hier aus den Beispielen in der Datei selbst entnommen) sollten sein:

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

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL
DaDaDom
quelle
Vielen Dank. Es ist lustig, da mein Kollege eine Lösung in der gleichen Richtung wie diese vorgeschlagen hat, kurz bevor Sie Ihre Antwort veröffentlicht haben. Können Sie hinzufügen, dass die zu bearbeitende Datei ist /etc/sudoersund es kann auch durch Ausführen bearbeitet werdensudo /usr/sbin/visudo
vahidg
8
Wenn Sie den Befehl kennen, den Sie ausführen möchten, möchten Sie möglicherweise nicht ALLE Befehle angeben. Eine kleine Sicherheitslücke, wissen Sie.
Tom O'Connor
3
@ Tom O'Connor: Ja, ich habe nur den erforderlichen Befehl bereitgestellt. %wesho ALL=NOPASSWD: /sbin/service httpd
Ich werde
Ah, fair genug. :)
Tom O'Connor
7

@Wesho,

Sie können das tun, was DaDaDom gesagt hat (es wird funktionieren und es ist einfach), oder Sie möchten Ihr Setup mithilfe eines PAM-Moduls namens pam-ssh-agent-auth verbessern .

Der Prozess für Debian / Ubuntu-Systeme ist ziemlich einfach:

$ 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

Das Bearbeiten der Sudo-Konfiguration:

$ sudo visudo

Fügen Sie Folgendes hinzu:

Defaults env_keep += SSH_AUTH_SOCK

Fahren Sie fort, indem Sie die sudo PAM-Einstellungen ändern:

$ sudo vi /etc/pam.d/sudo

Fügen Sie die Auth- Zeile direkt über den 2 vorhandenen @ include- Zeilen hinzu:

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

Voilà!

sudo ohne Authentifizierung, aber mit SSH-Agent für eine starke Authentifizierung, anstatt einfach das Kennwort aus der sudo-Konfiguration zu entfernen.

Andre de Miranda
quelle
1
Sie können auch prüfen wollen diese
Andre de Miranda
1
authorized_keysMUSS gesperrt sein, damit nur root es ändern kann - andernfalls können Sie das Passwort genauso gut deaktivieren.
ijk
2

Die Antwort von Andre de Miranda bietet eine gute Lösung mit pam_ssh_agent_auth , aber Teile sind veraltet. Insbesondere die /etc/pam.d/sudoAnweisungen bei Verwendung vieler aktueller Linux-Versionen.

Wenn Sie Ubuntu 12.04 präzise ausführen, habe ich den Prozess tatsächlich vereinfacht, indem ich einen pam_ssh_agent_auth-Build aus einem ppa: ppa: cpick / pam-ssh-agent-auth bereitgestellt habe .

Sie können das Paket installieren, indem Sie Folgendes ausführen:

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

Wenn Sie dieses PAM-Modul nach der Installation mit sudo verwenden möchten, müssen Sie die Einstellungen und die PAM-Konfiguration von sudo konfigurieren. In Ubuntu 12.04 können Sie dies genau tun, indem Sie die folgenden zwei Dateien erstellen:

/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

Wenn Sie Chef verwenden, kann der oben beschriebene Vorgang mit meinem Kochbuch automatisiert werden, das sich an einem der beiden folgenden Speicherorte befindet:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / cookbooks / pam-ssh-agent-auth .

Das filesVerzeichnis des Kochbuchs enthält die oben beschriebenen /etc/pam.d/sudound /etc/sudoers.d/pam-ssh-agent-authDateien, die mit Ubuntu 12.04 präzise funktionieren und ein hilfreicher Ausgangspunkt für die Verwendung anderer Versionen / Distributionen sein sollten.

Chris Pick
quelle