Bash-Skript, um SSH in eine Maschine ohne Aufforderung das Passwort und ohne die Verwendung von Schlüsseln
Merke ich, diese Frage wurde gebeten ein paar mal, aber ich konnte nicht finden, eine relevante Antwort irgendwo in meinem suchen.
Arbeite ich in einer Entwicklungsumgebung, in denen die Sicherheit ist nicht ein Problem, und jeder konnte nur erraten das Passwort, wenn der Gedanke für ein paar Sekunden.
Was ich versuche zu tun, ist einfach. Erstellt habe ich eine alias-Funktion in mein lokal .bashrc-Datei und ich möchte diese Funktion automatisch einloggen in eine Maschine mit einem default-Passwort.
Meine aktuelle Implementierung sieht wie folgt aus:
function s () {
ssh root@192.168.1.$1
}
Wenn ich es laufen lasse bekomme ich so etwas wie dieses:
~]s 122
ssh root@192.168.1.122
root@192.168.1.122's password:
Bash verwenden, und nicht die Verwendung von RSA-keys ich würde gerne dieses verwenden das Standard-Passwort 'password'.
Ich habe versucht, die folgenden, wo die IP und User wurden bereits gesetzt.
Do=$(expect -c "
spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}
expect \"yes/no\"
send \"yes\r\"
expect \"assword\" send \"password\"")
echo $Do
$Do
Gibt es den folgenden Fehler:
Connecting and logging into server using expect
usage: send [args] string
while executing
"send"
invoked from within
"expect "assword" send "password""
Administrator@192.168.1.176's password:
bash: spawn: command not found...
Verwenden Sie den folgenden Befehl, den ich bin in der Lage, die Verbindung einer Maschine. Wenn ich entfernen Sie die Interaktion läuft es einfach in der uptime-Befehl und schließt die Verbindung. Mit der interact-Befehl, den ich bin nicht in der Lage, um zu sehen, was ich tippe oder tatsächlich die Interaktion mit der Maschine. Irgendwelche Ideen?
Do=$(expect -c "spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}; set timeout 4; expect \"assword\"; send \"password\n\"; expect \"test\"; send \"uptime\n\"; interact;");echo $Do;
Nur Frage mich, was Ihre Abneigung gegen RSA-Schlüssel? Das erste, was ich immer mache, wenn ein system neu aufzusetzen ist zu ermächtigen, einen RSA-Schlüssel.
Ich wollte nicht, dass die Arbeit mit RSA-keys bin, weil ich arbeite mit vielen verschiedenen Servern, die eine sehr begrenzte Lebensdauer, und das script wird von vielen Menschen genutzt.Die Idee ist, um Zeit zu sparen, indem nicht mit, um geben Sie das gleiche Kennwort jedes mal. Wenn ich den Typ das Kennwort jedes mal, wenn ich den ersten Besuch einer neuen Maschine zu ssh-copy-id die Schlüssel über es Niederlagen der Zweck.
Sagen Sie, dass erwarten spawn Befehl nicht wissen, was zu tun mit ssh und ich sollte /bin/ssh statt?
warum nicht Schiff, die RSA-Schlüssel neben dem Skript und das Skript verwenden
ssh -i <key>
?InformationsquelleAutor SuperTetelman | 2012-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies mit der
expect
tool: http://expect.sourceforge.net/Es ist weit verbreitet, so abhängig von Ihrem system, das äquivalent von
sudo apt-get install expect
oderyum install expect
installieren.Hier ist ein Beispiel für eine
expect
script mit ssh. Dies meldet Sie und gibt Ihnen die Kontrolle über die interaktive Eingabeaufforderung:Hier ist ein Beispiel, wie
expect
als Teil eines bash-Skript. Dieser loggt sich mit ssh, cd to /var, führt ein Skript aus, beendet dann die ssh-Sitzung.Lassen Sie diese Schnipsel in ein Skript auf Ihrem lokalen system, und dann nur alias auf die Skripte.
Auch: ich weiß, Sie sagte, Sicherheit ist nicht ein Problem, aber ich möchte nur beachten Sie nochmals, dass der "richtige" Weg, um ssh ohne ein Kennwort zu verwenden, ist die Verwendung eines ssh-Schlüssel-paar =)
Ich habe beides verwendet \n und \r für erwarten scripts. Ist eine besser als die andere?
InformationsquelleAutor sampson-chen
Verwenden
sshpass
, die verfügbar ist in den Paket-repositories, die auf großen Linux-es.Zum Beispiel, wenn das Passwort ist in
password.txt
Datei:InformationsquelleAutor uvsmtid