Betrachten Sie den folgenden Befehl:
ssh aristotle sudo /bin/sh < test.sh
Ich möchte, dass die Umleitung angewendet wird, /bin/sh
aber sie wird von sudo verwendet. Irgendwelche Ideen, wie ich das erreichen kann, was ich will?
Antwort1
Warum nicht einfach test.sh kopieren und dann aufrufen?
scp test.sh aristotle:/tmp/test.$$.sh
ssh aristotle sudo /bin/sh /tmp/test.$$.sh
ssh aristotle rm /tmp/test.$$.sh
Das $$ ist die PID des Prozesses auf dem lokalen Computer und sorgt für einen gewissen Grad an Zufälligkeit, damit Ihre Datei nicht überschrieben wird.
Antwort2
UmleitungIstfunktioniert mit ssh und sudo! Es stört nur etwaige Passwortdialoge von ssh und/oder sudo.
Also ENTWEDER verwenden Sie keine Umleitung, sondern Workarounds wie z. B. das Kopieren des Skripts auf die Zielmaschine und anschließendes Ausführen (wie z. B. @edoloughlinempfohlen).
ODER Sie konfigurieren ssh und sudo so, dass kein Passwort abgefragt wird. Dann funktioniert es wie am Schnürchen:
$ echo "hostname" | ssh -A orwell sudo /bin/sh
orwell
Es gibt Tausende von Anleitungen, die erklären, wie man SSH ohne Passwort verwendet, deshalb erkläre ich diesen Teil nicht. Und was Sudo betrifft, gibt es mehrere Möglichkeiten, es ohne Passwort zu verwenden. @jtimbermanempfohlenum dem betreffenden Benutzer generell passwortloses sudo zu erlauben (über NOPASSWD
die Funktion von sudo, siehesudoers(5)).
Ich persönlich verwende das PAM-Modulpam-ssh-agent. Es ermöglicht sudo die Authentifizierung gegenüber einem weitergeleiteten SSH-Agenten und greift nur dann auf die kennwortbasierte Authentifizierung zurück, wenn kein SSH-Agent verfügbar ist. Unter Debian und Ubuntu
apt-get install pam-ssh-agent-auth
und konfigurieren Sie dann wie inpam_ssh_agent_auth(8).
Antwort3
Versuchen Sie es folgendermaßen:
ssh aristotle sudo /bin/sh -c "/bin/sh \\< test.sh"
Antwort4
Ich habe es ssh somehost sudo cat \< /etc/passwd
mit einigem Erfolg verwendet. Versuchen Sie es mit etwas wie:
ssh aristotle sudo /bin/sh \< test.sh