-
Expect und Bash mischen
Hallo Leute, ich wollte ein Script erstellen, dass sich per SSH auf einem linuxserver anmeldet.
Jetzt gibt es drei Möglichkeiten die er nach Möglichkeit automatisch abfangen soll
1. er will ein password - Passwort wird übergeben
2. er fragt ob der Server in die Liste der bekannten hosts aufgenommen werden soll - yes
3. er fragt nach einer passphrase des keys auf dem Server.
Ich hatte mal folgendes angefangen was so nicht funktioniert. Könnt ihr mir weiter helfen?
Am Ende soll er eine bestimmte Aktion ausführen. Zum Beispiel ein Verzeichnis löschen.
Code:
#!/usr/bin/expect /bin/bash
set pass [lindex $argv 0]
set pass [lindex $argv 1]
for servername in Server1 Server2 Server3
do
echo "loesche auf $servername"
spawn ssh <user>@$servername 'rm -r ~/exp'
expect "Password:" {send "$pass\r"}
expect "Are you sure you want to continue connecting (yes/no)?" {send "yes\r"}
expect "phrase" {send "$phrase\r"}
-
Hi Fraenker,
expect ist ein nützliches Tool. IMHO aber auch wirklich die letzte Möglichkeit die ich verwenden würde, also nur dann, wenn es wirklich sein muss. Grundsätzlich ist expect auch eher aufwändig.
In Deinem Fall würde ich mal grundsätzlich zu schlüsselbasierter SSH-Anmeldung greifen. Der Hostkey muss auch nur einmal pro neuem Host akzeptiert werden. Eine Passphrase für einen SSH-Key kann man auch leer lassen, so dass diesbezüglich keine Abfrage kommt.
Daneben kann man den SSH-Client auch mit einer Vielzahl von Optionen steuern. Z. B. könnte man, wenn man das nützliche Sicherheitsmerkmal "HostKeys" wirklich nicht verwenden möchte, es abschalten hiermit:
Code:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null USERNAME@HOSTNAME
Mehr zu den Optionen unter fork();