# 1 - ¿Falta el paquete?
Probablemente te estés perdiendo el paquete que contiene ssh-askpass
. Intenta instalarlo.
Fedora / CentOS / RHEL:
$ sudo yum install openssh-askpass
Debian / Ubuntu:
$ sudo apt-get install ssh-askpass-gnome ssh-askpass
Encontrar utilidades faltantes
Puede buscar las herramientas que faltan con estos comandos:
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 desconectado?
Inicialmente me perdí esto, pero después de leer más, noté este comentario en la página del manual ssh
sobre la SSH_ASKPASS
variable de entorno.
extracto
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 observa en el comentario, indica que ssh "no tiene un terminal asociado" Y DISPLAY
& SSH_ASKPASS
está configurado. Darse cuenta de esto es clave. Entonces, para poder ssh
usarlo SSH_ASKPASS
, necesitamos ssh
no tener un terminal (también conocido como STDIN
& STDOUT
) conectado.
Una forma de hacerlo haciendo uso del comando setsid
. No te sientas mal. Nunca escuché de esta herramienta tampoco. Desde la página del manual:
setsid: ejecuta un programa en una nueva sesión
Entonces, si corremos ssh
como el "programa" setsid
, podemos desconectarnos ssh
de nuestra terminal y cumplir con los criterios mencionados en ssh
la página de manual de. Los otros criterios se establecen de la siguiente manera:
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
Entonces, si ponemos todo esto junto:
$ setsid ssh user@remotehost
Por ejemplo:
$ setsid ssh user@skinner
Una solución
Si desea que setsid
sea "integrado", puede crear un alias de esta manera:
$ alias ssh="setsid ssh"
Ahora, cuando ssh
aparezca la GUI emergente, le pedirá su contraseña:
$ ssh user@skinner
Referencias
setsid ssh
instad de plainssh
.ssh
con aliassetsid ssh
es un enfoque. Hay otras formas El factor limitante es openssh no necesita TTY conectado para activar ASK_SSHPASS.setsid
y luego trabajarssh
desde mi terminal. ¡¿Eso no es una respuesta válida en absoluto ?! Además, funcionaba en versiones anteriores de Ubuntu, así que no estoy muy seguro de entender por qué de repente dejó de funcionar.No se puede hacer en OpenSSH actual: hay un problema abierto en OpenSSH Bugzilla que solicita esta función a partir de 2013-07: Generalize SSH_ASKPASS .
fuente
Hay una manera de cerrar la terminal para un solo comando, y eso es usar la redirección de archivos:
Esto ejecutará el comando
ssh-add
con el terminal cerrado. Lo cual está bien y elegante, excepto por su complejidad. Pero ahora que conoce el comando correcto, simplemente conviértalo en un alias y agréguelo a~/.bash_aliases
:Y deberías estar listo. Simplemente escribiendo
ssh-add
ahora invocará el alias que invocará el comando real con toda la redirección en su lugar.El
ssh-add
ahora le pregunta correctamente la contraseña con un cuadro de diálogo ... Siempre que tenga uno de estos paquetes instalados (en Ubuntu o derivados, pueden tener otros nombres en otro lugar):ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
ksshaskpath
kwalletcli
lxqt-openssh-askpass
razorqt-openssh-askpasss
Ahora, ¿qué significan todas esas cosas?
Los
2>&1
medios redirigen el descriptor de archivo n.º 2 (error estándar) al mismo lugar al que se dirige el descriptor de archivo n.º 1 (salida estándar).Los
> /dev/null
medios redirigen la salida estándar a/dev/null
, que es un archivo especial que descarta todos los datos escritos en él.Los
< /dev/null
medios redirigen la entrada estándar a/dev/null
(idem).Como nota al margen, y una nota fuera de tema pero relacionada, si alguna vez desea programar un servicio en bash, debe recordar qué es realmente un servicio, un proceso con entrada, salida y error estándar cerrado que está en segundo plano:
Tenga en cuenta que la única diferencia es el & agregado al final (más el hecho de que cambié el comando
ssh-add
por un teóricoservice
. Esos comandos pondrán correctamente un servicio en segundo plano.fuente
ssh
funciona exactamente de la misma manera, y la misma respuesta que di anteriormente todavía se aplica. Simplemente reemplace cada ocurrencia dessh-add
conssh
y ya está.ssh-add
mí: ni siquiera necesitaba redirigir stdout / stderr para obtener el comportamiento deseado, que era abrir elssh-askpass
programa. (Es decir,ssh-add < /dev/null
fue suficiente.)Tuve el mismo problema cuando instalé seahorse (que proporciona
seahorse-ssh-askpass
) sin instalar el paquetegnome-keyring
en ArchLinux.Mirar el contenido de este paquete
gnome-keyring
( https://www.archlinux.org/packages/extra/i686/gnome-keyring ) puede ayudarlo a resolver su problema.En cualquier caso, si no le importa usar seahorse, también puede instalar los paquetes
seahorse
ygnome-keyring
(o los equivalentes para su distribución). Si no usa Gnome, se pueden requerir pasos adicionales: https://wiki.archlinux.org/index.php/GNOME_Keyring .fuente