Use o comando sudo para o servidor SSH de script

1

Eu tenho que seguir as etapas em vários servidores:

  1. faça login com meu nome de usuário
  2. digite sudo su -
  3. digite amCLI -l 32/1 | grep Firmware

Então, eu gostaria de escrever tudo isso em um script, minha ideia era:

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo su-; amCLI -l 32/1 | grep Firmware"
done

ou

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo amCLI -l 32/1 | grep Firmware"
done

Ambos não funcionam embora.

    
por vicky 30.05.2012 / 11:58

3 respostas

2

Uma solução melhor é configurar o sudo para que seu usuário possa executar /full/path/to/amCLI sem fornecer uma senha.

Então você pode simplesmente

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
    ssh -n vneudeck@$hostname sudo /full/path/to/amCLI -l 32/1 | grep Firmware
done
    
por 30.05.2012 / 14:01
0

Talvez se você colocar o vneudeck @ $ hostname entre aspas duplas, isso ajudará. E não há espaço entre su e - Espero que seja útil

    
por 30.05.2012 / 12:22
0

O primeiro não funciona:

sudo su -; amCLI -l 32/1 | grep Firmware

Isso executaria sudo su - e, quando isso retornasse (ou seja, quando você terminasse o processamento de comandos como root e exited), executaria amCLI. (Note também que uma alternativa para sudo su é sudo -s , embora sudo su - faça mais, eu acho).

A segunda versão pode funcionar com algumas condições: sudo não deve pedir uma senha e amCLI deve estar no PATH (não o caminho da raiz, que provavelmente é definido quando você digita sudo su - , mas seu caminho porque o sudo usa o seu caminho). Tente especificar o caminho completo para amCLI , como /usr/local/sbin/amCLI ou o que for.

    
por 30.05.2012 / 12:28