天天看點

linux 使用ssh到遠端并且使用while的坑

  如果要使用ssh批量登入到其它系統上操作時,我們會采用循環的方式去處理,那麼這裡存在一個巨大坑,你必須要小心了。

  現在是想用一個腳本擷取遠端伺服器端/root下面的檔案:

   結果: 腳本隻對第一個IP做了檢測,就直接跳循環。  

   while使用重定向機制,ip.txt檔案中的資訊都已經讀入并重定向給了整個while語句,是以當我們在while循環中再一次調用read語句,就會讀取到下一條記錄。問題就出在這裡,ssh語句正好回讀取輸入中的所有東西。為了禁止ssh讀所有東西增加一個< /dev/null,将ssh 的輸入重定向輸入。

  1、使用for循環代表while,因為for沒有一次把檔案内容緩存擷取過來,代碼段修改如下:

  2、若堅持使用while循環,那麼需要對ssh增加-n參數,為什麼增加了-n參數也可以解決問題呢?通過man ssh檢視-n參數的說明

    Redirects stdin from /dev/null (actually, prevents reading from stdin)

繼續閱讀