Bagaimana cara melarikan diri! kata sandi?

24

Bagaimana orang bisa lolos dari tanda seru dengan kata sandi:

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

Mencoba backslash yang jelas tidak membantu:

$ 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)

Semua pencarian google saya menyarankan bahwa backslash akan membantu, tetapi tidak. Tidak ada cara untuk menggunakan kutipan seperti yang disarankan dalam pertanyaan ini . Baris tersebut akan digunakan dalam alias .bashrc. Jangan khawatir, nama pengguna dan kata sandi yang ditampilkan di sini adalah contoh saja dan tidak digunakan dalam produksi!

dotancohen
sumber
Anda selalu dapat menggunakan tanda kutip tunggal. untuk menggunakan tanda kutip tunggal "di dalam" string yang dikutip tunggal, coba:''\'
cas
6
BTW, menempatkan kata sandi pada baris perintah adalah risiko keamanan potensial pada sistem multi-pengguna. Sangat mudah untuk memeriksa argumen baris perintah dari setiap proses yang sedang berjalan. Gunakan file .my.cnf sebagai gantinya (ingatlah untuk chmod 600itu).
cas
oops. itu '\''bukan''\'
cas
Terima kasih, Craig. Sebenarnya, ini lebih aman daripada alternatif: mengirim salinan salinan kata sandi kepada semua orang yang kemudian akan menyimpan siapa yang tahu di mana. Saya pribadi lebih suka bahwa setiap dev memiliki /home/userpengguna sendiri dan mysql, tapi saya bukan pembuat keputusan dalam hal itu.
dotancohen
2
manajemen bijak dan
maha

Jawaban:

38

Gunakan tanda kutip tunggal di sekitar kata sandi seperti ini: -p'one_@&!two'

Untuk memasukkannya ke alias, Anda akan melakukan sesuatu seperti:

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

cas
sumber
1
tidak ada ruang antara -p dan kata sandi, tapi ya, ini seharusnya berfungsi
mulaz
sudah diedit ruang :)
cas
4
-bash: !two: command not found

Anda juga harus keluar dari &karakter:

$ mysql -umyuser -pone_@\&\!two
kuanta
sumber
3

Jika Anda tidak pernah menggunakan! fitur sejarah, mungkin lebih mudah untuk menonaktifkannya (dengan set +Hdi bashrc Anda).

Richard Kettlewell
sumber
1

Anda dapat menyimpan kata sandi dalam variabel bash:

$ pass='one_@&!two'

Kemudian gantilah variabel dalam perintah:

$ mysql -umyuser -p$pass
pengguna7341695
sumber
jawaban yang menarik;)
chapskev