163 Stimmen

Wie kann man das Passwort an su/sudo/ssh übergeben, ohne den TTY zu überschreiben?

Ich schreibe ein C-Shell-Programm, das folgende Aufgaben hat su o sudo o ssh . Sie alle wollen ihre Passwörter in der Konsoleneingabe (dem TTY) und nicht in stdin oder der Befehlszeile.

Kennt jemand eine Lösung?

Einrichten von passwortlos sudo ist keine Option.

erwarten könnte eine Option sein, aber sie ist auf meinem abgespeckten System nicht vorhanden.

0 Stimmen

0 Stimmen

239voto

Jesse Webb Punkte 39655

Für sudo gibt es die Option -S, um das Passwort von der Standardeingabe zu übernehmen. Hier ist der man-Eintrag:

    -S          The -S (stdin) option causes sudo to read the password from
                the standard input instead of the terminal device.

Damit können Sie einen Befehl wie diesen ausführen:

echo myPassword | sudo -S ls /tmp

Was ssh betrifft, so habe ich viele Versuche unternommen, seine Verwendung zu automatisieren/skripten, ohne Erfolg. Es scheint keine eingebaute Möglichkeit zu geben, das Passwort ohne Eingabeaufforderung an den Befehl zu übergeben. Wie andere bereits erwähnt haben, ist das " erwarten "Es sieht so aus, als würde es dieses Dilemma lösen, aber letztendlich ist die Einrichtung der richtigen Private-Key-Autorisierung der richtige Weg, wenn man versucht, dies zu automatisieren.

2 Stimmen

Glücklicherweise verfügt Ruby über einen eingebauten SSH-Client, mit dem Sie das Passwort angeben können. Versuchen Sie ruby -e "require 'net/ssh' ; Net::SSH.start('example.com', 'test_user', :password => 'secret') do |ssh| puts 'Erfolgreich eingeloggt' ; while cmd=gets ; puts ssh.exec!(cmd) ; end end"

20 Stimmen

Ich hasse es, hier ein Spielverderber zu sein, aber wenn Sie dies tun, kann Ihr Kennwort in einer Prozessliste angezeigt werden. Ich habe nach einer besseren Lösung gesucht und bin auf diesen Artikel gestoßen und war überrascht, dass noch niemand darauf hingewiesen hat. Tolle Lösung, aber seien Sie sich der Risiken bewusst.

0 Stimmen

Über ssh, haben Sie versucht, das Passwort in der Verbindungszeichenfolge zu übergeben? wie nonroot:yourpassword@hostname.com ? Natürlich sind die Dinge viel einfacher, wenn Sie Schlüsselautorisierung und Schlüsselverwaltung verwenden.

38voto

mlambie Punkte 7406

Ich habe ein Applescript geschrieben, das über ein Dialogfeld zur Eingabe eines Passworts auffordert und dann einen benutzerdefinierten Bash-Befehl wie den folgenden aufbaut:

echo <password> | sudo -S <command>

Ich bin mir nicht sicher, ob das hilfreich ist.

Es wäre schön, wenn sudo ein vorverschlüsseltes Passwort akzeptieren würde, so dass ich es in meinem Skript verschlüsseln könnte und mir keine Gedanken über das Echo von Klartextpasswörtern machen müsste. Wie auch immer, dies funktioniert für mich und meine Situation.

0 Stimmen

Pseudoterminal wird nicht zugewiesen, da stdin kein Terminal ist

35voto

Edward Punkte 329

Für ssh können Sie sshpass : sshpass -p yourpassphrase ssh user@host .

Sie müssen nur zuerst sshpass herunterladen :)

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server

18voto

Jahid Punkte 19666

Für sudo können Sie dies ebenfalls tun:

sudo -S <<< "password" command

13voto

adhown Punkte 391

Vielleicht können Sie eine expect Befehl?:

expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact

Dieser Befehl gibt das Passwort automatisch aus.

0 Stimmen

Sieht gut aus, aber wie kann ich den Befehl expect auf einer Maschine ohne Root-Rechte aktivieren?

1 Stimmen

@Radon8472 Eine ausführbare Datei kann zu ~/bin hinzugefügt werden, wenn Sie keine Berechtigung zur Installation haben. Wenn Ihr System ~/bin nicht automatisch zu Ihrem PATH hinzufügt, können Sie dies manuell mit export PATH="$PATH:~/bin" tun oder diesen Befehl zu Ihrem Profil hinzufügen, um es automatisch zu tun. Wenn Sie Ihren PATH nicht ändern wollen, können Sie stattdessen den Befehl mit seinem absoluten Pfad ausführen: ~/bin/expect [Argumente] Vergessen Sie nicht, das ausführbare Bit zu setzen: chmod +x ~/bin/expect

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X