【问题标题】:SSH: Send remote command to local backgroundSSH:向本地后台发送远程命令
【发布时间】:2012-07-16 17:51:29
【问题描述】:

所以我有一个类似how to send ssh job to background的问题。

我有一个 Windows c# 程序可以使用http://sshnet.codeplex.com/ 在远程 linux 操作系统上自动执行 tcpdump。我正在尝试在远程 linux 上执行 tcpdump,并在断开连接后让它继续运行。

我一直在使用 plink 进行大量调试,但似乎无法达到预期的结果。我试过了:

plink root@10.5.1.1 bash -c "tcpdump -i eth0 -w test.cap"

但它持有 sshclient 直到我 ctrl+C(不适用于自动化解决方案)。我还尝试了以下变体:

plink root@10.5.1.1 bash -c "tcpdump -i eth0 -w test.cap &"

但是该命令根本不执行(test.cap 不存在)或立即终止(test.cap 包含 1 行)。在测试期间,我留下了一个 ping,所以捕获应该有 somthing...

前面提到的链接解决了screen的问题,但是远程linux操作系统不可配置,没有screen。欢迎提出任何建议。

【问题讨论】:

  • 这些解决方案都不适合我,在 Fedora 机器上远程执行 tcpdump。但是如果tcpdump命令是用bash脚本封装的,那么脚本可以通过ssh命令远程执行,按预期完成。
  • 尽管我很想这样做,但在我的例子中,远程机器是一个只读嵌入式操作系统。

标签: shell ssh tcpdump


【解决方案1】:

在后一种情况下,您的tcpdump 进程可能会在您断开连接时中止。试试:

plink root@10.5.1.1 bash -c "nohup tcpdump -i eth0 -w test.cap &"

参见nohup 的手册页。您可能还需要考虑将 stdout 和 stderr 重定向到文件或 /dev/null 以防止 nohup 将输出写入文件:

plink root@10.5.1.1 bash -c "nohup tcpdump -i eth0 -w test.cap >/dev/null 2>&1 &"

【讨论】:

  • 我很欣赏这个建议,但都没有奏效。当我在 10.5.1.1 上运行 ps -ef 时,tcpdump 没有运行。此外,当我只是通过管道输出 tcpdump 而不是使用内置编写器('>' 而不是 '-w')时,会创建文件,但完全是空的。也许这有帮助?
  • 听起来tcpdump 可能只是拒绝在后台运行,所以它正在死去。通常nohup 处理这些类型的程序。顺便说一句,我想不出任何其他可能对你有用的选择,抱歉!
【解决方案2】:

我在启动远程应用程序时遇到了类似的问题。这种模式在 Debian 服务器上对我有用:

ssh root@server "nohup /usr/local/bin/app -c cfg &; exit"

补充: 对于另一个测试,上面没有工作,即。该命令未在远程服务器上启动。添加一个在退出之前成功返回的命令似乎有效。

ssh root@server "nohup /usr/local/bin/otherapp &; w; exit"

【讨论】:

    【解决方案3】:

    我也遇到过类似的情况: (在 Windows 机器上)我想创建一个 ms 批处理脚本来打开到树莓派的 SSH 连接并在后台执行本地脚本。 我发现结合 Raj 和 fahd 的答案对我有用:

    我的 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 中加载保存的会话(我这样做是因为我使用公钥/私钥而不是密码进行身份验证,但这应该与简单地输入主机相同)

    然后 -t(由 Raj 推荐)

    然后 -m 加载该文件中的命令列表

    没有参数“-t”并且没有“w”和“exit”,我的批处理脚本只会运行,不会执行“myscript”并再次关闭。

    【讨论】:

      【解决方案4】:

      我有同样的问题。我有一个脚本,其中我有 nohup tcpdump .... & 。我无法使用 ssh 运行它,因为它在 ssh 完成时死掉了。我想出的解决方案非常简单。我刚刚将 sleep 5 添加到脚本的末尾,它工作得很好。即使使用 nohup,在退出之前 tcpdump 似乎也需要几秒钟才能安全地进入后台。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,我发现“-t”选项似乎对 nohup 很重要。我发现没有“-t”选项 nohup 不会生效。

        ssh -t user@remote 'nohup tcpdump -i any -w /tmp/somefile &>/dev/null & sleep 2'

        【讨论】:

          【解决方案6】:

          我认为我已经成功了,至少在 IBM AIX 中

          我正在使用

          ssh -tq user@host "/path/start-tcpdump.ksh"
          

          (身份验证由公钥完成)。 我使用简单的“nohup tcpdump .... &”得到了不一致的结果,有时它有效,有时它没有,有时它甚至阻塞,我不得不断开会话。 到目前为止,这一切正常,我不能说为什么它会起作用,但它是......

          这是我的 start-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
          

          【讨论】:

          • 什么是start-tcpip.ksh?您只在命令中提及start-tcpdump.ksh。
          猜你喜欢
          • 2011-08-25
          • 2012-06-26
          • 1970-01-01
          • 1970-01-01
          • 2016-04-28
          • 1970-01-01
          • 1970-01-01
          • 2020-05-16
          • 1970-01-01
          相关资源
          最近更新 更多