# 1 - Brakuje paczki?
Prawdopodobnie brakuje Ci pakietu, który zawiera ssh-askpass
. Spróbuj zainstalować.
Fedora / CentOS / RHEL:
$ sudo yum install openssh-askpass
Debian / Ubuntu:
$ sudo apt-get install ssh-askpass-gnome ssh-askpass
Znajdowanie brakujących narzędzi
Możesz wyszukać brakujące narzędzia za pomocą następujących poleceń:
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 - Odłączony terminal?
Początkowo mi tego brakowało, ale po dalszym czytaniu zauważyłem ten komentarz na stronie ssh
podręcznika SSH_ASKPASS
dotyczący zmiennej środowiskowej.
fragment
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.)
Jeśli zauważysz w komentarzu, oznacza to, że ssh „nie ma przypisanego terminala” ORAZ DISPLAY
i SSH_ASKPASS
są ustawione. Zauważenie tego jest kluczowe. Aby więc ssh
skorzystać SSH_ASKPASS
, musimy ssh
nie mieć przyłączonego terminalu (aka. STDIN
& STDOUT
).
Jednym ze sposobów na to jest użycie polecenia setsid
. Nie czuj się źle Nigdy też nie słyszałem o tym narzędziu. Ze strony podręcznika:
setsid - uruchom program w nowej sesji
Więc jeśli działamy ssh
jako „program” setsid
, możemy odłączyć się ssh
od naszego terminala, spełniając kryteria wymienione na ssh
stronie man. Pozostałe kryteria są ustawione w następujący sposób:
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
Więc jeśli połączymy to wszystko razem:
$ setsid ssh user@remotehost
Na przykład:
$ setsid ssh user@skinner
Rozwiązanie
Jeśli chcesz zrobić to tak, aby setsid
był „wbudowany”, możesz utworzyć takie aliasy:
$ alias ssh="setsid ssh"
Teraz, gdy ssh
pojawi się GUI z prośbą o podanie hasła:
$ ssh user@skinner
Referencje