2016-07-23 22 views
-1

ich expect bin mit auf meinem SSH-Server verbinden:Wie weiterhin Befehle auf SSH-Server eingeben, indem erwarten

#!/bin/expect 

set command [lindex $argv 0] 
set command_connect "connect" 

proc connect {} { 
    spawn ssh [email protected] 
    expect "password" 
    send "password\r" 
    interact 
} 

if {$command == $command_connect} { 
    connect 
} 

Alle guten Arbeits und ich bin kann Verbindung zum Server, aber ich kann Befehle eingeben! Irgendwie kommen alle Befehle auf meinen Computer! Wenn ich versuche, den Bildschirm zu löschen:

proc connect {} { 
    spawn ssh [email protected] 
    expect "password" 
    send "password\r" 
    spawn clear 
    interact 
} 

Dann lösche ich Bildschirm auf meinem Computer und SSH-Verbindung trennen (ich kehrte zu meiner Konsole)!


Warum passiert das und wie weiter Befehle auf SSH-Server eingeben?

Antwort

1

Wenn Sie Befehle an den Remote-Server senden, dann müssen Sie sie durch die gelaicht SSH Prozess senden:

expect "$" 
send "clear\r" 

Die erste Zeile ist erschienen die Eingabeaufforderung auf dem Remote-Server zu gewährleisten.

+0

Ich habe eine neue Frage, vielleicht können Sie mir helfen - http://StackOverflow.com/Questions/38547629/how-does-I-now-Whether-the-Console-Control-is-returned – bukashka101

1

Auch, weil Sie spawn ing innerhalb einer Prozedur sind, dann wird die Variable spawn_idlokalen Umfang haben. Wenn Sie beabsichtigen, die Verbindung innerhalb des Procs zu kapseln, aber mit dem erzeugten Prozess außerhalb der Prozedur arbeiten zu können, müssen Sie dem Prozedurhauptteil global spawn_id hinzufügen.