我正在尝试使用参数通过ssh发送命令,但shell无法正确扩展命令任何想法我在做错了什么
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 :(得分:1)
如果要将某个变量传递给命令中的远程服务器,则必须在该远程服务器上定义这些变量。
就像,如果你在脚本中硬编码命令一样
"echo "$server hdiskpower$i \c" ;
ssh $server lsattr -El hdiskpower71 |grep XYZ"
那么它肯定适合你。
与此同时,我将努力使其适用于变量。
答案 1 :(得分:0)
您必须使用-t
参数将ssh设置为使用伪tty。如果您想在远程计算机上运行该命令,可以通过
ssh $server -t "lsattr -El hdiskpower$i|grep $somestr"
答案 2 :(得分:0)
我认为这就是你所需要的:
首先,您需要在计算机上安装sshpass
。
然后你可以编写自己的脚本:
while read pass port user ip; do
sshpass -p$pass ssh -p $port $user@$ip <<ENDSSH1
COMMAND 1
.
.
.
COMMAND n
ENDSSH1
done <<____HERE
PASS PORT USER IP
. . . .
. . . .
. . . .
PASS PORT USER IP
____HERE