GNU/Linux >> Belajar Linux >  >> Linux

Bisakah saya membuat SSH menggunakan program askpass meskipun dijalankan dari terminal?

Ini akan sedikit lebih rumit, tetapi kombinasi dari beberapa bagian akan membuatnya berfungsi:

Penjelasan

  1. Untuk memaksa ssh untuk menggunakan $SSH_ASKPASS program, Anda tidak dapat mengizinkan ssh untuk melihat tty yang sebenarnya . Itu hanya kondisi. Ini dapat dilakukan dengan menggunakan setsid dan menggunakan -n beralih ke ssh .

    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 melepaskan "sesi pertama". Anda juga harus menambahkan -N switch, yang akan menekan perintah jarak jauh dan akan melakukan otentikasi saja .

    Juga kemungkinan keluaran "sampah" dapat dialihkan ke &> /dev/null jika Anda tidak tertarik.

  2. Siapkan ControlMaster di ssh_config . Ini adalah fitur yang keren dan setelah koneksi dibuat, Anda dapat "menjalankan" sesi dengan cukup cepat. Cuplikan ini di ~/.ssh/config harus melakukan itu:

    ControlPath ~/.ssh/controlmasters/%[email protected]%h:%p
    ControlMaster auto
    ControlPersist 5m
    

    Anda dapat menambahkannya ke dalam beberapa host blokir daftar "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:

setsid ssh -nN host
# wait, insert password in the X11 prompt
ssh host
# will bring you directly to your session

Seluruh proses dapat disederhanakan dengan alias atau fungsi bash melakukan keduanya dalam satu langkah, tetapi dibiarkan dalam imajinasi pembaca.

Hanya argumen baris perintah

Anda dapat menggabungkan keduanya pada baris perintah tanpa ssh_config bagian:

setsid ssh -nNMS ~/.ssh/masters/%C host
# wait, insert password in the X11 prompt
ssh -S ~/.ssh/masters/%C host
# will bring you directly to your session

Fungsi berikut akan berfungsi saat opsi SSH tidak ditentukan:

ssh() {
    if ! command ssh -o PasswordAuthentication=no "$1" true
    then
        setsid -w ssh -fnN "$1"
    fi
    command ssh "[email protected]"
}
  • -f menginstruksikan SSH untuk pergi ke latar belakang tepat sebelum eksekusi program, yaitu setelah mendapatkan kata sandi.
  • -w memberi tahu setsid untuk menunggu program berakhir. Dalam hal ini, itu terjadi ketika SSH pergi ke latar belakang. Dikombinasikan dengan ssh -f , penantian manual antara dua perintah SSH dapat dihilangkan.
  • Fungsi mengasumsikan argumen pertama adalah nama host.
  • Pengujian ini hanya untuk mencegah koneksi SSH yang tidak perlu.

A per manual SSH (man ssh ):

Jika ssh tidak memiliki terminal yang terkait dengannya tetapi DISPLAY dan SSH_ASKPASS telah disetel, ini akan menjalankan program yang ditentukan oleh SSH_ASKPASS.

Oleh karena itu Anda perlu melepaskan terminal (misalnya dengan menambahkan pipa) dan pastikan DISPLAY tidak disetel (jika Anda ingin menggunakan terminal untuk frasa sandi Anda).

Contoh sederhana:

echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh ...

Sama dengan ssh-add :

$ echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh-add id_rsa
ssh_askpass: exec(/my/cmd): No such file or directory

Dengan OpenSSH 8.4 Anda dapat mengatur $SSH_ASKPASS_REQUIRE variabel lingkungan ke force . Mengutip ssh(1) halaman manual:

 SSH_ASKPASS_REQUIRE   Allows further control over the use of
                       an askpass program.  If this variable
                       is set to "never" then ssh will never
                       attempt to use one.  If it is set to
                       "prefer", then ssh will prefer to use
                       the askpass program instead of the TTY
                       when requesting passwords.  Finally, if
                       the variable is set to "force", then
                       the askpass program will be used for
                       all passphrase input regardless of
                       whether DISPLAY is set.

Karena OpenSSH 8.4 dirilis pada 27 September 2020, Anda harus menunggu sebentar agar fitur ini tersedia di distribusi Linux utama mana pun.


Linux
  1. Perbedaan Antara Program Starter Systemd Dan Terminal?

  2. Ssh – Atur Warna Terminal Mesin Lokal Untuk Menggunakan Warna Mesin yang Saya Gunakan Ssh?

  3. Ssh – Perlu Tty Untuk Menjalankan Sudo Jika Saya Bisa Sudo Tanpa Kata Sandi?

  1. Bagaimana saya bisa mendapatkan tanggal dan waktu saat ini di terminal dan mengatur perintah khusus di terminal untuk itu?

  2. program lynx gagal dengan 'Tidak dapat mengakses file awal'?

  3. Bisakah saya memulihkan proses nano dari terminal sebelumnya?

  1. Bagaimana Cara Mengirim Keystrokes (f5) Dari Terminal Ke Program Gui?

  2. Linux – Bisakah Kita Mendapatkan Informasi Kompilator Dari Biner Elf?

  3. Bisakah sebuah program mengatakan sedang dijalankan di bawah sudo?