2012-08-27 13 views
0

我試圖用perl自動化一個進程,基本上telnet到一個系統中,「ssh -f -N」分成兩個,最後打開一個屏幕/ tmux會話並運行sshuttle,然後斷開與屏幕/ tmux的連接。perl調用'ssh -f -N'..我應該使用Net :: Expect,system還是exec?

如果我打算使用「-f -N」選項運行ssh - 是否最好通過Net :: SSH :: Expect,Net :: Expect,system或exec來處理?

我很關心Net :: SSH或Net :: Expect,因爲我不確定幾件事情,首先,我如何獲得Net :: Expect/SSH來識別SSH會話是否成功?也就是說,當我編程Net :: Expect並用這些參數產生ssh會話,並隨後登錄時,沒有更多的'expect'輸出可以看到。我想依賴除期望超時之外的其他東西。

這有道理嗎?我不確定我清楚地說明了我的問題。

我也不確定如果我產生進入後臺的ssh會話,perl將如何表現。我的Perl程序會不會退出?等待基於後臺的SSH會話結束?

正是由於這個最後一個問題,我問了我是否應該考慮使用系統或執行調用Net::Expect的其他問題。

+0

除了運行外部命令外,perl代碼還能執行任何其他處理嗎?這聽起來更適合於shell腳本而不是perl腳本。 – chepner

+0

除了運行外部命令外,代碼並沒有做太多的工作。我通常會爲此使用shell腳本,但需要像期望的那樣將密碼傳遞給ssh。這與嘗試學習更多perl一起,是爲什麼我試圖使用Net :: Expect。 –

+0

,這些特定的主機不允許我使用rsa密鑰進行無密碼登錄。 –

回答

0

您可以使用Net::OpenSSH,如果需要可以與Expect集成。

編輯,呃,我錯過了你通過telnet會話中繼它。忽略以上。

+0

那麼,如何使用RSA密鑰自動化幾個SSH會話而不用使用RSA密鑰,這些密鑰在退出時也能以最初的腳本存活? 據我所知,我無法使用沒有RSA密鑰的shell腳本,因爲我不知道如何將密碼傳遞給SSH登錄提示。 我似乎無法使用perl期望,因爲它在perl腳本結束時hard_close ssh會話。我懷疑真正的TCL期望會做同樣的事情。 –

相關問題