Ich schreibe ein C-Shell-Programm, das su
oder sudo
oder ausgeführt wird ssh
. Sie alle möchten ihre Passwörter in der Konsoleneingabe (TTY) anstatt in stdin oder in der Befehlszeile.
Kennt jemand eine Lösung?
Das Einrichten ohne Passwort sudo
ist keine Option.
erwarten von könnte eine Option sein, ist aber auf meinem abgespeckten System nicht vorhanden.
Antworten:
Für sudo gibt es eine -S-Option zum Akzeptieren des Passworts von der Standardeingabe. Hier ist der Manneintrag:
Auf diese Weise können Sie einen Befehl wie den folgenden ausführen:
Was ssh betrifft, habe ich viele Versuche unternommen, die Verwendung zu automatisieren / zu skripten, ohne Erfolg. Es scheint keine eingebaute Möglichkeit zu geben, das Kennwort ohne Aufforderung an den Befehl zu übergeben. Wie andere bereits erwähnt haben, scheint das Dienstprogramm " erwarten " darauf ausgerichtet zu sein, dieses Dilemma zu lösen. Letztendlich ist das Einrichten der richtigen Autorisierung für private Schlüssel jedoch der richtige Weg, um dies zu automatisieren.
quelle
nonroot:[email protected]
? Natürlich sind die Dinge viel einfacher, wenn Sie die Schlüsselauthentifizierung und den Schlüsselmanager verwenden.'cat pw | sudo -S <command>
und späterrm pw
.nc -l 12345 | sudo -S <command>
. Auf der sendenden Seite;echo myPassord | nc <target> 12345
. Dadurch wird nur das Problem der Kennwortbehandlung verschoben, vermutlich jedoch auf eine Hauptkonsole, auf der Sie mehr Optionen haben.Ich habe ein Applescript geschrieben, das über ein Dialogfeld zur Eingabe eines Kennworts auffordert und dann einen benutzerdefinierten Bash-Befehl wie folgt erstellt:
Ich bin mir nicht sicher, ob das hilft.
Es wäre schön, wenn sudo ein vorverschlüsseltes Passwort akzeptieren würde, damit ich es in meinem Skript verschlüsseln könnte und mich nicht darum kümmern müsste, Klartext-Passwörter wiederzugeben. Dies funktioniert jedoch für mich und meine Situation.
quelle
Für
ssh
Sie können verwendensshpass
:sshpass -p yourpassphrase ssh user@host
.Sie müssen nur zuerst sshpass herunterladen :)
quelle
Ich habe:
Funktioniert bei mir.
quelle
Für sudo können Sie dies auch tun:
quelle
Die übliche Lösung für dieses Problem besteht darin, eine Hilfs-App einzurichten, die die Aufgabe ausführt, für die Superuser-Zugriff erforderlich ist: http://en.wikipedia.org/wiki/Setuid
Sudo darf nicht offline verwendet werden.
Spätere Bearbeitung: SSH kann mit der Authentifizierung mit privatem und öffentlichem Schlüssel verwendet werden. Wenn der private Schlüssel keine Passphrase hat, kann ssh ohne Aufforderung zur Eingabe eines Kennworts verwendet werden.
quelle
Dies kann durch Einrichten öffentlicher / privater Schlüssel auf den Zielhosts erfolgen, zu denen Sie eine Verbindung herstellen. Der erste Schritt besteht darin, einen SSH-Schlüssel für den Benutzer zu generieren, der das Skript auf dem lokalen Host ausführt, indem Folgendes ausgeführt wird:
Geben Sie dann ein leeres Passwort ein. Kopieren Sie anschließend Ihren SSH-Schlüssel auf den Zielhost, zu dem Sie eine Verbindung herstellen möchten.
Nachdem Sie die SSH-Schlüssel registriert haben, können Sie
ssh remote_user@other_host
von Ihrem lokalen Host aus eine Stummschaltung durchführen .quelle
Vielleicht können Sie einen
expect
Befehl verwenden?:Dieser Befehl gibt das Passwort automatisch.
quelle
Wenn es keine bessere Wahl gibt (wie von anderen vorgeschlagen), kann man socat helfen:
Die gesamte Komplexität von pty, setsid und ctty ist notwendig, und obwohl Sie möglicherweise nicht so lange schlafen müssen, müssen Sie schlafen. Die Option echo = 0 ist ebenso einen Blick wert wie die Übergabe des Remote-Befehls über die Befehlszeile von ssh.
quelle
su
.su
hat keine -S (stdin) Option.Schau es dir an
expect
Linux-Dienstprogramm an.Sie können die Ausgabe basierend auf dem einfachen Mustervergleich auf stdin an stdio senden.
quelle
Richten Sie SSH für die Authentifizierung mit öffentlichem Schlüssel ohne Pasphrase auf dem Schlüssel ein. Jede Menge Anleitungen im Netz. Sie benötigen dann kein Passwort, um sich anzumelden. Sie können dann die Verbindungen für einen Schlüssel basierend auf dem Client-Hostnamen einschränken. Bietet angemessene Sicherheit und eignet sich hervorragend für automatisierte Anmeldungen.
quelle
quelle
Ich hatte das gleiche Problem. Dialogskript zum Erstellen eines Verzeichnisses auf einem Remote-PC. Der Dialog mit SSH ist einfach. Ich benutze sshpass (zuvor installiert).
Grüße aus Deutschland
Titus
quelle
Aufbauend auf der Antwort von @ Jahid funktionierte dies für mich unter macOS 10.13:
quelle
Eine bessere
sshpass
Alternative ist:passh
https://github.com/clarkwang/passhMelden Sie sich bei einem Remote-Server an
Führen Sie einen Befehl auf dem Remote-Server aus
andere Methoden, um das Passwort zu übergeben
hier habe ich erklärt, warum es besser ist als sshpass und andere lösungen.
quelle
Das funktioniert.
quelle
su
, die stattdessen das Passwort von stdio lesen .Das Hardcodieren eines Passworts in einem Expect-Skript ist dasselbe wie ein passwortloses Sudo, was schlimmer ist, da Sudo zumindest seine Befehle protokolliert.
quelle
Eine Möglichkeit wäre die Verwendung der Option "Lesen". Auf diese Weise werden die Kennwortzeichen nicht auf dem Bildschirm wiedergegeben. Ich habe für einige Anwendungsfälle ein kleines Skript geschrieben, das Sie in meinem Blog sehen können: http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/
quelle
VERWENDEN:
Beispiel:
Ich hoffe es hilft..
quelle
Sie können ein Kennwort als Parameter für das zu erwartende Skript angeben.
quelle
Hoffe es ist hilfreich.
quelle