发送命令通过ssh与参数

发送命令通过ssh与参数

问题描述:

我想通过ssh发出命令与参数,但外壳没有正常扩展命令任何想法我在做什么错这个发送命令通过ssh与参数

for i in 71 72 73 74 75 
do 
    for server in server1 server2 
    do 
     somestr="Some String" 
     echo "$server hdiskpower$i \c" ; ssh $server "lsattr -El hdiskpower$i |grep $somestr " 
    done 
done 
+0

丹尼斯感谢编辑的脚本更易读现在 – Lisa 2010-07-28 07:14:53

必须使用-t参数来设置ssh使用伪tty。如果您想在远程机器上运行该命令,你会通过

ssh $server -t "lsattr -El hdiskpower$i|grep $somestr" 
+0

都能跟得上它仍然说的grep:0652-033无法打开卷。 我在AIX上如果有问题 – Lisa 2010-07-28 06:20:46

+0

由于这是grep报告的错误,所以问题出在你发送的命令上。如果你在没有ssh的远程机器上运行完全相同的命令,它是否工作?例如'lsattr -El hdiskpower71 | grep“somethingsomething”'。 – vtorhonen 2010-07-28 06:28:04

+0

是的,它工作没有SSH,如果硬编码的价值,而不是变量 – Lisa 2010-07-28 06:33:21

如果您传递一些变量来远程服务器的指令内做到这一点,那么这些变量必须在该远程服务器定义。

像,如果你在脚本中硬编码命令,如 "echo "$server hdiskpower$i \c" ; ssh $server lsattr -El hdiskpower71 |grep XYZ"那么它肯定适合你。

同时,我会努力使它适用于变量。

我认为这是你需要的: 首先你需要在你的机器上安装sshpass。 那么你可以编写自己的脚本:

while read pass port user ip; do 
sshpass -p$pass ssh -p $port [email protected]$ip <<ENDSSH1 
    COMMAND 1 
    . 
    . 
    . 
    COMMAND n 
ENDSSH1 
done <<____HERE 
    PASS PORT USER IP 
     .  .  .  . 
     .  .  .  . 
     .  .  .  . 
    PASS PORT USER IP  
____HERE