2009-04-20 75 views
2

我有一個Perl Expect.pm腳本,它執行一些中等複雜的東西,比如在多個遠程Unix主機上打包應用程序,部署應用程序,檢查日誌等。rsh與Perl的Expect.pm有什麼優勢?

我的前任使用rsh編寫了類似的腳本。

兩者之間有更好的方法嗎?或者我應該使用不同的東西?

我猜測有人會提出SSH;它基本上取代了rsh,對吧?不幸的是,SSH現在不適合我。

我應該補充的另一件事是,登錄後我需要能夠SUDO特定用戶來執行遠程主機上的大部分操作。

回答

3

他們做不同的事情。期望是一種腳本來編寫手動響應的方式。 rsh - 遠程shell,不受限制的shell,不幸的名稱衝突 - 允許您在另一個系統上遠程運行命令。

也就是說,使用rsh做遠程命令,運行sudo等等的安全漏洞和其他缺點是巨大的。

+0

但是期望也允許遠程登錄到遠程系統,這是我目前使用它的方式,所以它看起來像做了rsh所做的一切,等等。那麼爲什麼我會使用rsh? – 2009-04-20 23:52:24

+0

上帝,你不會的。可悲的是,telnet引發了相同的問題 - 比如你的密碼在你的telnet會話中以明文形式漫遊。 – 2009-04-20 23:56:21

+0

是真的,我知道安全問題會出現,事實上我喜歡perl期望的一個原因是我可以簡單地將初始登錄線路從telnet更改爲SSH,因爲我已經有了它,我的腳本應該繼續保持原樣。所以基本上你可以看到沒有理由使用rsh在這一點上? – 2009-04-21 00:00:15

2

如果在rshtelnet之間選擇通過expect,我會選擇rshExpect腳本很脆弱。所有它需要打破一個是有人在遠程機器上更改PS1的值。使用rsh也爲您準備好一天,最終將進入90年代,並開始使用ssh(因爲您可以主要將rcp改爲scprsh改爲ssh並且一切仍然有效)。

4

我應該補充的另一件事是,登錄後我需要能夠SUDO特定用戶來執行遠程主機上的大部分操作。

爲了解決這個問題一個特定點:使用rsh(或ssh),您可以指定遠程會話成爲其用戶:

$ rsh -l username hostname 

沒有必要在這種情況下使用sudo。由於安全問題,現在肯定是時間考慮ssh。語法是相同的,但ssh也可以讓一個稍微不同的(我會說好)語法:

$ ssh [email protected] 

我發現expect過於挑剔,但我有這方面的經驗還不夠充分。

3

我可以看到這樣做的多種方式:

  • 期待通過telnet,rsh或SSH
    • 優點:單連接,減少逃避問題
    • 缺點:脆弱性在不斷變化的環境
  • rsh/ssh each each individual
    • 優點:較少的逃避問題,在不斷變化的環境中更可靠
    • 缺點:每個連接需要時間的驗證,而且,對於SSH,在一次 握手加密
  • RSH/SSH的所有命令
    • 優點:單個連接(減少開銷),更可靠的比預期
    • 缺點:脆弱性的維護尤其是當你獲得比在那裏語句屈指可數,逃避問題比較普遍(在Perl逃脫這樣,它仍然是通過rsh/ssh轉義所以,它的由遠程shell還是逃了出來,這樣它是由sudo'd遠程shell妥善處理)
  • RSH/SSH和運行腳本
    • 優點:單一的連接,更可靠,更可維護的
    • 缺點:找到一種方法讓它在那裏(rcp/scp工作,NFS工作,你需要爲你確定最好的方法)。

所有的事情考慮,這是最輕微的騙子,你可以簡單地做這樣的事情

open my $fh, "|ssh [email protected] 'cat > /tmp/myscript'"; 
print $fh $script; 
system qw(ssh [email protected]), "chmod u+x /tmp/myscript; /tmp/myscript; rm /tmp/myscript"; 

當然,你會在一些錯誤處理添加(未能打開,如果有什麼/ tmp/myscript存在等),但這就是主意。