# 1 - Paket tidak ada?
Anda mungkin melewatkan paket yang berisi ssh-askpass
. Coba pasang.
Fedora / CentOS / RHEL:
$ sudo yum install openssh-askpass
Debian / Ubuntu:
$ sudo apt-get install ssh-askpass-gnome ssh-askpass
Menemukan utilitas yang hilang
Anda dapat mencari alat yang hilang menggunakan perintah ini:
Fedora / CentOS / RHEL:
$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X
Debian / Ubuntu:
$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
# 2 - Terminal terputus?
Saya awalnya merindukan ini tetapi setelah membaca lebih lanjut saya melihat komentar ini di halaman ssh
manual mengenai SSH_ASKPASS
variabel lingkungan.
kutipan
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. This is particularly
useful when calling ssh from a .xsession or related script.
(Note that on some machines it may be necessary to redirect the
input from /dev/null to make this work.)
Jika Anda perhatikan di komentar, itu menyatakan bahwa ssh "tidak memiliki terminal yang terkait" DAN DISPLAY
& SSH_ASKPASS
diatur. Memperhatikan ini adalah kuncinya. Jadi untuk bisa ssh
menggunakan SSH_ASKPASS
kita harus ssh
tidak memiliki terminal (alias. STDIN
& STDOUT
) Yang melekat padanya.
Salah satu cara untuk melakukan ini dengan memanfaatkan perintah setsid
. Jangan merasa buruk. Saya juga tidak pernah mendengar alat ini. Dari halaman manual:
setsid - jalankan program dalam sesi baru
Jadi jika kita menjalankan ssh
sebagai "program" untuk setsid
kita dapat melepaskan ssh
dari terminal kita memenuhi kriteria yang disebutkan dalam ssh
halaman manual. Kriteria lainnya ditetapkan sebagai berikut:
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
Jadi jika kita menyatukan ini semua:
$ setsid ssh user@remotehost
Sebagai contoh:
$ setsid ssh user@skinner
Sebuah solusi
Jika Anda ingin membuatnya jadi setsid
"bawaan" Anda dapat membuat alias seperti:
$ alias ssh="setsid ssh"
Sekarang ketika Anda, ssh
Anda akan mendapatkan GUI muncul meminta kata sandi Anda:
$ ssh user@skinner
Referensi
setsid ssh
instad dari plainssh
.ssh
dengan aliassetsid ssh
adalah salah satu pendekatan. Ada beberapa cara lain. Faktor pembatas adalah openssh tidak memerlukan TTY yang terpasang untuk mengaktifkan ASK_SSHPASS.setsid
dan kemudian bekerjassh
dari terminal saya. Itu sama sekali bukan jawaban yang valid !? Plus, itu berfungsi di versi lama Ubuntu, jadi saya tidak terlalu yakin saya mengerti mengapa tiba-tiba berhenti bekerja!Ini tidak dapat dilakukan di OpenSSH saat ini: ada masalah terbuka di OpenSSH Bugzilla meminta fitur ini pada 2013-07: Generalisasi SSH_ASKPASS .
sumber
Ada cara untuk menutup terminal untuk satu perintah, dan itu menggunakan pengalihan file:
Ini akan menjalankan perintah
ssh-add
dengan terminal tertutup. Yang bagus dan keren, kecuali untuk kompleksitasnya. Tetapi sekarang setelah Anda tahu perintah yang benar, cukup buat itu sebagai alias dan tambahkan ke~/.bash_aliases
:Dan Anda harus siap. Cukup mengetik
ssh-add
sekarang akan memanggil alias yang akan memanggil perintah sebenarnya dengan semua pengalihan di tempat.The
ssh-add
sekarang benar meminta Anda password dengan kotak dialog ... Asalkan Anda memiliki salah satu dari paket ini diinstal (di Ubuntu atau turunan, mereka mungkin memiliki nama yang lain di tempat lain):ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
ksshaskpath
kwalletcli
lxqt-openssh-askpass
razorqt-openssh-askpasss
Sekarang, apa artinya semua itu?
The
2>&1
berarti mengarahkan file descriptor # 2 (standard error) ke tempat yang sama file descriptor # 1 (standar output) diarahkan untuk.The
> /dev/null
berarti mengarahkan output standar untuk/dev/null
, yang merupakan file khusus yang membuang semua data ditulis untuk itu.The
< /dev/null
berarti mengarahkan standar input ke/dev/null
(idem).Sebagai catatan tambahan, dan topik tidak umum tetapi catatan terkait, jika Anda ingin memprogram layanan di bash, Anda harus mengingat apa sebenarnya layanan itu, sebuah proses dengan input standar, output, dan kesalahan ditutup yang ada di latar belakang:
Perhatikan bahwa satu-satunya perbedaan adalah & ditambahkan di akhir (ditambah fakta bahwa saya mengubah perintah
ssh-add
untuk teoriservice
. Perintah-perintah itu akan menempatkan layanan dengan benar di latar belakang.sumber
ssh
fungsinya dengan cara yang persis sama, dan jawaban yang sama yang saya berikan sebelumnya masih berlaku. Ganti saja setiap kemunculanssh-add
denganssh
dan Anda sudah siap.ssh-add
saya - saya bahkan tidak perlu mengarahkan stdout / stderr untuk mendapatkan perilaku yang diinginkan, yaitu memunculkanssh-askpass
program. (Yaitu,ssh-add < /dev/null
sudah cukup.)Saya memiliki masalah yang sama ketika saya menginstal kuda laut (yang menyediakan
seahorse-ssh-askpass
) tanpa menginstal paketgnome-keyring
pada ArchLinux.Melihat isi paket ini
gnome-keyring
( https://www.archlinux.org/packages/extra/i686/gnome-keyring ) dapat membantu Anda memecahkan masalah Anda.Bagaimanapun, jika Anda tidak keberatan menggunakan kuda laut, Anda juga dapat menginstal paket
seahorse
dangnome-keyring
(atau yang setara untuk distribusi Anda). Jika Anda tidak menggunakan Gnome, langkah-langkah tambahan mungkin diperlukan: https://wiki.archlinux.org/index.php/GNOME_Keyring .sumber