Não é possível executar o comando com raiz em um host Linux remoto

0

Eu tento migrar o código shell para o código de estrutura Python. O problema que encontro é que o Python não pode executar o comando com raiz em um host Linux remoto. Alguém poderia encontrar esse problema e descobrir? Eu sou muito grato pela sua ajuda. Agradecemos antecipadamente.

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -T -q -o UserKnownHostsFile=/dev/null \
                           -o StrictHostKeyChecking=no username@$host << EOL;
sudo su -
sed -i 's/10./172./g'/etc/hosts
EOL
done
    
por Sam 15.05.2015 / 12:12

2 respostas

1

Tente executá-lo desta maneira:

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -T -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@$host "sudo sed -i 's/10./172./g'/etc/hosts"

done
    
por 15.05.2015 / 12:23
1

Para que sudo possa solicitar uma senha, você precisa dar a ela um dispositivo tty (a pseudo-tty ). ssh geralmente cria o dispositivo pseudo-tty no terminal remoto se sua entrada também for de um terminal. No entanto, neste caso não é - você está usando um heredoc (o << bit).

Para copiar seu estilo, você precisa adicionar a opção RequestTTY a ssh , também disponível como -t . Confusamente, você tem explicitamente desativado pseudo-tty alocação com o seu -T bandeira, então você precisa substituir isso:

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -t -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@$host << EOL;
sudo su -
sed -i 's/10./172./g' /etc/hosts
EOL
done

No entanto, convém rever sua correspondência de substituição 10. ; como está, que corresponde aos dois caracteres 10 mais qualquer caractere (o . é um curinga), várias vezes por linha. Talvez deva ser 10\. (corresponde a três caracteres literais) ou mesmo ^10\. (corresponde a três caracteres literais no início da linha). Aqui eu assumi que você quis dizer três caracteres literais 10. no início da linha:

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -t -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@$host sudo sed -i.bak 's/^10\./172./' /etc/hosts
done
    
por 15.05.2015 / 12:53

Tags