Ich muss ein Skript erstellen, das automatisch ein Kennwort für den OpenSSH- ssh
Client eingibt .
Angenommen, ich muss myname@somehost
mit dem Passwort SSH a1234b
.
Ich habe es schon versucht ...
#~/bin/myssh.sh
ssh myname@somehost
a1234b
... aber das funktioniert nicht.
Wie kann ich diese Funktionalität in ein Skript integrieren?
ps -aux
, Sie jedoch normalerweise keine Befehle ausführen sollten, indem Sie Ihr Kennwort eingeben, da andere Benutzer auf demselben Computer das Kennwort möglicherweise durch Ausführen sehen könnenps -aux
. Wenn dies sinnvoll ist, möchten Sie stattdessen auch die Authentifizierung mit öffentlichem Schlüssel verwenden, wie in der anderen Antwort erwähnt. Auf diese Weise können Sie Authentifizierungsinformationen von Ihrem Skript trennen, damit Sie Ihr Skript problemlos für andere freigeben und später die Verschlüsselung in Ihrem Ordner ~ / .ssh aktivieren können, ohne auch Ihr Skript zu verschlüsseln.sshpass
hinzugefügt .Nachdem ich monatelang nach einer Antwort auf die Frage gesucht hatte, fand ich endlich eine bessere Lösung: ein einfaches Skript zu schreiben.
Setzen Sie es auf
/usr/bin/exp
, dann können Sie verwenden:exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
Getan!
quelle
Verwenden Sie die Authentifizierung mit öffentlichem Schlüssel: https://help.ubuntu.com/community/SSH/OpenSSH/Keys
Führen Sie dies auf dem Quellhost nur einmal aus:
Das ist alles, danach können Sie ssh ohne Passwort ausführen.
quelle
Sie können ein Expect-Skript verwenden. Ich habe seit einiger Zeit keine mehr geschrieben, aber es sollte wie folgt aussehen. Sie müssen das Skript mit leiten
#!/usr/bin/expect
quelle
/bin/myssh.sh: 2: spawn: not found /bin/myssh.sh: 3: expect: not found /bin/myssh.sh: 4: send: not found /bin/myssh.sh: 5: expect: not found /bin/myssh.sh: 6: send: not found
which expect
#!/usr/bin/env expect
interact
habe am Ende hinzugefügt , damit die SSH-Sitzung tatsächlich interaktiv istVariante I.
Variante II
quelle
-p
Flag dient zur Angabe einer Portnummer.SYNOPSIS sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
yum -y install epel-release
und dannyum -y install sshpass
sshpass + autossh
Ein netter Bonus des bereits erwähnten
sshpass
ist, dass Sie es verwenden könnenautossh
, wodurch noch mehr interaktive Ineffizienz beseitigt wird.Dies ermöglicht die automatische Wiederverbindung, wenn beispielsweise Ihr WLAN durch Schließen Ihres Laptops unterbrochen wird.
quelle
-f
zu autossh in dieser Kombination, weilwhen used with autossh, ssh will be *unable* to ask for passwords or passphrases.
harding.motd.ca/autossh/README.txt auch superuser.com/questions/1278583/...sshpass
mit besserer SicherheitIch bin auf diesen Thread gestoßen, als ich nach einer Möglichkeit gesucht habe, in einen festgefahrenen Server zu ssh - es dauerte über eine Minute, um den SSH-Verbindungsversuch zu verarbeiten, und es trat eine Zeitüberschreitung auf, bevor ich ein Kennwort eingeben konnte. In diesem Fall wollte ich mein Passwort sofort eingeben können, wenn die Eingabeaufforderung verfügbar war.
(Und wenn es nicht schmerzlich klar ist: Mit einem Server in diesem Zustand ist es viel zu spät, eine Anmeldung mit öffentlichem Schlüssel einzurichten.)
sshpass
zur Rettung. Es gibt jedoch bessere Möglichkeiten, dies zu tun alssshpass -p
.Meine Implementierung springt direkt zur interaktiven Kennwortabfrage (keine Zeitverschwendung, um festzustellen, ob ein Austausch öffentlicher Schlüssel möglich ist) und zeigt das Kennwort niemals als einfachen Text an.
quelle
trap
zu verhindern, dass Strg-C dieSSHPASS
Variable verliertPreferredAuthentications=keyboard-interactive
das nicht funktionierte, aber es durchPreferredAuthentications=password
funktionierte zu ersetzen .So melde ich mich bei meinen Servern an.
#! / bin / bash
sshpass -p mypassword ssh root @ $ 1
Und deshalb...
quelle
Referenz: https://www.linkedin.com/pulse/youre-doing-wrong-ssh-plain-text-credentials-robert-mccurdy?trk=mp-reader-card
quelle
Ich glaube nicht, dass ich jemanden gesehen habe, der dies vorschlägt, und das OP hat nur "Skript" gesagt, also ...
Ich musste das gleiche Problem lösen und meine bequemste Sprache ist Python.
Ich habe die Paramiko-Bibliothek benutzt. Außerdem musste ich Befehle ausgeben, für die ich eskalierte Berechtigungen benötigen würde
sudo
. Es stellt sich heraus, dass sudo sein Passwort über stdin über das "-S" -Flag akzeptieren kann! Siehe unten:Hoffe das hilft jemandem. Mein Anwendungsfall bestand darin, Verzeichnisse zu erstellen, Dateien zu senden und zu entpacken und Programme auf ~ 300 Servern gleichzeitig zu starten. Daher war die Automatisierung von größter Bedeutung. Ich habe versucht
sshpass
,expect
und dann mit diesem kam.quelle
Ich habe das wie folgt funktionieren lassen
.ssh / config wurde geändert, um die Ja / Nein-Eingabeaufforderung zu beseitigen. Ich bin hinter einer Firewall und mache mir keine Sorgen über gefälschte SSH-Schlüssel
Erstellen Sie eine Antwortdatei für "Expect", dh "answer.expect"
Erstellen Sie Ihr Bash-Skript und rufen Sie in der Datei "require" auf
Ruft 128 Hadoop-Datenknoten ab, die mit der neuen Konfiguration aktualisiert wurden - vorausgesetzt, Sie verwenden einen NFS-Mount für die Hadoop / Conf-Dateien
Hoffe, das hilft jemandem - ich bin eine Windows-Nummer und ich habe ungefähr 5 Stunden gebraucht, um das herauszufinden!
quelle
Wenn Sie dies auf einem Windows-System tun, können Sie Plink (Teil von PuTTY) verwenden.
quelle
Ich habe eine bessere Lösung, die die Anmeldung mit Ihrem Konto beinhaltet, als zum Root-Benutzer zu wechseln. Es ist ein Bash-Skript
http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/
quelle
Die Antwort von @abbotto hat bei mir nicht funktioniert, musste einige Dinge anders machen:
quelle
Ich habe es geschafft, damit zu arbeiten:
quelle
Im folgenden Beispiel schreibe ich die Lösung, die ich verwendet habe:
Das Szenario: Ich möchte eine Datei mit einem sh-Skript von einem Server kopieren:
quelle
Verwenden Sie dieses Skript innerhalb des Skripts. Das erste Argument ist der Hostname und das zweite das Kennwort.
quelle
Verwenden Sie den folgenden Befehl, um eine Remote-Maschine über Shell-Skripte zu verbinden:
wo
IPADDRESS
,USERNAME
undPASSWORD
sind Eingangsgrößen , die in Skript zur Verfügung stellen müssen, oder wenn wir in Runtime Verwendung zur Verfügung stellen möchten „lesen“ Befehl.quelle
StrictHostKeyChecking=no
ohne die Konsequenzen zu erklären.Drücken Sie die Eingabetaste und geben Sie dann das Kennwort Ihres Systems und schließlich Ihr Serverkennwort ein
quelle