单个命令中的多个ssh

时间:2018-01-11 10:29:53

标签: linux ssh centos redhat cut

我需要管道多个ssh命令才能在远程计算机上运行命令。 命令在单个ssh下正常工作,但在管道ssh之后没有。 E.g

ssh abc@remotemachine1.com "a=hello ; echo \$a"

回复你好 但

ssh abc@remotemachine1.com ssh abc@remotemachine2.com"a=hello ; echo \$a"

不产生输出。

类似地:

ssh abc@remotemachine1.com "mountedDir=\$(df \tmp | grep -vi filesystem | rev | cut -d ' ' -f 1); mount | grep -w \$mountedDir"

正常工作以产生以下输出:

/dev/sda2 on / type xfs (rw,relatime,attr2,inode64,noquota)

ssh abc@remotemachine1.com ssh abc@remotemachine2.com "mountedDir=\$(df \tmp | grep -vi filesystem | rev | cut -d ' ' -f 1); mount | grep -w \$mountedDir"

抛出以下错误:

Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

注意:从我的机器到remotemachine1.com以及从remotemachine1.com到remotemachine2.com建立无密码ssh

3 个答案:

答案 0 :(得分:0)

ssh abc@remotemachine1.com ssh abc@remotemachine2.com"a=hello ; echo \$a"

看起来不对。如果要从remotemachine1跳转到remotemachine2,请查看ssh config中的ProxyJump选项。您可以使用ssh二进制文件的-o选项在命令行上提供它。

答案 1 :(得分:0)

如果由于某种原因您不想修改ssh_config文件,则需要使用ssh -t,这将导致在机器2上分配真正的TTY,如下所示:

ssh -t abc@remotemachine1.com ssh abc@remotemachine2.com"a=hello ; echo \$a"

要小心,因为使用此方法意味着所有SSH登录身份验证过程都将在remotemachine1.com发生,因此如果您有安全问题,最好使用@allo的答案。

答案 2 :(得分:0)

在我添加了多个转义字符

之后,它终于奏效了
ssh abc@remotemachine1.com " ssh abc@remotemachine2.com \" a=hello ;echo \\\$a \" "

并且

ssh abc@remotemachine1.com " ssh abc@remotemachine2.com \" mountedDir=\\\$(df /var | grep -vi filesystem | rev | cut -d ' ' -f 1); mount | grep -w \\\$mountedDir | grep -vi 'noexec'  \" "