shell下在while循環中使用ssh命令的問題


1 現象描述

  最近使用ssh批量執行命令(已經做了密鑰互信了),腳本讀取配置文件中的主機列表(內容為每行一台主機IP地址),然后執行,可是每次只是執行第一台,就退出循環了。

2 排查思路

  由於腳本比較簡單,只是讀取主機,然后ssh而已,所以問題應該出現在ssh上

3 確定問題

  搞不通ssh命令為什么會導致shell退出,最后上網搜了一下才找到答案。

ssh命令在每次執行時,會讀取所有的標准輸入中的內容。

  對於while循環,當按照如下方式使用時:

while  read Line
    do 
        echo $Line
done  < $filename

  這里使用重定向,將文件內容輸入到while命令,while命令每次使用read從輸入中讀取一行數據。

  問題就在這里,如果在while循環中調用了ssh命令,那么ssh就會把當前輸入中所有的數據讀走,也就是重定向給while命令的數據,都被ssh命令讀走了,以至於下次循環的時候,read讀到的內容為空,導致循環提前結束。

4 處理結果  

  解決這個問題兩種方式

  1. 使用ssh的-n參數:用/dev/null來當ssh的輸入,阻止ssh讀取本地的標准輸入內容。
  2. ssh xxxx < /dev/null 重定向shell命令的輸入


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM