SSH делает все введенные пароли видимыми, когда команда предоставляется в качестве аргумента команды SSH.

45

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

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

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

user110971
источник
5
Вы не думаете, что заголовок довольно непонятен? И как ssh должен знать, что вы вводите пароль против какой-либо другой команды или данных?
Барлоп
@ barlop Я открыт для предложений.
user110971
@barlop хорошо работает, когда вы выполняете команду, как только вы ssh на сервер. Я ищу способ сделать поведение ssh таким же, когда команды предоставляются в качестве аргумента.
user110971 25.10.16
это, вероятно, не так необходимо, но вы можете включить в консоль пример полной копии / вставки, например, показывающий не только команду ssh, но и ответ, и приглашение mysql, которое следует. Вы можете изменить пароль на swisscheese, чтобы не размещать его на сайте. Я не могу его сейчас
проверить
@barlop Это те же сообщения, которые вы ожидаете, т. е. пароль ssh, за которым следуют
запросы

Ответы:

100

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

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

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

Тоби Спейт
источник
15
Или вы можете отредактировать ~ / .ssh / config, чтобы настроить этот конкретный хост, чтобы он всегда запрашивал TTY Смотрите RequestTTYв man 5 ssh_config.
CVn
7
@ MichaelKjörling (и Toby): возможно, добавьте немного предупреждения о том, что добавление «-t» должно быть зарезервировано только для интерактивного использования, поскольку оно имеет побочные эффекты. Для хорошего взгляда на некоторые из этих побочных эффектов: unix.stackexchange.com/a/122624/27616 (от StephaneChazelas)
Оливье Дюлак
Согласился - я собирался предположить, что это позор, что вы не можете добавлять настройки (такие как эта) в соответствии с удаленной командой (а не с помощью Host).
Тоби Спейт
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

Примечание:

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

Hastur
источник
1
возможно, добавьте немного предупреждения о том, что добавление «-t» должно быть зарезервировано только для интерактивного использования, поскольку оно имеет побочные эффекты. Для хорошего обзора некоторых из этих побочных эффектов: unix.stackexchange.com/a/122624/27616 (от StephaneChazelas)
Оливье Дюлак
3

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

proc /proc proc hidepid=1 0 0
bandie
источник