Ssh

無法通過 SSH 在遠端螢幕會話中重定向 STDOUT

  • September 22, 2014

我想通過 SSH/screen 執行一個長時間執行的命令,並將輸出重定向到一個文件。我能夠很好地執行命令(類似於這個問題),但輸出永遠不會出現。

這是我目前的命令:

ssh user@host screen -dm "ping -c 20 -i 5 localhost > /tmp/ping.out"

在遠端主機上,我可以看到會話:

> screen -ls
There is a screen on:
       4530..com001     (Detached)
1 Socket in /var/run/screen/S-root.

並附加以查看實時輸出,該輸出按預期終止, ping 命令完成:

PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.071 ms
..

除了文件重定向之外,一切都只是我需要的:本地主機上的 ssh 立即斷開連接,命令在遠端主機上的螢幕會話中實時執行(我可以連接到螢幕會話並查看我的 ping 執行)和螢幕ping 命令完成後會話立即終止。/tmp/ping.out 文件甚至可以在遠端主機上創建!但是顯示停留在螢幕會話中,而不是被重定向到文件。

我在這裡想念什麼?

(順便說一句,ping 只是為了測試。最終我想停一個 1 - 2 分鐘的 tcpdump 並在後台收集輸出以進行故障排除)。

螢幕“輸出”並不完全符合您的期望,因為它被設計為多路復用器。您正在尋找的命令是:

ssh user@host screen -d -m "sh -c 'ping -c 20 -i 5 localhost > /tmp/ping.out'"

此命令將產生一個新的外殼並按預期工作。

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