Bagi mereka yang ingin membalas bahwa saya harus menggunakan kunci SSH tolong abstain
Saya mencoba menggunakan harapkan dalam skrip bash untuk memberikan kata sandi SSH. Memberikan kata sandi berfungsi tetapi saya tidak berakhir di sesi SSH sebagaimana mestinya, ia kembali menjadi bash.
Skrip saya:
#!/bin/bash
read -s PWD
/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com'
expect "password"
send "$PWD\n"
EOD
echo "you're out"
Output dari skrip saya:
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
usr@$myhost.example.com's password: you're out
Saya ingin memiliki sesi SSH saya dan hanya ketika saya keluar untuk kembali ke skrip bash saya. Alasan mengapa saya menggunakan bash sebelum mengharapkan adalah karena saya telah menggunakan menu saya dapat memilih unit mana yang akan dihubungkan.
Terima kasih
Jawaban:
Mencampur bash dan berharap bukanlah cara yang baik untuk mencapai efek yang diinginkan. Saya akan mencoba menggunakan hanya Harapkan:
Contoh solusi untuk bash dapat:
Ini akan menunggu sesi interaktif masuk dan kembali (sesaat).
sumber
Cara termudah adalah dengan menggunakan sshpass . Ini tersedia di repo Ubuntu / Debian dan Anda tidak harus berurusan dengan mengintegrasikan ekspektasi dengan bash.
Sebuah contoh:
Perintah di atas dapat dengan mudah diintegrasikan dengan skrip bash.
Catatan: Silakan baca bagian Pertimbangan Keamanan
man sshpass
untuk memahami sepenuhnya implikasi keamanan.sumber
sshpass
- mudahan melakukan itu, tetapi meskipun ada periode saat itu masih memulai sebelum dapat melakukan itu ketika kata sandi tersedia untuk setiap / setiap proses untuk melihat.sshpass
digunakan dalam skenario di mana Anda memiliki skrip pengujian sederhana yang dijalankan di lingkungan jaringan lokal di mana keamanan bukanlah perhatian utama. Bahkan, ada bagian diman sshpass
mana seluruh bagian tentang Pertimbangan Keamanan dijelaskan. Menambahkan ini sebagai jawaban, Terima kasih.Tambahkan perintah 'berinteraksi' sebelum EOD Anda:
Ini akan memungkinkan Anda berinteraksi dengan mesin jarak jauh sampai Anda keluar. Maka Anda akan kembali di bash.
sumber
expect eof
menyelesaikan masalah.'
dariusr@$myhost.example.com'
dan itu akan berhasil. Dan mungkin Anda perlu mengganti\n
dengan\r
, tapi YMMVSetelah mencari jawaban untuk pertanyaan selama berbulan-bulan, saya akhirnya menemukan solusi terbaik: menulis naskah sederhana.
Masukkan
/usr/bin/exp
, lalu Anda dapat menggunakan:exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
Selesai!
sumber
expect "assword:"
kau berartiexpect "password:"
?"assword"
akan cocok dengan keduanyaPassword
danpassword
.Pastikan juga untuk menggunakan
sebagai gantinya, karena kata sandi yang dimulai dengan tanda hubung (-) akan gagal jika tidak.
Di atas tidak akan menafsirkan string yang dimulai dengan tanda hubung sebagai opsi untuk perintah kirim.
sumber
Skrip harapan sederhana
Remotelogin.exp
Contoh:
sumber
Gunakan alat bantu
fd0ssh
(dari hxtools, bukan pmt), itu berfungsi tanpa harus mengharapkan prompt tertentu dari program ssh.sumber
echo "yoursshpass" | fd0ssh ssh -c -L$port:$ip:$remote_port [email protected] &
Terima kasih!sshpass
halnya.Cara lain yang menurut saya berguna untuk menggunakan skrip harapan kecil dari skrip bash adalah sebagai berikut.
Ini berhasil karena
...If the string "-" is supplied as a filename, standard input is read instead...
sumber
-
sini, karenaexpect
dibacastdin
secara default jika Anda memintanya tanpa argumen. Namun itu berguna jika Anda ingin menjalankannya secara interaktif tanpa command prompt (expect
vsexpect -
) atau jika Anda melakukan sesuatu seperti diexpect -f "$@"
mana argumen pertama akan menjadi file, bahkan jika itu terlihat seperti opsi (dimulai dengan-
). Dalam hal ini, jika$1
(file yang diberikan) adalah apakah-
ini dibacastdin
.sshpass
rusak jika Anda mencoba menggunakannya di dalam target build Sublime Text, di dalam Makefile. Alih-alihsshpass
Anda dapat menggunakanpassh
: https://github.com/clarkwang/passhDengan
sshpass
Anda akan melakukan:Dengan
passh
Anda akan melakukan:Catatan: Jangan lupa gunakan
-o StrictHostKeyChecking=no
, kalau tidak koneksi akan hang saat pertama kali Anda menggunakannya. Sebagai contoh:Referensi:
sumber