2012-07-17 68 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'并再次关闭。