Як втекти! в паролі?


24

Як можна уникнути знака оклику в паролі:

$ mysql -umyuser -pone_@&!two
-bash: !two: event not found

Спроба очевидного нахилу не допомогла:

$ mysql -umyuser -pone_@&\!two
[1] 22242
-bash: !two: command not found
name@domain.com [~]# ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)

Усі мої пошуки в Google говорять про те, що зворотна косої риски допоможе, але це не так. Немає можливості використовувати лапки, як запропоновано в цьому запитанні . Рядок буде використовуватися в псевдонімі .bashrc. Не хвилюйтесь, імена користувачів та паролі, показані тут, є лише прикладами та не використовуються у виробництві!


ви завжди можете використовувати одинарні лапки. щоб використати одно цитата "всередині" одноцитувального рядка, спробуйте:''\'
cas

6
До речі, введення пароля в командному рядку є потенційним ризиком безпеки для багатокористувацької системи. Тривіально легко вивчити аргументи командного рядка будь-якого запущеного процесу. Використовуйте замість цього файл .my.cnf (пам’ятайте про chmod 600нього).
cas

ой. що х років '\'', а НЕ''\'
Cas

Спасибі, Крейг. Насправді, це більш безпечно, ніж альтернатива: надіслати електронною поштою всі копії пароля, які потім зберігатимуть, хто-що знає-де. Я особисто вважаю за краще, щоб кожен розробник мав свого власного /home/userта mysql користувача, але я не є тим, хто приймає рішення в цьому плані.
dotancohen

2
управління - мудре і всезнаюче :)
cas

Відповіді:


38

Використовуйте одинарні лапки навколо пароля: -p'one_@&!two'

Щоб помістити його в псевдонім, ви зробите щось на кшталт:

alias runmysql='mysql -umyuser -p'\''one_@&!two'\'''


1
немає пробілу між -p та паролем, але так, це має спрацювати
mulaz

вже відредаговано пробіл :)
cas

4
-bash: !two: command not found

Вам також потрібно уникнути &персонажа:

$ mysql -umyuser -pone_@\&\!two

3

Якщо ви ніколи не використовуєте! функції історії, може бути зручніше просто відключити їх ( set +Hу вашому bashrc).


1

Ви можете зберігати пароль у змінній bash:

$ pass='one_@&!two'

Потім замініть змінну в команді:

$ mysql -umyuser -p$pass

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