Ssh
如何在遠端伺服器上執行任意長輸出的命令然後停止?
我知道我可以在遠端伺服器上執行命令(請參閱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