2012-07-17 58 views
3

所以我有一個類似於how to send ssh job to background的問題。SSH:發送遠程命令到本地背景

我有一個Windows c#程序,使用http://sshnet.codeplex.com/自動在遠程linux操作系統上執行tcpdump。我試圖在遠程linux上執行tcpdump,並在斷開連接後保持運行。

我一直在使用plink進行大量的調試,但似乎無法達到預期的效果。我試過了:

plink [email protected] bash -c "tcpdump -i eth0 -w test.cap" 

但它擁有sshclient,直到我ctrl + C(不會爲自動化解決方案工作)。我也試過的變體:

plink [email protected] bash -c "tcpdump -i eth0 -w test.cap &" 

但任一命令根本沒有執行(test.cap不存在)或立即終止(test.cap包含1線)。在測試過程中,我已經留下了平去,所以拍攝應該有財產以後 ...

前面提到的鏈接解決了屏幕問題,但遠程Linux操作系統是不可配置的,沒有屏幕。歡迎任何建議。

+0

這些解決方案都不適用於我,在Fedora機器上遠程執行tcpdump。但是,如果tcpdump命令被bash腳本封裝,則腳本可以通過遠程ssh命令執行並按預期完成。 – user3529322 2014-04-13 15:46:02

+0

盡我所能做到這一點,在我的情況下,遠程機器是一個只讀的嵌入式操作系統。 – reasra 2014-06-06 14:05:52

回答

2

我也有類似的問題,同時啓動遠程應用程序。這種模式爲我工作在Debian服務器:

ssh [email protected] "nohup /usr/local/bin/app -c cfg &; exit" 

另外:對於另一個測試以上沒有工作,即。該命令沒有在遠程服務器上啓動。在退出之前添加一個成功返回的命令似乎可行。

ssh [email protected] "nohup /usr/local/bin/otherapp &; w; exit" 
5

在後一種情況下,當您斷開連接時,您的tcpdump進程可能會中止。請嘗試:

plink [email protected] bash -c "nohup tcpdump -i eth0 -w test.cap &" 

請參閱nohup的手冊頁。您可能還需要考慮重定向輸出和錯誤文件或/dev/null防止nohup從寫輸出到文件:

plink [email protected] bash -c "nohup tcpdump -i eth0 -w test.cap >/dev/null 2>&1 &" 
+0

我很欣賞這個建議,但都沒有成功。當我在10.5.1.1上運行__ps -ef__時,tcpdump沒有運行。另外,當我只是通過管道輸出tcpdump而不是使用內置的writer('>'而不是'-w')時,文件被創建,但是完全是空的。也許這有幫助? – reasra 2012-07-18 15:19:29

+0

這聽起來像'tcpdump'可能只是在後臺運行,所以它正在死亡。通常'nohup'處理這些類型的程序。不客氣,我想不出任何其他可能適合你的選擇,對不起! – mrb 2012-07-18 15:41:51

0

我有同樣的問題。我有一個腳本,我沒有任何tcpdump .... &。當ssh完成時,我無法使用ssh來運行它。我想出的解決方案非常簡單。我只是在我的腳本的末尾添加了睡眠5,並且它工作得很好。看起來tcpdump需要幾秒鐘才能退出,甚至在沒有nohup的情況下退出。

0

我有同樣的問題,我發現「-t」選項似乎對nohup很重要。如果沒有「-t」選項,我發現nohup沒有影響。

ssh -t [email protected] 'nohup tcpdump -i any -w /tmp/somefile &>/dev/null & sleep 2'

0

我想,我已經釘它,至少在IBM AIX

我使用

ssh -tq [email protected] "/path/start-tcpdump.ksh" 

(認證由publick鍵完成)。 我使用簡單的「nohup tcpdump .... &」有不一致的結果,有時它工作,有時它沒有,有時它甚至被阻塞,我不得不斷開會話。 到目前爲止,這是工作確定,我真的不能說,爲什麼它是工作,但它是...

這是我的開始,tcpip.ksh

#!/usr/bin/ksh 
HOST=$(uname -n) 
FILTER="port not 22" 
(tcpdump -i en1 -w $HOST-en1.cap $FILTER >/dev/null 2>&1) & 
sleep 2 
(tcpdump -i en2 -w $HOST-en2.cap $FILTER >/dev/null 2>&1) & 
sleep 2 
exit 0 
+0

什麼是'start-tcpip.ksh'?你只在你的命令中提到'start-tcpdump.ksh'。 – dg99 2014-06-05 23:20:32

1

我也有類似的情況: (在Windows機器上)我想創建一個ms批處理腳本來打開一個SSH連接到樹莓派並在後臺執行本地腳本。 我發現,結合兩種Raj的和法赫德的答案爲我做的伎倆:

我的MS批處理腳本:

plink -load "raspberry Pi" -t -m startCommand.txt 

startCommand.txt的內容如下:

nohup /home/pi/myscript >/dev/null 2>&1 & 
w 
exit 

「>/dev/null 2> & 1」很重要! 我發現(硬盤的方式),該RPI的SD卡一直得到全由一個非常大的nohup.out文件中(和一個完整的SD卡,該RPI甚至無法登錄正確)

推理:

我用-load在PuTTY中加載保存的會話(我這樣做是因爲我使用公鑰/私鑰進行身份驗證而不是密碼,但這應該與簡單地在主機中輸入相同)

then -t如Raj所推薦)

然後-m加載該文件中的命令列表

沒有參數「-t」而沒有「w」和「exit」,我的批處理腳本就會運行,不會執行'myscript'並再次關閉。