SSH sprawia, że ​​wszystkie wpisane hasła są widoczne, gdy polecenie jest podane jako argument polecenia SSH

45

Jeśli uruchomię to:

ssh user@server 'mysql -u user -p'

Gdy poprosi mnie o hasło MySQL i zacznę pisać, hasło jest widoczne na ekranie. Jak mogę temu zapobiec? Jeśli zaloguję się, ssha następnie wykonam polecenie MySQL, wszystko działa poprawnie.

użytkownik110971
źródło
5
nie uważasz, że ten tytuł jest raczej niejasny. Można powiedzieć, że sprawia, że ​​cały tekst, łącznie z hasłami, jest widoczny. A w jaki sposób ssh ma wiedzieć, że to, co wpisujesz, to hasło w porównaniu z innymi poleceniami lub danymi?
barlop
@barlop Jestem otwarty na sugestie.
user110971,
@barlop dobrze działa, gdy wykonasz polecenie po ssh na serwerze. Szukam sposobu, aby uczynić zachowanie ssh takim samym, gdy polecenia są podawane jako argument.
user110971,
prawdopodobnie nie jest to konieczne, ale czy możesz dołączyć pełny przykład z konsoli / kopii wklejony, np. pokazujący nie tylko polecenie ssh, ale odpowiedź i następujący po nim monit mysql. Możesz zmienić hasło na szwajcarskie, aby nie umieszczać go na stronie, której nie mogę obecnie przetestować
barlop
@barlop To tylko te same wiadomości, których można się spodziewać, np. hasło ssh, a następnie monity o hasło MySQL
user110971,

Odpowiedzi:

100

Jeśli podasz zdalne polecenie do uruchomienia, SSH nie przydzieli tty, więc zdalne polecenie nie może wyłączyć echa. Możesz zmusić SSH do udostępnienia tty za pomocą -topcji:

ssh -t user@server 'mysql -u user -p'

Odpowiednią opcją (dla -olub dla pliku konfiguracyjnego) jest RequestTTY. Przestrzegałbym przed użyciem go w konfiguracji, ponieważ może mieć niepożądane skutki dla poleceń nieinteraktywnych .

Toby Speight
źródło
15
Możesz też edytować ~ / .ssh / config, aby skonfigurować konkretnego hosta tak, aby zawsze żądał TTY. Zobacz RequestTTYw man 5 ssh_config.
CVn
7
@ MichaelKjörling (i Toby): może dodać trochę ostrzeżenia, że ​​dodanie „-t” powinno być zarezerwowane wyłącznie do użytku interaktywnego, ponieważ ma skutki uboczne. Aby uzyskać dobry pogląd na niektóre z tych skutków ubocznych: unix.stackexchange.com/a/122624/27616 (od StephaneChazelas)
Olivier Dulac
Zgadzam się - miałem zasugerować, że szkoda, że ​​nie można dodawać ustawień (takich jak to) zgodnie ze zdalnym poleceniem (a nie przez hosta).
Toby Speight
28

Przechowywanie hasła w chronionym pliku opcji

Jeśli możesz zaufać bezpieczeństwu komputera zdalnego [*] , możesz przechowywać hasło w odpowiednio chronionym pliku opcji, zgodnie z sugestią zawartą w rozdziale Wskazówki dla użytkownika końcowego dotyczące bezpieczeństwa hasła , bez potrzeby komunikowania się sshlub wpisywania każdego z nich czas.

W szczególności możesz dodać wiersz w sekcji [klient] pliku .my.cnfw katalogu domowym:

[client]
password=your_pass

Oczywiście musisz uniemożliwić dostęp do tego pliku każdemu poza tobą, ustawiając tryb dostępu do pliku na 400 lub 600 za pomocą np.

chmod 600 ~/.my.cnf

Następnie możesz użyć czegoś takiego

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

gdzie user110971jest nazwa użytkownika twojego konta.


Zmuszanie ssh do przydzielenia pseudo tty ( ssh -t)

Ten problem występuje za każdym razem, gdy wysyłasz komendę sshi musisz wstawić dane wejściowe, ponieważ domyślnie sshnie przydzielisz pseudo-tty.

Możesz wymusić alokację tty z opcją -t(w razie potrzeby nawet więcej niż jedną):

-t

Wymuś alokację pseudotty. Można to wykorzystać do wykonania dowolnych programów ekranowych na zdalnym komputerze, co może być bardzo przydatne, np. Przy wdrażaniu usług menu. Wiele -topcji wymusza alokację tty, nawet jeśli ssh nie ma lokalnego tty.

Jak można przeczytać w tym poście Debiana (Jul_11_2008) o sudo, jest to stary problem, który kocha się powtarzać:

ssh user@server "sudo ls"  
password: password  

I hasło zostanie wyświetlone

Rozwiązaniem jest zmuszenie ssh do przydzielenia pseudo-tty z flagą -t:

ssh -t user@server sudo ls

Uwaga:

[*] Jeśli możesz polegać na pozostawieniu hasła w pliku dostępnym tylko dla Ciebie i rootowaniu na działającym kliencie.
Jeśli można zrestartować komputer zdalny, zmieniając system operacyjny lub usunąć dysk twardy, komputera nie można uznać za całkowicie bezpieczny ... ale w takim przypadku sama baza danych nie będzie bezpieczna.

Hastur
źródło
1
może dodać trochę ostrzeżenia, że ​​dodanie „-t” powinno być zarezerwowane tylko do użytku interaktywnego, ponieważ ma skutki uboczne. Aby uzyskać dobry pogląd na niektóre z tych skutków ubocznych: unix.stackexchange.com/a/122624/27616 (od StephaneChazelas)
Olivier Dulac
3

Cenna jest również opcja montowania „hidepid” dla proc fs. To sprawia, że ​​twoje wiersze poleceń są niewidoczne na liście procesów dla innych użytkowników. przykład fstab:

proc /proc proc hidepid=1 0 0
bandie
źródło