2016-11-09 3 views
0

Beim Starten des folgenden Skripts ist die ssh-Anmeldung erfolgreich, und ich kann interagieren, aber es sendet nicht den cd folder Befehl. Ist mein expect "$" Befehl überhaupt nützlich, wenn ich sicher weiß, dass dies der erste Befehl ist, den ich senden möchte, und wie kann der cd folder Befehl gesendet werden?Expect Skript nicht Befehle nach erfolgreichem ssh-Login senden

Hier ist die kurze erwarten Skript:

#!/usr/bin/expect 
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no [email protected] 
expect "password" 
send "mypassword\r" 
expect "$" 
send "cd folder\r" 
interact 

Thank you!

Antwort

2

Sie müssen expect eine spezifische Shell-Eingabeaufforderung.

Laut Handbuch zu erwarten ist:

Beachten Sie, dass in vielen Editoren, die ^ und $ Spiel der Anfang und das Ende der Zeilen sind. Da jedoch nicht Linie erwartet wird, entsprechen diese Zeichen dem Anfang und Ende der Daten (im Gegensatz zu Linien) derzeit im erwarteten übereinstimmenden Puffer.

0

Sie sollten Ihre SSH-Schlüssel mit ssh-keygen (oder wie this) und fragen Sie den Server-Administrator erstellen Sie Ihre öffentlichen Schlüssel ~/.ssh/authorized_keys auf dem Server hinzuzufügen. Dann können Sie sich auf dem Remote-Computer anmelden, ohne das Passwort anzugeben. Andernfalls kann jeder, der Lesezugriff auf das Skript hat, in Ihrem Namen auf den Remote-Server zugreifen! Es gibt eine good discussion in Bezug auf dieses Problem.

Mit den konfigurierten Tasten, können Sie einfach

ssh [email protected] -- 'cd folder; # whatever' 

oder mit Hilfe der here document Syntax:

#!/bin/bash - 
ssh -tt [email protected] <<'EOC' 
cd folder 
# do something else 
exit 
EOC 

Hinweis, die erste -t Option Kräfte pseudo-Klemmenbelegung. Mehrere -t Optionen zwingen tty Zuordnung, auch wenn ssh hat keine lokale tty.

Verwandte Themen