ssh-askpass en Mac OS 10.9 / Mavericks roto?

7

En Mac OS 10.7 y 10.8 (computadoras separadas) He estado usando un script ssh-askpass para permitirme verificar el uso de claves SSH:

enlace

Sin embargo, esto no parece funcionar en Mavericks / 10.9?

Las claves SSH simples funcionan bien:

box ~$ ssh-add -D
All identities removed.
box ~$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /Users/user/.ssh/id_rsa: 
Identity added: /Users/user/.ssh/id_rsa (/Users/user/.ssh/id_rsa)
box ~$ ssh remotehost
remotehost ~$
^D

Pero con -c, ya no funciona ...

box ~$ ssh-add -D
All identities removed.
box ~$ ssh-add -c ~/.ssh/id_rsa
Enter passphrase for /Users/user/.ssh/id_rsa: 
Identity added: /Users/user/.ssh/id_rsa (/Users/user/.ssh/id_rsa)
The user must confirm each use of the key
box ~$ ssh remotehost
Agent admitted failure to sign using the key.
Password for [email protected]:

/ usr / libexec / ssh-askpass es propiedad de root y tiene + x. Parece que ni siquiera se ejecuta (se agregó una línea simple "touch a-logfile", nunca llamada).

¿Alguna idea o sugerencia sobre cómo depurar más?

Gracias

    
pregunta jstrom 20.05.2014 - 19:08

3 respuestas

6

¡Problema resuelto! En caso de duda, lea la fuente ...

ssh-agent no llamará a ssh-askpass a menos que se establezca la variable env de DISPLAY. Lo más probable es que haya estado trabajando en instalaciones anteriores, ya que tenía instalado X11. No en este cuadro (todavía).

Solución alternativa:

Parche el archivo de agentes de inicio ssh-agent:

--- org.openbsd.ssh-agent.plist.orig    2014-05-22 09:55:53.000000000 +0200
+++ /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist    2014-05-22 09:56:31.000000000 +0200
@@ -9,6 +9,11 @@
        <string>/usr/bin/ssh-agent</string>
        <string>-l</string>
    </array>
+   <key>EnvironmentVariables</key>
+   <dict>
+       <key>DISPLAY</key>
+       <string>:0</string>
+   </dict>
    <key>ServiceIPC</key>
    <true/>
    <key>Sockets</key>

Luego reinicia tu computadora.

O recárguelo por la fuerza, sin embargo, SSH_AUTH_SOCK no será válido en todas las nuevas sesiones de terminal:

launchctl unload /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist                        
launchctl load /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
export SSH_AUTH_SOCK=$(launchctl getenv SSH_AUTH_SOCK)                 
ssh-add -c ....

Problema resuelto!

Nota: es probable que el archivo ssh-agent plist se sobrescriba en la actualización ... Es posible que haya formas más claras de garantizar que la PANTALLA esté establecida.

    
respondido por el jstrom 22.05.2014 - 10:03
0

Estoy en 10.9 y la solución de @ jstrom no funcionó para mí. Para mí, la variable DISPLAY ya estaba siendo establecida. El problema fue que faltaba el programa ssh-askpass :

[[email protected]/0 ~] ls /usr/libexec/ssh-askpass
ls: /usr/libexec/ssh-askpass: No such file or directory
echo $SSH_ASKPASS
(no output)

Puede solucionar esto utilizando un programa personalizado ssh-askpass como jcs's (requiere CocoaDialog) o markcarver's .

Prefiero copiar este programa a ~/bin/ssh-askpass . Esto requiere especificar esta ubicación en la variable SSH_ASKPASS ; agrega esto a tu ~ / .bash_profile:

export SSH_ASKPASS=~/bin/ssh-askpass

Es posible que también deba hacer que esta variable esté disponible en el contexto de launchd:

launchctl setenv SSH_ASKPASS $SSH_ASKPASS

Antes de que funcione, deberás reiniciar o al menos matar y reiniciar el ssh-agent :

killall ssh-agent
ssh-add -c -t 1h
    
respondido por el Quinn Comendant 05.08.2015 - 22:11
0

Además de usar los diversos reemplazos para ssh-askpass, coloco este código en mi ~/.bashrc para garantizar que el entorno de lanzamiento esté siempre configurado correctamente cada vez que inicie un shell. Colocar esto en ~/.bash_profile no produjo resultados consistentes y este código se ejecuta muy rápidamente, por lo que ejecutarlo cada vez que se inicia un shell no es un problema.

Establecí DISPLAY aquí para evitar tener que agregarlo como una clave en /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist , y además evita tener que editar plists de stock. Verifico que la pantalla ya está configurada porque no quiero hacerlo a ciegas si ya está configurada por otra cosa, por ejemplo Xquartz.

if [[ "$OSTYPE" == darwin* ]]; then
    env_ssh_askpass="'/bin/launchctl getenv SSH_ASKPASS'"
    if [ "x${env_ssh_askpass}" != "x/opt/libexec/ssh-askpass" ]; then
            /bin/launchctl setenv SSH_ASKPASS /opt/libexec/ssh-askpass
            env_display="'/bin/launchctl getenv DISPLAY'"
            if [ "x${env_display}" == "x" ]; then
                    /bin/launchctl setenv DISPLAY bogon
            fi
            /usr/bin/killall -9 ssh-agent 2>&1 >/dev/null
    fi
fi
    
respondido por el Jason White 14.08.2016 - 01:33

Lea otras preguntas en las etiquetas