Tengo un script que solicita al usuario susudo contraseña, y luego itera a través de una lista de hosts y ejecuta comandos en hosts remotos. Puedo "leer -s" para obtener su contraseña en silencio, pero cada vez que se usa su contraseña en un host remoto, se repite en la terminal. Cambiar stty en el host local no ayuda. Ejemplo:
#!/bin/sh -x
echo "Enter sudo pass:"
read -s SUDOPASS
stty_orig=$(stty -g)
stty -echo
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP
$SUDOPASS
EOP
stty $stty_orig
La salida aún incluye la contraseña:
+ ssh -tt remote_host sudo cat /etc/cma.conf
My_P4ssW0rd!
Password:
<?xml version="1.0" encoding="utf-8"?>
...
Tampoco ayuda jugar con stty en el host remoto:
stty_orig=$(ssh -t remote_host stty -g)
ssh -t remote_host stty -echo
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP
$SUDOPASS
EOP
ssh -t remote_host stty $stty_orig
FWIW, estoy principalmente preocupado por OSX bash / sh
Respuestas
1 para la respuesta № 1Tratar expect
:
#!/bin/sh
echo "Enter sudo pass:"
read -s SUDOPASS
expect -c "spawn ssh -tt remote_host sudo cat /etc/cma.conf ; expect -re "\[sudo\] password for .*:"; send """$SUDOPASS""n";interact"
0 para la respuesta № 2
Para ser honesto, no he visto el problema aquí. Pero a menudo redirijo la salida manualmente para silenciarla:
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP >& /dev/null
No estoy seguro de si esto ayudará.