Use o comando sudo para o servidor SSH de script

Use o comando sudo para o servidor SSH de script

Eu tenho que seguir os seguintes passos em vários servidores:

  1. faça login com meu nome de usuário
  2. digitarsudo su -
  3. digitaramCLI -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/amCLIsem 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: sudonão deve estar solicitando uma senha e amCLIdeve 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/amCLIou o que quer que seja.

informação relacionada