/ / ¿Cómo no hacer eco aquí del documento al terminal? - bash, ssh, heredoc, stty

¿Cómo no hacer eco aquí del documento a la terminal? - bash, ssh, heredoc, stty

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 № 1

Tratar 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á.