Eu tenho que seguir os seguintes passos em vários servidores:
- faça login com meu nome de usuário
- digitar
sudo su -
- digitar
amCLI -l 32/1 | grep Firmware
Então eu gostaria de escrever tudo isso em um script, minha ideia foi:
#!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.
Responder1
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
Responder2
Talvez se você colocar vneudeck@$hostname entre aspas duplas, isso ajude. E não há espaço entre su e - espero que seja útil
Responder3
O primeiro não funcionará:
sudo su -; amCLI -l 32/1 | grep Firmware
Isso seria executado sudo su -
e, quando retornasse (ou seja, quando você terminasse de processar os comandos como root e saísse), ele executaria amCLI. (Observe também que uma alternativa 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 estar solicitando uma senha e amCLI
deve estar em PATH (não o caminho do root, que provavelmente é definido quando você digita sudo su -
, mas o seu caminho, porque o sudo usa o seu caminho). Tente especificar o caminho completo para amCLI
, como /usr/local/sbin/amCLI
ou o que quer que seja.