GNU/Linux >> Belajar Linux >  >> Linux

Konversi Kata Sandi Dengan Karakter Khusus Untuk Digunakan Dengan Script Harapkan?

Saya memiliki skrip ekspektasi yang terhubung ke situs SFTP dan mengunggah beberapa file. ID dan kata sandi terkandung dalam file teks lokal. Skrip ekspektasi membaca file-file itu sebagai variabel dan kemudian meneruskannya ke server SFTP.

Masalah yang saya alami adalah kami diberikan kata sandi dengan kompleksitas yang mencakup karakter khusus ($\,!) dll. Misalnya jika kata sandi adalah kata sandi $pass sebagai khusus daripada literal. Karena ini sedang diteruskan melalui variabel (beberapa situs dan ID)

Saya tidak dapat menggunakan '$pw' karena secara harfiah akan meneruskan $pw ke server dan menggunakan "$pw" mengirim karakter khusus. Saya membutuhkannya untuk memberikan kata sandi persis seperti apa adanya.

Saya telah menghindarinya dengan tangan sejauh ini (mis. pass\$word) tetapi itu membosankan dan saya ingin melakukannya secara skrip.

Naskahnya terlihat seperti ini (nama dan tempat diubah untuk melindungi yang tidak bersalah)

#!/bin/bash

home=/data/ftp/vf/drop/
un=`cat /home/vf/workflow/.udf/.u/.u$1`
pw=`cat /home/vf/workflow/.udf/.p/.p$1`
sl=`cd /home/vf/workflow/scheduler; grep $1 upload*|cut -d \: -f1`

/usr/bin/expect -c "
spawn /usr/bin/sftp -o KexDHMin=1024 [email protected]$sl.mysteriouslocation.com
set timeout -1
expect *Authentication
expect Password*
send \"$pw\r\"
expect sftp*
send \"mput /$home/$1/transfer/*\r\"
expect sftp*
send \"ls \r\"
expect sftp*
send \"bye\r\"
expect eof
exit

Bagaimana saya bisa meneruskan kata sandi ke skrip yang diharapkan sehingga mengirimkan karakter literal dan tidak memberi mereka arti khusus?
Saya rasa saya tidak dapat membuat skrip "perbaikan" untuk file kata sandi itu sendiri, artinya masuk dan setiap kali ia melihat karakter khusus, keluarkan melalui sed atau cara lain karena karakter pelarian itu sendiri khusus dan dapat berakhir dalam satu lingkaran.

Bantuan Anda sangat dihargai!

Jawaban yang Diterima:

Cuplikan Perl kecil dapat digunakan untuk menghindari (garis miring terbalik) semua karakter ASCII yang tidak cocok dengan /[A-Za-z_0-9]/ dengan menggunakan fungsi quotemeta. Baris perintah Perl dengan mudah dimasukkan ke dalam skrip shell Anda:

#/bin/sh
pstr='$x%y!zpass' # plain, un-escaped string
estr=$(perl -e 'print quotemeta shift(@ARGV)' "${pstr}")
echo ${estr}      # show escaped string

menghasilkan:

\$x\%y\!zpass

Linux
  1. Virtualisasi di PC, Dijelaskan untuk Pemula dengan Kasus Penggunaan Praktis

  2. Ssh – Skrip Shell Untuk Masuk Ke Server Ssh?

  3. Manajer Milis yang Direkomendasikan Untuk Digunakan Dengan Postfix?

  1. Ekstrak File Rar Dengan Kata Sandi Yang Berisi Karakter Khusus?

  2. Script untuk mengubah kata sandi di server linux melalui ssh

  3. Periksa kata sandi pengguna dengan skrip shell

  1. Cara Menggunakan Kata Sandi Terenkripsi di Linux Bash Shell Script

  2. SSHPass:Cara SSH ke server menggunakan skrip tanpa kata sandi (non-interaktif)

  3. Menggunakan Sed Dengan Karakter Khusus?