nieinteraktywny ssh sudo… monituje o hasło w postaci zwykłego tekstu

9

Korzystam z nieinteraktywnych poleceń ssh. Uwierzytelnianie ssh odbywa się za pośrednictwem agenta ssh, ale jeśli uruchomię polecenie wymagające sudo, wówczas monit o podanie hasła w moim terminalu jest zwykłym tekstem. Na przykład:

ssh remotemachine "sudo -u www mkdir -p /path/to/new/folder"

poprosi mnie o hasło w postaci zwykłego tekstu. Czy ktoś wie, w jaki sposób mogę uzyskać normalny bezpieczny monit lub że mogę przekazać hasło za pomocą przełącznika? (ponieważ wtedy mogę ustawić bezpieczny monit po tej stronie przed wysłaniem polecenia)

Każda pomoc jest mile widziana.

Iain
źródło

Odpowiedzi:

13

Użyj ssh -t:

man ssh

-t   Force pseudo-tty allocation. This can be used to execute arbitrary 
     screen-based programs on a remote machine, which can be very useful, 
     e.g. when implementing menu services. Multiple -t options force tty 
     allocation, even if ssh has no local tty.

Więc twoje polecenie będzie

ssh remotemachine -t "sudo -u www mkdir -p /path/to/new/folder"

Jeśli nie chcesz wprowadzać hasła, możesz (jeśli możesz) modyfikować sudoersza pomocą polecenia visudo.

Dodaj parametr NOPASSWD:, na przykład

username ALL=(ALL) NOPASSWD: /bin/mkdir

Jeśli nie możesz edytować / etc / sudoers, możesz użyć sudo -S:

mężczyzna sudo

-S      The -S (stdin) option causes sudo to read the password from
        the standard input instead of the terminal device.  The
        password must be followed by a newline character.

Dzięki temu rozkaz byłby

echo "your_password" | ssh remotemachine -t \
     "sudo -S -u www mkdir -p /path/to/new/folder"

Pamiętaj, że doda to twoje hasło do historii poleceń twojej powłoki (z bash, to byłby ~/.bash_historyplik).

Olli
źródło