/ / Jak nie powtarzać tutaj dokumentu w terminalu? - bash, ssh, heredoc, stty

Jak nie echo tutaj dokumentu do terminala? - bash, ssh, heredoc, stty

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

Pró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.