麻烦远程运行bash脚本,在本地重定向输出

时间:2012-01-25 00:10:02

标签: bash ssh

我正在尝试远程运行脚本(来自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

有什么想法吗?

5 个答案:

答案 0 :(得分:4)

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' 600

然后你可以做

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

好吧,为了让ssh -n完全正常工作,你需要设置一些东西,这样你就可以在不需要密码或密码的情况下登录(因此你需要一个本地私钥,可以使用ssh-代理,或没有密码,并且该公钥需要位于远程计算机上的相应authorized_keys文件中)。但如果是这样的话,你所拥有的应该可以正常工作(在很多机器上它对我来说都很好)。

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

答案 3 :(得分:0)

实现

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

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

答案 4 :(得分:0)

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

$ 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