Apakah mungkin untuk meneruskan kata sandi pada skrip shell?

11

Lama saya mencari ini, saya ingin tahu apakah mungkin untuk memasukkan kata sandi dalam skrip shell? Banyak jawaban yang dikembalikan tanpa. Baru-baru ini saya membaca sebuah artikel yang menyatakan bahwa cara menyampaikan kata sandi dalam skrip shell. Saya sudah mencobanya, tetapi sepertinya tidak berhasil. Ini tautannya . Adakah yang bisa checkitout dan kembali? Juga tolong katakan padaku apakah ada cara untuk mengirimkan kata sandi dalam skrip shell? Jika tidak, tolong katakan padaku bagaimana linux mendapatkan input untuk kata sandi?

karthick87
sumber

Jawaban:

12

Dengan "memasukkan kata sandi", Anda mungkin bermaksud memasukkan data tanpa terlihat oleh pengguna.

(disarankan oleh geirha) Saat menggunakan bash, Anda dapat menggunakan -sopsi untuk mencegah karakter yang diketik ditampilkan:

read -p "Password please: " -s pass

Atau, ubah perilaku terminal untuk menyembunyikan karakter yang diketik dengan stty -echo(nonaktifkan echo). Setelah membaca kata sandi dengan shell bawaan readmenjadi variabel (dalam contoh di bawah, $pass), hidupkan kembali dengan stty echo. Karena baris baru dari Enterdisembunyikan, Anda harus mencetak baris baru untuk mendapatkan hasil di masa depan pada baris baru.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readdan printfshell built-in. sttydisediakan oleh coreutilspaket yang diinstal secara default. Itu artinya cuplikan ini sangat portabel.

Catatan: -popsi tidak standar, tetapi dari bash. Jika Anda perlu menampilkan prompt di shell lain, gunakan:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Referensi:

Lekensteyn
sumber
Saya hanya ingin memberikan kata sandi root sistem remote dalam skrip. Apakah mungkin dalam kasus Anda?
karthick87
@ karthick87: tidak, skrip ini hanya menangkap data yang diketik pengguna secara interaktif. Jika Anda ingin memasukkan kata sandi root ke skrip, mengapa Anda tidak mempertimbangkan login berbasis kunci?
Lekensteyn
1
Bash's read juga memiliki opsi untuk menonaktifkan echoing saat membaca di baris. Lihat help '\read'.
geirha
Di zshdalamnya dapat dicapai melalui read -s 'pw?Prompt text', di mana pwada variabel di mana kata sandi akan ditempatkan dan -smerupakan bendera untuk menyembunyikan input.
botak
2

Ke program mana Anda ingin memberikan kata sandi?

Skrip pada tautan berfungsi untuk saya. Perhatikan bahwa ini bukan skrip shell tetapi skrip ekspektasi (membutuhkan paket yang expectakan diinstal`). Menggunakan harapkan adalah cara umum untuk mengotomatisasi program interaktif berbasis teks.

sshLogin non-interaktif sering dilakukan menggunakan otentikasi berbasis kunci dengan frasa sandi kosong.

Beberapa program lain (seperti sudo) memiliki opsi untuk membaca kata sandi dari stdin.

Memberikan kata sandi sebagai opsi baris perintah seringkali merupakan masalah keamanan karena pada kebanyakan sistem setiap pengguna dapat melihat proses pengguna lain termasuk argumen baris perintah yang menggunakan alat sederhana seperti ps.

Florian Diesch
sumber
Saya hanya ingin memberikan kata sandi ke program ssh.
karthick87
Jadi mungkin otentikasi kunci berfungsi untuk Anda: Gunakan ssh-keygenuntuk membuat kunci otentikasi (cukup tekan Enter ketika ditanyai frasa sandi) dan salin ke pengguna jarak jauh menggunakan ssh-copy-id. Jika otentikasi kunci diaktifkan untuk sshd (ini secara default) ssh kemudian akan tidak meminta kata sandi.
Florian Diesch
1

Sebuah skrip seharusnya tidak pernah benar-benar menangani kata sandi. Miliki aplikasi mana saja yang memerlukan kata sandi untuk menanyakannya sendiri, atau jika itu tidak memungkinkan, temukan cara yang lebih baik untuk mengautentikasi dengan aplikasi tersebut. Silakan baca http://mywiki.wooledge.org/BashFAQ/069

geirha
sumber
0

Ada cara untuk menyimpan kata sandi dalam skrip bash tetapi Anda harus mengenkripsi skrip tersebut sehingga tidak ada yang bisa membacanya, atau menjalankan semua jenis debugger di atasnya untuk melihat apa yang dilakukannya. Untuk mengenkripsi skrip bash / shell dan membuatnya benar-benar dapat dieksekusi, coba salin dan tempel di sini

Pada halaman di atas, yang harus Anda lakukan adalah mengirimkan skrip Anda (Anda dapat mengirimkan skrip sampel terlebih dahulu untuk ketenangan pikiran Anda). File zip akan dibuat untuk Anda. Klik kanan pada tautan unduhan dan salin URL yang Anda berikan. Lalu, buka kotak UNIX Anda dan lakukan langkah-langkah berikut.

Instalasi:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

Apa yang akan dilakukan perintah instalasi di atas untuk Anda adalah:

  1. Ini akan menginstal skrip terenkripsi di direktori /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Ini akan menempatkan tautan ke skrip terenkripsi ini di direktori mana pun yang Anda tentukan sebagai pengganti /home/(your-username)- dengan cara itu, ia memungkinkan Anda untuk dengan mudah mengakses skrip tanpa harus mengetikkan path absolut.

  3. Pastikan TIDAK ADA yang dapat memodifikasi skrip - Upaya apa pun untuk memodifikasi skrip terenkripsi akan membuatnya tidak dapat dioperasikan ... hingga upaya tersebut dihentikan atau dihapus.

  4. Memastikan benar-benar TIDAK ADA yang bisa menyalinnya. Tidak ada yang dapat menyalin skrip Anda ke lokasi terpencil dan mencoba untuk membukanya untuk melihat cara kerjanya. Semua salinan skrip harus berupa tautan ke lokasi asli yang Anda tentukan saat menginstal.

CATATAN:

Saya tidak percaya ini berfungsi untuk skrip interaktif yang meminta pengguna untuk merespons. Nilai harus di-hardcode ke dalam skrip. Enkripsi memastikan tidak ada yang benar-benar dapat melihat nilai-nilai itu sehingga Anda tidak perlu khawatir tentang itu.

SimplifiedWorkings
sumber
-1

Anda cukup melakukan sesuatu seperti ini.

# echo -e "password_here\npassword_here" | su user

sumber

fromnaboo
sumber