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.


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 .


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.