我正在尝试远程运行脚本(来自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
有什么想法吗?
答案 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