Mam skrypt, który monituje użytkownika o ichsudo password, a następnie iteruje listę hostów i wykonuje polecenia na zdalnych hostach. Mogę „odczytać”, aby po cichu uzyskać ich hasło, ale za każdym razem, gdy ich hasło jest używane na zdalnym hoście, jest ono wysyłane z powrotem do terminala. Zmiana stty na lokalnym hoście nie pomaga. Przykład:
#!/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
Wynik nadal zawiera hasło:
+ ssh -tt remote_host sudo cat /etc/cma.conf
My_P4ssW0rd!
Password:
<?xml version="1.0" encoding="utf-8"?>
...
Nie pomaga również grać ze stty na zdalnym hoście:
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, głównie zajmuję się OSX bash / sh
Odpowiedzi:
1 dla odpowiedzi № 1Próbować 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 dla odpowiedzi nr 2
Szczerze mówiąc, nie zauważyłem problemu tutaj. Ale często przekierowuję wyjście ręcznie, aby go uciszyć:
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP >& /dev/null
Nie jestem pewien, czy to pomoże.