# 1 - Fehlendes Paket?
Sie vermissen wahrscheinlich das Paket, das enthält ssh-askpass
. Versuchen Sie es zu installieren.
Fedora / CentOS / RHEL:
$ sudo yum install openssh-askpass
Debian / Ubuntu:
$ sudo apt-get install ssh-askpass-gnome ssh-askpass
Suche nach fehlenden Dienstprogrammen
Mit diesen Befehlen können Sie nach fehlenden Werkzeugen suchen:
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 nicht verbunden?
Ich habe dies zunächst verpasst, aber nach weiterem Lesen habe ich diesen Kommentar in der Manpage ssh
zur SSH_ASKPASS
Umgebungsvariablen bemerkt .
Auszug
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.)
Wenn Sie in dem Kommentar feststellen, dass ssh "kein Terminal zugeordnet hat" und DISPLAY
& gesetzt SSH_ASKPASS
sind. Dies zu bemerken ist der Schlüssel. Um ssh
es nutzen SSH_ASKPASS
zu können, ssh
muss kein Terminal (aka. STDIN
& STDOUT
) Angeschlossen sein.
Eine Möglichkeit, dies mithilfe des Befehls zu tun setsid
. Fühle dich nicht schlecht. Ich habe auch noch nie von diesem Tool gehört. Von der Manpage:
setsid - Führe ein Programm in einer neuen Sitzung aus
Wenn wir also ssh
als "Programm" ausführen , können setsid
wir uns ssh
von unserem Terminal lösen, das die in ssh
der Manpage genannten Kriterien erfüllt . Die anderen Kriterien werden wie folgt festgelegt:
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
Also, wenn wir das alles zusammenfassen:
$ setsid ssh user@remotehost
Zum Beispiel:
$ setsid ssh user@skinner
Eine Lösung
Wenn Sie es so machen möchten, dass setsid
es "eingebaut" ist, können Sie Aliase wie folgt erstellen:
$ alias ssh="setsid ssh"
Wenn Sie nun ssh
aufgefordert werden, Ihr Passwort einzugeben, erscheint die GUI:
$ ssh user@skinner
Verweise
setsid ssh
git- oder rsync-Befehl ändern muss, um instad of plain zu verwendenssh
.ssh
durch Aliasesetsid ssh
. Es gibt andere Wege. Der limitierende Faktor ist, dass openssh kein TTY benötigt, um den ASK_SSHPASS zu aktivieren.setsid
und dannssh
von meinem Terminal aus bearbeiten . Das ist einfach keine gültige Antwort !? Außerdem hat es in älteren Versionen von Ubuntu funktioniert, daher bin ich mir nicht sicher, warum es plötzlich nicht mehr funktioniert.Dies ist in OpenSSH derzeit nicht möglich: In OpenSSH Bugzilla ist ein Problem aufgetreten, das nach dieser Funktion ab 2013-07 fragt: Verallgemeinern Sie SSH_ASKPASS .
quelle
Es gibt eine Möglichkeit, das Terminal für einen einzelnen Befehl zu schließen. Dabei wird die Dateiumleitung verwendet:
Dadurch wird der Befehl
ssh-add
bei geschlossenem Terminal ausgeführt. Welches ist gut und dandy, abgesehen von der Komplexität. Nachdem Sie den richtigen Befehl kennen, können Sie ihn einfach als Alias definieren und an Folgendes anhängen~/.bash_aliases
:Und du solltest bereit sein. Durch einfaches Eingeben
ssh-add
wird nun der Alias aufgerufen, der den eigentlichen Befehl mit der gesamten Umleitung aufruft.Das
ssh-add
fragt Sie jetzt korrekt nach dem Passwort mit einem Dialogfeld ... Vorausgesetzt, Sie haben eines dieser Pakete installiert (in Ubuntu oder Derivaten können sie andere Namen haben):ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
ksshaskpath
kwalletcli
lxqt-openssh-askpass
razorqt-openssh-askpasss
Was bedeuten all diese Dinge?
Das
2>&1
bedeutet, dass der Dateideskriptor Nr. 2 (Standardfehler) an dieselbe Stelle umgeleitet wird, an die der Dateideskriptor Nr. 1 (Standardausgabe) gerichtet ist.> /dev/null
Dies bedeutet, dass die Standardausgabe umgeleitet wird. Hierbei/dev/null
handelt es sich um eine spezielle Datei, in der alle darauf geschriebenen Daten verworfen werden.Das
< /dev/null
bedeutet, dass die Standardeingabe nach/dev/null
(idem) umgeleitet wird .Wenn Sie einen Service in Bash programmieren möchten, müssen Sie sich als Randnotiz und als nicht themenbezogene Notiz daran erinnern, was ein Service tatsächlich ist, einen Prozess mit Standardeingabe, -ausgabe und -fehler, der im Hintergrund geschlossen ist:
Beachten Sie, dass der einzige Unterschied das & am Ende ist (plus die Tatsache, dass ich den Befehl
ssh-add
für ein theoretisches geändert habeservice
. Diese Befehle werden einen Dienst korrekt in den Hintergrund stellen.quelle
ssh
funktioniert genauso, und die gleiche Antwort, die ich zuvor gegeben habe, gilt immer noch. Ersetzen Sie einfach jedes Vorkommen vonssh-add
mitssh
und Sie sind eingestellt.ssh-add
mich - ich musste nicht einmal stdout / stderr umleiten, um das gewünschte Verhalten zu erhalten, das darin bestand, dasssh-askpass
Programm aufzurufen. (Dasssh-add < /dev/null
war genug.)Ich hatte das gleiche Problem, als ich seahorse (die bereitstellen
seahorse-ssh-askpass
) ohne die Installation des Paketsgnome-keyring
auf ArchLinux installiert habe .Ein Blick auf den Inhalt dieses Pakets
gnome-keyring
( https://www.archlinux.org/packages/extra/i686/gnome-keyring ) kann Ihnen bei der Lösung Ihres Problems helfen.In jedem Fall können Sie, wenn es Ihnen nichts ausmacht, Seahorse zu verwenden, auch die Pakete
seahorse
undgnome-keyring
(oder die entsprechenden für Ihre Distribution) installieren . Wenn Sie Gnome nicht verwenden, sind möglicherweise zusätzliche Schritte erforderlich: https://wiki.archlinux.org/index.php/GNOME_Keyring .quelle