在ssh的authorized_keys上强制命令合并STDOUT和STDERR

我一直在努力在中央服务器上有一个脚本来做一些事情并输出一个.tar.gz文件(请参阅暂时将STDOUTredirect到另一个文件描述符,但仍然屏幕 )。 我也有交换SSH密钥,所以现在从客户端机器我可以执行脚本在我的主要服务器,并输出结果到客户端.tar.gz文件,同时看到脚本的所有其他输出(STDERR):

me@client:~$ ssh auto@remoteserver /usr/local/bin/myscript.sh > content.tar.gz // shows the output of the STDERR here... me@client:~$ tar ztf content.tar.gz content/file.txt content/foobar.txt ... 

但是如果我强制执行这个命令,把命令选项放在~/.ssh/authorized_keys

 #/home/auto/.ssh/authorized_keys file command="/usr/local/bin/myscript.sh",from="client" ssh-rsa 0UYmshd5FSDFf2fd... 

并执行以下,不起作用:

 me@client:~$ ssh auto@remoteserver > content.tar.gz // shows **NOTHING** me@client:~$ tar ztf content.tar.gz gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now 

如果我查看文件,它包含STDERRSTDOUT 。 任何想法为什么它混合? 更重要的是,有关如何避免这种情况的想法?

ps :我应该提到的是, myscript.sh是主脚本的包装,基本上用一组固定的参数来调用主脚本:

 #!/bin/sh # myscript.sh: wrapper for mainscript.sh to use by the user auto with ssh-keys /usr/local/bin/mainscript.sh foo bar 

你调用这个命令的第一种方法不会创build一个pty,而第二个可能不会。 试着告诉sshd不要创build一个pty。 在您的authorized_keys文件中:
command="/usr/local/bin/myscript.sh",from="client",no-pty ssh-rsa...

如果您希望在authorized_keys文件中设置no-pty选项时从命令行执行ssh,则必须redirectSTDIN以从/dev/null读取,否则PTY allocation request failed on channel 0会出现PTY allocation request failed on channel 0的错误:

 $ ssh auto@remoteserver < /dev/null > content.tar.gz 

如果你不使用控制terminal来执行ssh命令,那么没有STDIN可用,你可以省略< /dev/null部分。 所以在cron中,你可以做到以下没有问题:

 0 4 * * * ssh auto@remoteserver > content.tar.gz