45

Если я запускаю это:

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

Когда он запрашивает пароль MySQL и я начинаю печатать, пароль виден на экране. Как я могу предотвратить это? Если я вхожу через ssh и затем выполняю команду MySQL, все работает нормально.

3 ответа3

99

Если вы предоставляете удаленную команду для запуска, SSH не выделяет tty, поэтому удаленная команда не может отключить эхо. Вы можете заставить SSH предоставлять tty, используя опцию -t :

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

Эквивалентная опция (для -o или для конфигурационного файла) - RequestTTY . Я бы рекомендовал не использовать его в конфигурации, потому что это может иметь нежелательные эффекты для неинтерактивных команд .

28

Хранение пароля в защищенном файле опций

Если вы можете доверять [*] безопасности удаленного компьютера, вы можете сохранить пароль в правильно защищенном файле опций, как это предлагается в главе « Руководства для конечных пользователей по безопасности паролей» руководства [ 1 ], без необходимости общаться через 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) [ 2 ] о sudo, это старая проблема, которая любит повторяться:

ssh user @ server "sudo ls"
пароль: пароль

И пароль показан вам

Решение состоит в том, чтобы заставить ssh выделить псевдо-tty с флагом -t:

ssh -t user@server sudo ls

Замечания:

[*] Если вы можете оставить пароль в файле, доступном только вам, и root на работающем клиенте.
Если возможно перезагрузить удаленный компьютер, сменив ОС, или удалить жесткий диск, который не является компьютером, который считается полностью безопасным ... но в этом случае даже весь БД не будет уверен ...

2

Опция монтирования "hidepid" для proc fs также полезна. Это делает ваши командные строки невидимыми в списке процессов для других пользователей. пример fstab:

proc /proc proc hidepid=1 0 0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .