# 1 - Paquet manquant?
Vous manquez probablement le paquet qui contient ssh-askpass
. Essayez de l'installer.
Fedora / CentOS / RHEL:
$ sudo yum install openssh-askpass
Debian / Ubuntu:
$ sudo apt-get install ssh-askpass-gnome ssh-askpass
Trouver les services publics manquants
Vous pouvez rechercher les outils manquants à l'aide de ces commandes:
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 déconnecté?
Au début, cela me manquait, mais après une lecture plus approfondie, j’ai remarqué ce commentaire dans la page de manuel ssh
relative à la SSH_ASKPASS
variable d’environnement.
extrait
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.)
Si vous remarquez dans le commentaire, il est indiqué que ssh "n'a pas de terminal associé" ET DISPLAY
& SSH_ASKPASS
sont définis. Noter que c'est la clé. Donc, pour pouvoir ssh
utiliser, SSH_ASKPASS
nous devons ssh
ne pas avoir de terminal (ou. STDIN
& STDOUT
).
Une façon de faire cela en utilisant la commande setsid
. Ne te sens pas mal. Je n'ai jamais entendu parler de cet outil non plus. De la page de manuel:
setsid - lance un programme dans une nouvelle session
Ainsi, si nous exécutons ssh
le programme, setsid
nous pouvons nous détacher ssh
de notre terminal en respectant les critères mentionnés dans ssh
la page de manuel de. Les autres critères sont définis comme suit:
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
Donc, si nous mettons tout cela ensemble:
$ setsid ssh user@remotehost
Par exemple:
$ setsid ssh user@skinner
Une solution
Si vous voulez faire en sorte que le setsid
"soit intégré", vous pouvez créer un alias comme ceci:
$ alias ssh="setsid ssh"
Maintenant, quand vous ssh
aurez l’interface graphique qui vous demandera votre mot de passe:
$ ssh user@skinner
Les références
setsid ssh
instad of plainssh
.ssh
par des alias,setsid ssh
une approche. Il y a d'autres moyens. Le facteur limitant est que openssh n’a pas besoin de téléscripteur pour pouvoir activer ASK_SSHPASS.setsid
et ensuite travailler àssh
partir de mon terminal. Ce n'est tout simplement pas une réponse valable!? De plus, cela fonctionnait dans les anciennes versions d'Ubuntu, donc je ne suis pas sûr de comprendre pourquoi cela a soudainement cessé de fonctionner!Cela ne peut pas être fait dans OpenSSH actuel: un problème est ouvert dans BugZilla pour OpenSSH demandant cette fonctionnalité à partir de 2013-07: Generalize SSH_ASKPASS .
la source
Il existe un moyen de fermer le terminal pour une seule commande, en utilisant la redirection de fichier:
Cela exécutera la commande
ssh-add
avec le terminal fermé. Ce qui est bien et dandy, sauf pour sa complexité. Mais maintenant que vous connaissez la commande correcte, faites-en simplement un alias et ajoutez-le à~/.bash_aliases
:Et vous devriez être prêt. Il vous
ssh-add
suffira maintenant de taper l'invocation de l'alias pour appeler la commande réelle avec toute la redirection en place.Le
ssh-add
maintenant vous demande correctement le mot de passe avec une boîte de dialogue ... Pourvu que l'un de ces paquetages soit installé (sous Ubuntu ou ses dérivés, ils peuvent porter d'autres noms ailleurs):ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
ksshaskpath
kwalletcli
lxqt-openssh-askpass
razorqt-openssh-askpasss
Maintenant, qu'est-ce que toutes ces choses veulent dire?
Le
2>&1
moyen de redirection du descripteur de fichier n ° 2 (erreur standard) vers le même descripteur de fichier de lieu n ° 1 (sortie standard) est dirigé vers.Le
> /dev/null
moyen redirige la sortie standard vers/dev/null
, qui est un fichier spécial qui supprime toutes les données qui y sont écrites.Les
< /dev/null
moyens redirigent l'entrée standard vers/dev/null
(idem).En tant que note parallèle et note secondaire, si vous souhaitez programmer un service dans bash, vous devez vous rappeler ce qu’il en est réellement: un processus avec entrée standard, sortie et erreur fermée en arrière-plan:
Notez que la seule différence est le & ajouté à la fin (plus le fait que j'ai changé la commande
ssh-add
pour une valeur théoriqueservice
. Ces commandes mettront correctement un service en arrière-plan.la source
ssh
fonctionne exactement de la même manière, et la réponse que j’avais donnée précédemment est toujours valable. Il suffit de remplacer chaque occurrence dessh-add
avecssh
et vous êtes prêt.ssh-add
moi - je n'ai même pas eu besoin de rediriger stdout / stderr pour obtenir le comportement souhaité, qui consistait à faire apparaître lessh-askpass
programme. (Celassh-add < /dev/null
suffisait.)J'ai eu le même problème quand j'ai installé seahorse (qui fournit
seahorse-ssh-askpass
) sans installer le paquetgnome-keyring
sur ArchLinux.Le contenu de ce paquet
gnome-keyring
( https://www.archlinux.org/packages/extra/i686/gnome-keyring ) peut vous aider à résoudre votre problème.Dans tous les cas, si cela ne vous dérange pas d'utiliser Seahorse, vous pouvez également installer les packages
seahorse
etgnome-keyring
(ou les équivalents pour votre distribution). Si vous n'utilisez pas Gnome, des étapes supplémentaires peuvent être nécessaires: https://wiki.archlinux.org/index.php/GNOME_Keyring .la source