man ssh
mengatakan:
SSH_ASKPASS
If ssh needs a passphrase, it will read the passphrase from the
current terminal if it was run from a terminal. If ssh does not
have a terminal associated with it but DISPLAY and SSH_ASKPASS
are set, it will execute the program specified by SSH_ASKPASS
and open an X11 window to read the passphrase.
Saya ingin SSH menggunakan program askpass bahkan jika dijalankan dari terminal.
Kadang-kadang, saya harus terhubung ke server, di mana ada beberapa keterlambatan dalam menampilkan prompt kata sandi (mungkin karena masalah jaringan, mungkin karena upaya membalikkan pencarian DNS, ...). Saya merasa jengkel dan beralih ke hal lain, dan lupa tentang koneksi yang dicoba. (Masukkan lelucon tentang rentang perhatian ikan mas.) Ketika saya akhirnya kembali ke sana, prompt waktunya habis dan bahkan kata sandi yang benar hanya akan menghasilkan koneksi yang tertutup.
Kunci akan menjadi salah satu solusi, tetapi tidak setiap sistem yang saya gunakan memiliki kunci SSH yang biasa. Namun, saya biasanya menggunakan sistem Ubuntu, dan Ubuntu memiliki program askpass SSH yang terinstal secara default.
Namun, jika jendela askpass muncul, saya akan segera menyadarinya. Itu kompromi yang cukup baik bagi saya, kalau saja saya bisa membuatnya bekerja.
/dev/tty
(LD_PRELOAD
?).Jawaban:
Ini akan sedikit lebih rumit, tetapi kombinasi beberapa potong akan membuatnya berfungsi:
Penjelasan
Untuk memaksa
ssh
menggunakan$SSH_ASKPASS
program, Anda tidak dapatssh
melihat yang aslitty
. Itu hanya kondisi. Ini dapat dilakukan dengan menggunakansetsid
dan menggunakan-n
sakelar kessh
.Kasing ini akan memulai koneksi, tetapi Anda tidak akan dapat berinteraksi dengan shell, yang mungkin juga merupakan kebutuhan Anda;) (dan juga merusak TTY lokal Anda).
Tapi Anda bisa menyerah pada "sesi pertama". Anda juga harus menambahkan
-N
sakelar, yang akan menekan perintah jarak jauh dan hanya akan melakukan otentikasi .Juga kemungkinan keluaran "sampah" dapat dialihkan ke
&> /dev/null
jika Anda tidak tertarik padanya.Diatur
ControlMaster
dalamssh_config
. Ini adalah fitur yang keren dan setelah koneksi dibuat, Anda dapat "menyalakan" sesi dengan cukup cepat. Cuplikan ini~/.ssh/config
harus melakukan itu:Anda dapat menambahkannya ke dalam beberapa
host
blok yang mencantumkan "kandidat lambat" Anda, atau di mana saja. Hampir tidak ada overhead.Baris terakhir
Maka Anda harus dapat terhubung dengan cara ini ke host yang Anda harapkan akan memakan waktu cukup lama:
Seluruh proses dapat disederhanakan dengan
alias
atau fungsi bash melakukan keduanya dalam satu langkah, tetapi itu dibiarkan di imajinasi pembaca.Hanya argumen baris perintah
Anda dapat menggabungkan kedua hal bersama di command-line tanpa
ssh_config
bagian:Fungsi berikut harus berfungsi ketika opsi SSH tidak ditentukan:
-f
menginstruksikan SSH untuk pergi ke latar belakang sebelum pelaksanaan program, yang setelah itu mendapat kata sandi.-w
memberitahusetsid
untuk menunggu program berakhir. Dalam hal ini, itu terjadi ketika SSH pergi ke latar belakang. Dikombinasikan denganssh -f
, menunggu manual antara dua perintah SSH dapat dihilangkan.sumber
ControlMaster
sudah diatur, justru karena itu sulit untuk memasukkan kata sandi dalam kasus seperti itu. Seharusnya tidak sulit untuk menulis fungsi yang menguji master yang ada dan menggunakan askpass jika tidak dapat menemukannya. Terima kasih!Manual per SSH (
man ssh
):Oleh karena itu Anda perlu melepaskan terminal (mis. Dengan menambahkan pipa) dan pastikan
DISPLAY
tidak disetel (jika Anda ingin menggunakan terminal untuk frasa sandi Anda sebagai gantinya).Contoh sederhana:
Sama dengan
ssh-add
:sumber
Pseudo-terminal will not be allocated because stdin is not a terminal
, jadi sepertinya pipa itu melakukan sesuatu.ssh </dev/null
memiliki efek yang sama. Namun dalam kedua kasus itu masih meminta kata sandi, dan saya masih bisa mengetik satu. Saya mencoba di Linux dan Mac. Saya mencobassh -vvv
tetapi tidak mengatakan sesuatu yang berguna.SSH_ASKPASS=/foo DISPLAY= setsid ssh host
bekerja sekalipun.