Saya telah membaca banyak pertanyaan yang sudah diajukan di sini, bagaimanapun, entah bagaimana tidak ada yang berhasil untuk saya. Saya memiliki skrip bash di mana saya harus mengirim kata sandi yang membuang basis data pada mesin jarak jauh, jadi seperti:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p#8111*@uu( my_database | gzip -c > my_database.sql.gz
Sekarang masalahnya adalah kata sandi ini memiliki semua jenis karakter khusus:
#8111*@uu(
Jika saya menjalankan perintah di atas secara langsung akan menggunakan kata sandi di dalam tanda kutip tunggal maka itu berfungsi: yaitu.
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'#8111*@uu(' my_database | gzip -c > my_database.sql.gz
Tanpa tanda kutip tunggal saya mendapatkan kesalahan dengan untuk '(' di akhir.
Saya juga mencoba melarikan diri karakter dengan kata sandi seperti ini:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'\#8111\*\@uu(' my_database | gzip -c > my_database.sql.gz
Kemudian itu memberikan akses ditolak kesalahan.
Saya juga mencoba menggunakan "sumber" yaitu. menyimpan kata sandi di file lain sebagai:
File pass.cre
MYPASSWORD='#8111*@uu('
Kemudian termasuk file itu dalam skrip bash:
!/bin/sh
source pass.cre
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p$MYPASSWORD my_database | gzip -c > my_database.sql.gz
Tampaknya membaca $ MYPASSWORD dari file sekali lagi kesalahan karakter yang tidak valid.
Ada saran apa yang saya lewatkan?
io#bc@14@9$#jf7AZlk99
Untuk jarak jauh, itu tidak berfungsi yaitu./usr/bin/ssh -p 91899 user@remoteHost "mysqldump -u db_user -p'io#bc@14@9$#jf7AZlk99' my_database | gzip -c > my_database.sql.gz"
Saya mencoba untuk melarikan diri seperti yang disarankan di sini yaitu. mengingat bahwa itu telah dieksekusi dua kali tetapi saya pikir ketika mengirim perintah melalui SSH ke server jauh, hal-hal tampaknya sedikit berubah./usr/bin/ssh -p 91899 user@remoteHost "mysqldump -u db_user -p\"'io#bc@14@9$#jf7AZlk99'\" my_database | gzip -c > my_database.sql.gz"
$#
dan membutuhkan satu tanda kutip.Masalahnya adalah string Anda ditafsirkan dua kali, sekali oleh shell lokal, dan sekali lagi oleh shell jauh yang
ssh
berjalan untuk Anda. Jadi, Anda perlu mengutip dua kali, menggunakan salah satu dari ini:Sunting: Jika Anda akan mengutip
""
seluruh perintah, Anda akan mengalami masalah dengan kata sandi yang berisi$
. Anda perlu mengutip perintah untuk menghindari ini. Tapi Anda masih perlu mengutip-p
nilai karena ditafsirkan dua kali. Jadi, Anda perlu tanda kutip tunggal di dalam tanda kutip tunggal.Ini dilakukan dengan menggunakan satu kutipan kutip (
\'
) seperti dalam contoh ini:akan memberi Anda string
I don't like java
. Jadi, contoh kutip ganda Anda menjadi kutipan tunggal:Tidakkah kamu menyukainya saja?
sumber