转载于 点击打开链接
使用ssh执行远程命令,我们只要在主机名后面将要执行的远程主机上的命令使用单引号或者双引号括起来就行了
e.g:
查看192.168.1.1上面的进程可以使用下面的命令
ssh -p22 root@192.168.1.1 'ps aux'
这条命令在命令行下可以执行,在脚本中也可以直接执行,但是当我们把命令存放在shell变量中然后执行就会报错,提示命令找不到。
e.g: psaux.sh
#! /bin/bash
COMMAND="ssh -p22 root@192.168.1.1 'ps aux'";
`$COMMAND` >>/opt/logfile;
使用sh -x psaux.sh 命令调试该脚本可以发现,
变量$COMMAND被shell解释器解释成了 ssh -p22 root@192.168.1.1 \'ps aux\'
可以看到,多出了一个转义字符,其实只要稍作对$COMMAND再次求值然后执行,就可以了
改进后的脚本如下:
#! /bin/bash
COMMAND="ssh -p22 root@192.168.1.1 'ps aux'";
`eval $COMMAND` >>/opt/logfile;
再次执行可以成功!