So führen Sie sudo mit parallelem SSH aus

So führen Sie sudo mit parallelem SSH aus

Linux: Ubuntu 14.04.3 LTS

cat /tmp/passfile
ABCxyz123

sshpass -f /tmp/passfile parallel-ssh -I -A -h hostlist.txt "sudo -S ls -l /root" < /tmp/passfile

und die hier in der Google-Diskussion beschriebene Methodegroups.google gibt den Fehler wie folgt aus:

[1] 01:07:25 [FAILURE] 10.0.4.194 Exited with error code 255
[2] 01:07:25 [FAILURE] 10.0.4.205 Exited with error code 255

auf dem Remote-Server, mit dem ich eine Verbindung herstellen möchte, hat /var/log/auth.log die folgende Meldung

Sep 24 19:20:52 ubu1401 sshd[5765]: Accepted password for ubuntu from 10.0.4.1 port 55019 ssh2
Sep 24 19:20:52 ubu1401 sshd[5765]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)
Sep 24 19:21:26 ubu1401 sshd[5765]: pam_unix(sshd:session): session closed for user ubuntu
Sep 24 19:21:26 ubu1401 sudo: pam_unix(sudo:auth): conversation failed
Sep 24 19:21:26 ubu1401 sudo: pam_unix(sudo:auth): auth could not identify password for [ubuntu]
Sep 24 19:22:25 ubu1401 sshd[5791]: Connection closed by 10.0.4.1 [preauth]

Antwort1

Um das Passwort so sicher wie möglich bereitzustellen, versuchen Sie diese Version ( psshunter CentOS, Fedora und parallel-sshunter Ubuntu, Debian):

stty -echo; printf "Password: "; read PASS; stty echo; echo "${PASS}" | \ ssh <USER>@localhost "sudo -S dmesg"

Update (danke @chutz):

read -s -p "Password: "; echo "${REPLY}" | \ ssh <USER>@localhost "sudo -S dmesg"

und passen Sie es dann wie folgt an pssh an (entsprechend aktualisiert):

read -s -p "Password: "; echo "${REPLY}" | \ pssh -H <USER>@localhost -o /tmp/output -I "sudo -S dmesg"

Ich verwende dasselbe für die Ad-hoc-Sammlung von Dumps von mehreren Servern. Stoppen Sie es wie üblich mit Ctrl+ . Es wird angezeigt , aber das liegt nur daran, dass tcpdump sonst unendlich laufen würde – die Ausgabe erfolgt immer noch am üblichen Ort. Die Option ist, damit die Verbindung nicht abläuft. Ich könnte auch tmux oder screen verwenden und die Dumps später sammeln.C[FAILURE] <HOST> Interrupted-t 0

read -s -p "Password: "; echo "${REPLY}" | \ pssh -h <HOSTFILE> -o /tmp/output -t 0 -I "sudo -S tcpdump -l -nn -vv -i any not port 22"

Stellen Sie sicher, dass Sie den richtigen SSH-Benutzer angeben und dass Sie sich zuvor mit diesen Servern verbunden haben. Durch lokales Testen können Sie normalerweise verhindern, dass die gesamte Serverflotte heruntergefahren wird. Sie können die Adressen 127.0.0.X anstelle von localhost verwenden, um mehrere Hosts abzuschätzen.

Antwort2

Haben Sie versucht, dies durch Echo des Kennworts in der Shell auszuführen?

echo "echo 'yourpassword'; sudo -S -c 'ls -l /root'"|pssh -I -H hostlist.txt

Antwort3

Ich möchte Ihnen mein einfaches Tool "spssh.sh" empfehlen (https://github.com/tangruize/spssh), was einfach (nur 36 sloc), aber nützlich genug ist. Im Gegensatz zu parallel-ssh ist spssh.sh interaktiv und unterstützt die parallele/separate Ausführung von Befehlen. Hoffe, das hilft!

Antwort4

Ich stimme @satch_boogie zuKommentaroben – verwenden Sie es ansible, wenn Sie es brauchen, SUDOund verwenden Sie es, psshwenn Sie es nicht brauchen – meiner Meinung nach ist es übersichtlicher, SUDOobwohl ansibledie anfängliche Einrichtung komplizierter ist.

Kurze Antwort:Beispiel eines Aktualisierungs- und Upgradepakets mit apt:

ansible myservers -a "sudo apt -y update" --become -K

ansible myservers -a "sudo apt -y upgrade" --become -K

Lange Antwort und Aufbau: In meinem Fall habe ich MacOS lokal verwendet, um meine Remote-Linux-Rechner zu verwalten. Ich habe Folgendes getan, was bei Verwendung von Linux leicht abweichen kann:

  1. Stellen Sie sicher, dass Sie lokal und auf allen Zielcomputern den gleichen Benutzer erstellt haben:sudo adduser username
  2. Fügen Sie den Benutzer auf jedem Zielcomputer zur SUDO-Gruppe hinzu:usermod -aG sudo username
  3. (eventuell optional) EinrichtungSSH ohne PasswortIch bin mir zwar nicht sicher, ob dies erforderlich ist, aber meine Umgebung war bereits damit eingerichtet. Versuchen Sie zuerst die folgenden Schritte, da dies für passwortloses SSH möglicherweise nicht erforderlich ist.
  4. Installieren Sie Ansible auf Ihrem lokalen Computer: brew install ansible(oder Linux sudo apt install ansible)
  5. Erstellen Sie die Standard-Hosts-Datei für Ansible auf Ihrem lokalen Computer:sudo mkdir /etc/ansible && sudo touch /etc/ansible/hosts
  6. Bearbeiten Sie die Dateisudo nano /etc/ansible/hosts
  7. Fügen Sie die Zielmaschinen unter einer Gruppe hinzu (IP oder Maschinenname):
[myservers]
blah1.local
blah2.local
blah3.local
  1. (Optional) Ich hatte auf allen Zielcomputern einen zweiten Benutzer in der SUDO-Gruppe, daher musste ich diesen Benutzer vorübergehend aus der SUDO-Gruppe entfernen, um eine Eingabeaufforderung zu vermeiden (wie bei der Verwendung mit sudo systemctlder Aufforderung, einen SUDO-Benutzer auszuwählen):ansible myservers -a "sudo deluser otheruser sudo" --become -K
  2. Führen Sie nun den gewünschten SUDO-Befehl aus. Beispiel:ansible myservers -a "sudo apt -y update" --become -K
  3. (Optional) Fügen Sie den anderen Benutzer wieder zur SUDO-Gruppe hinzu:ansible myservers -a "sudo adduser otheruser sudo" --become -K

Jetzt wiederhole ich einfach die Schritte 8 bis 10, wenn ich einen SUDO-Befehl maschinenübergreifend ausführen muss.

verwandte Informationen