Ssh

如何在遠端伺服器上執行任意長輸出的命令然後停止?

  • September 25, 2017

我知道我可以在遠端伺服器上執行命令(請參閱SO 上的這個問題)。

我想在多個遠端伺服器上執行一個命令(可能使用腳本來循環它們全部?),其中命令的輸出將具有任意長的輸出(即輸出不會停止,直到我按Ctrl + C)。我還希望能夠停止在該命令執行的遠端伺服器上執行程序。

如何在任意數量的遠端伺服器上從本地電腦執行命令,其中(1)命令具有不確定的輸出長度和(2)命令是可終止的?

讓我們在一個循環中執行所有主機,為了簡單起見,您可能希望在它自己的 xterm 中執行每個 ssh。所以我們可能會使用這樣的單行:

for host in host1 host2 host3;  do xterm -e ssh $host -t "echo -e '\033];$host\07';  YOUR_COMMAND >/tmp/$host.log 2>&1&  tail -f /tmp/$host.log"&  done

它的部分的簡短說明:

>/tmp/$host.log 2>&1將您的輸出重定向到一個文件 - 也許您想稍後收集它。

遠端命令中的 echo 部分發送一個轉義序列,用主機名標記您的 xterm。所以如果你有 50 個,你仍然知道什麼是什麼。

2>&1將錯誤輸出重定向到相同的日誌文件。

下一個&背景是主機上的 YOUR_COMMAND,因此 tail 可以向您顯示它的輸出。

最後一個&將本地 xterm 命令發送到後台,因此您可以一次擁有多個命令。

當然,你可以省略所有“複雜”的東西,只要看你的 xterms 並在你看夠了之後在每個 xterms 中點擊 ^C:

for host in host1 host2 host3; do xterm -e ssh $host -t YOUR_COMMAND& done

引用自:https://serverfault.com/questions/875336