SSH робить усі введені паролі видимими, коли команда надається як аргумент команді SSH


45

Якщо я запускаю це:

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

Коли він запитує мене для пароля MySQL, і я починаю вводити, пароль видно на екрані. Як я можу запобігти цьому? Якщо я ввійду в систему, sshа потім виконаю команду MySQL, все працює добре.


5
ви не вважаєте, що заголовок досить незрозумілий. Ви можете сказати, що він робить видимим весь текст, включаючи паролі. І як ssh має на меті знати, що ти вводиш - це пароль проти якоїсь іншої команди чи даних?
барлоп

@barlop Я відкритий для пропозицій.
користувач110971

@barlop добре, це працює, коли ви виконуєте команду, коли ви ssh на сервер. Я шукаю якийсь спосіб зробити так, щоб поведінка ssh була однаковою, коли команди подані як аргумент.
користувач110971

це, мабуть, не так потрібно, але чи можна включити повну копію / вставлений приклад з консолі, наприклад, показуючи не просто команду ssh, а відповідь, і запит mysql, що випливає далі. Ви можете змінити пароль на швейцарський сир, щоб не розміщувати його на сайті, я не можу його перевірити на даний момент
барлоп

@barlop Це саме ті повідомлення, яких ви очікували, тобто ssh пароль, за яким слід запит пароля MySQL
user110971

Відповіді:


100

Якщо ви надаєте віддалену команду для запуску, SSH не виділяє tty, тому віддалена команда не може відключити ехо. Ви можете змусити SSH надати tty за допомогою -tпараметра:

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

Еквівалентний варіант (для -oабо для конфігураційного файлу) є RequestTTY. Я застережуюсь від використання його в config, оскільки це може мати небажані ефекти для неінтерактивних команд .


15
Або ви можете відредагувати ~ / .ssh / config, щоб налаштувати конкретний хост, щоб завжди запитувати TTY. Дивіться RequestTTYв man 5 ssh_config.
CVn

7
@ MichaelKjörling (і Toby): можливо, додайте трохи попередження, що додавання "-t" має бути зарезервоване лише для інтерактивного використання, оскільки це має побічні ефекти. Для гарного перегляду деяких із цих побічних ефектів: unix.stackexchange.com/a/122624/27616 (від StephaneChazelas)
Олів'є Дулак

Погоджено - я збираюся припустити, що шкода, що ви не можете додавати налаштування (наприклад, це) відповідно до віддаленої команди (а не від Host).
Toby Speight

28

Збереження пароля у захищеному файлі опцій

Якщо ви можете довіряти [*] безпеці віддаленого комп’ютера, ви можете зберігати пароль у належним чином захищеному файлі опцій, як це запропоновано в розділі Посібника кінцевого користувача щодо безпеки пароля цього посібника, без необхідності спілкування через sshабо вводити кожен час.

Зокрема, ви можете додати рядок у розділі [client] .my.cnfу вашому домашньому каталозі:

[client]
password=your_pass

Звичайно, ви повинні не захищати цей файл для всіх, окрім себе, встановивши режим доступу до файлу 400 або 600 за допомогою, наприклад,

chmod 600 ~/.my.cnf

Тоді ви можете використовувати щось подібне

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

де user110971ім’я користувача вашого облікового запису.


Змушує ssh виділяти псевдо tty ( ssh -t)

Ця проблема виникає щоразу, коли ви надсилаєте команду через, sshі вам потрібно вставити вхід, оскільки, за замовчуванням, sshне буде виділено псевдо-tty.

Ви можете примусити виділити tty за допомогою параметра -t(навіть більше, якщо потрібно):

-t

Примусове виділення псевдо-тти. Це може бути використано для виконання довільних програм на екрані на віддаленій машині, що може бути дуже корисно, наприклад, під час реалізації служб меню. Кілька -tопцій примушують розподілити tty, навіть якщо ssh не має локальних tty.

Як ви можете прочитати в цій публікації Debian (Jul_11_2008) про sudo, це стара проблема, яка любить повторюватися:

ssh user@server "sudo ls"  
password: password  

І пароль показаний вам

Рішення полягає в тому, щоб змусити ssh виділити псевдо-tty з прапорцем -t:

ssh -t user@server sudo ls

Примітка:

[*] Якщо ви можете розраховувати на те, щоб залишити пароль у файлі, доступному лише вам, і викорінити його на робочому клієнті.
Якщо можливо перезавантажити віддалену комп'ютер, що змінює ОС, або видалити жорсткий диск, комп'ютер не може вважатися повністю захищеним ... але в цьому випадку сама база даних не буде захищеною.


1
можливо, додайте трохи попередження, що додавання "-t" має бути зарезервовано лише для інтерактивного використання, оскільки це має побічні ефекти. Для хорошого перегляду деяких з цих побічних ефектів: unix.stackexchange.com/a/122624/27616 (від StephaneChazelas)
Олів'є Дулак

3

Також важливим є варіант монтажу "укритий" для proc fs. Це робить ваші командні лінії невидимими у списку процесів для інших користувачів. Приклад fstab:

proc /proc proc hidepid=1 0 0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.