【问题标题】:trouble running bash script remotely, redirecting output locally远程运行 bash 脚本时出现问题,在本地重定向输出
【发布时间】:2012-02-18 06:05:20
【问题描述】:

我正在尝试远程运行脚本(从 bash 脚本),但无法将输出重定向到本地以进行分析。运行脚本没问题:

ssh -n -l "$user" "$host" '/home/user/script.sh $params'

但是我无法捕获该脚本的输出。我尝试了以下方法:

results=$(ssh -n -l "$user" "$host" '/home/user/script.sh $params')
results=`ssh -n -l "$user" "$host" '/home/user/script.sh $params'`
ssh -n -l "$user" "$host" '/home/user/script.sh $params' | grep "what I'm looking for"
ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file

有什么想法吗?

【问题讨论】:

标签: bash ssh


【解决方案1】:

您的脚本没有获取任何参数,因此可能需要很长时间才能运行。此外,无论输出什么(在标准输出上)都可以像任何其他本地命令一样通过管道传送到下一个命令或重定向到文件。考虑以下几点:

$ cat ~/bin/ascript.sh 
echo one:$1 two:$2 three:$3

$ params="squid whale shark"
$ ssh localhost  'ascript.sh $params'
one: two: three:

$ ssh localhost  "ascript.sh $params"
one:squid two:whale three:shark

【讨论】:

    【解决方案2】:

    实现

    ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file
    

    按预期工作。它似乎只是在重定向输出时锁定(并且脚本需要 5-6 分钟才能构建),因此没有显示。谢谢大家。

    【讨论】:

      【解决方案3】:
      ssh user@host.com "ls -l" >output
      

      您甚至可以执行以下操作:

      ssh user@host.com "cat foo.tar" | tar xvf --
      

      为了简单起见,使用 ssh-keygen 生成一个 pub/private 密钥对。 将 *.pub 密钥复制到远程主机到 ~/.ssh/authorized_keys 中,确保 这是 chmod'd 600

      那你就可以了

      ssh -i ~/.ssh/yourkey user@host.com ...等

      它也不会要求输入密码。 (如果您的密钥对是无密码的)..

      【讨论】:

        【解决方案4】:

        好吧,为了让ssh -n 能够正常工作,您需要进行一些设置,以便无需密码或密码即可登录(因此您需要一个本地私钥,可以通过 ssh-agent 获得,或没有密码,并且该公钥需要位于远程计算机上相应的 authorized_keys 文件中)。但如果是这样的话,你所拥有的应该可以正常工作(它在许多机器上对我来说都很好)。

        另一种奇怪的可能性是,如果您的远程 script.sh 尝试写入 stdin 或 /dev/tty 而不是 stdout/stderr。在这种情况下,它不适用于ssh -n

        【讨论】:

          【解决方案5】:

          你肯定做错了什么。我刚刚测试了它,它工作正常。

          shadyabhi@archlinux /tmp $ cat echo.sh 
          #!/bin/bash
          echo "Hello WOrld"$1
          shadyabhi@archlinux /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo
          Hello WOrldfoo
          shadyabhi@archlinux /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo > out
          shadyabhi@archlinux /tmp $ cat out
          Hello WOrldfoo
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-11-17
            • 1970-01-01
            • 1970-01-01
            • 2020-08-14
            • 2017-09-30
            • 2010-11-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多