Ich habe ein interaktives Shell-Skript, das an einer Stelle auf eine andere Maschine (Ubuntu-basiert) ssh und etwas als root ausführen muss (der Benutzer sollte sein Passwort eingeben, aber der Remote-Befehl sollte wie im Skript angegeben ausgeführt werden):
# ...
ssh remote-machine 'sudo ls'
# ...
Ich erhalte jedoch immer diese Fehlermeldung zurück:
sudo: no tty present and no askpass program specified
OK, das ist ganz klar. Aber wie kann ich das umgehen? So etwas sollte passieren:
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
ls
Die Ausgabe enthält zum Beispiel \ r \ n Endungen.ls | cat
wird es tun - es wird sehen, dass stdout eine Pipe ist. Bei dieser speziellen Frage ist dies nicht relevant, da sie anscheinend von einem Terminal aus interaktiv ausgeführt werden soll. Sie möchten also wahrscheinlich die Spalten und Farben und so weiter.Diese Methode führt ein einzelnes Skript mit sudo nach ssh aus:
Nehmen wir an, wir haben einen "entfernten" Benutzer mit Sudo-Fähigkeiten und ein Skript, das als root ausgeführt werden soll.
1) Legen Sie in / etc / passwd ein Skript fest , das beim Anmelden verwendet werden soll:
remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh
2) In "login.sh" führen wir das Skript aus, das wir als "sudo" ausführen möchten:
Normalerweise wird das Passwort zweimal abgefragt: ssh login + sudo. Wenn Sie es nur einmal eingeben möchten, versuchen Sie sudo ohne Passwort (nicht empfohlen). <- Bitte lesen Sie Boldewyn Kommentar.
Der Hauptvorteil ist, dass "ssh" keinen anderen Parameter (als -t) benötigt und sudo auf der Serverseite erzwungen wird. Sobald das Skript beendet ist, wird der Benutzer ebenfalls abgemeldet.
Es mag nicht so elegant sein, aber es ist einfach und funktioniert.
quelle
sudoers
Datei auf einem Server wie diesem ist eine Katastrophe, die darauf wartet, passiert zu werden. Wenn jemand als Benutzer Zugriff erhält (z. B. über den Webserver), kann er sofort root werden. Vielen Dank, aber ich habe nach Lösungen gesucht, die meine Serverkonfiguration nicht in Konflikt bringen. Wenn Sie eine Lösung hätten, die die Authentifizierung von SSH auf magische Weise für densudo
Befehl wiederverwendet , wäre ich mehr interessiert (und würde möglicherweise nach Ersatz für SSH suchen ...).Sie können den folgenden Befehl ausführen, um Root-Zugriff ohne Interaktivität zu erhalten:
quelle