2011-07-20 30 views
6

我正在研究需要將命令發送到遠程服務器的應用程序。大量的SSH客戶端庫發送命令很簡單。如何以編程方式獲得有狀態的ssh shell會話?

但是,我想在每個命令之間保留shell狀態(即當前工作目錄,環境變量等)。我見過的所有客戶端庫都不這樣做。例如,以下是代碼,不會做我想做的一個例子:

use Net::SSH::Perl; 
my $server = Net::SSH::Perl->new($host); 
$server->login($user, $pass); 

$server->cmd('cd /var'); 
$server->cmd('pwd');  # I _would like_ this to output /var 

會有發送命令之間進行,所以相結合的命令,如$server->cmd('cd /var; pwd')其他任務是不能接受的。

回答

0

我不確定你在做什麼,但你可以啓動一個SSH會話。如果你真的無法做到這一點,也許你可以使用絕對路徑的一切。

2

Net::SSH::Expect做你想做的事情,雖然「期望」方式並不完全可靠,因爲它會解析你的命令的輸出並試圖檢測shell提示何時再次出現。

+0

只要你只運行你知道如何解析輸出的命令就好了。 – Joshua

+0

@Joshua:好吧,我後來發現Net :: SSH :: Expect沒有使用任何邏輯來確定命令何時完成。它只有一個(可定製的)超時時間,並假定當超時結束時命令完成。完全不可靠! – salva

+0

EWWW。那麼你可能會做得很好,然後直接寫出期望值。 – Joshua

相關問題