SSH para servidores com acesso sudo - script lança erro inesperado no final do arquivo

1

Tenho que executar um comando iptables --flush em mais de 100 servidores. Não tenho credenciais raiz, mas tenho acesso sudo para minha conta. Então eu criei um script abaixo para executar o comando em todos os servidores.

Eu adicionei os nomes dos servidores no arquivo flushhosts.

[root@~]# cat testscript.sh

> for i in 'cat /flushhosts'
> 
> do
> 
> sshpass -p 'Mypwd' ssh -t username@$i sudo /sbin/iptables --flush
> 
> cat << EOF || "Mypwd"
> 
> done

[root@~]# ./testscript.sh

./testscript.sh: line 6: syntax error: unexpected end of file

Não consegui encontrar o que está faltando no script.

    
por Kannan AnandaKrishnan 25.09.2015 / 14:36

2 respostas

3

Se você estiver aberto a uma abordagem diferente, eu gostaria de propor o uso de esperar:

Crie um pequeno script de espera ex1.sh

#!/usr/bin/expect -f
set arg1 [lindex $argv 0]
spawn ssh username@$arg1
expect "password: "
send "Mypwd\r"
expect "$ "
send "sudo /sbin/iptables --flush\r"
expect "password "
send "Mypwd\r"
expect "$ "
send "exit\r"

Então você pode usá-lo no seu loop assim:

for i in $(</flushhosts); do ./ex1 $i; done

Você tem muito mais flexibilidade para esse tipo de situação.

    
por 25.09.2015 / 15:37
0

tente

for i in $(</flushhosts)
do

   echo "Mypwd" | sshpass -p 'Mypwd' ssh -t username@$i sudo /sbin/iptables --flush

done
  • isso pode funcionar, mas não está claro Mypwd (em echo Mypwd ) vai chegar ao sudo
  • $(</flushhosts) equivale a $(cat /flushhosts) equiv para retornar "cat / flushhosts"

sobre gato < < "EOF" || Mypwd

1) gato < < "EOF"

Isto lerá as linhas até que a palavra EOF seja encontrada e todo o texto seja dado a cat. isso inclui a palavra done .

2) || Mypwd

se cat retornar diferente de zero, Mypwd (como um comando) será executado.

Como nenhuma palavra EOF é encontrada, quando o bash alcança o final do documento, o for ... do não é fechado por done , daí o erro de sintaxe.

Espero que isso não seja o que você quer.

a sintaxe

cat <<EOF 
hello world
EOF 

é chamado aqui de documento, é uma maneira de fornecer dados no shell script.

    
por 25.09.2015 / 15:03

Tags