7 votes

ssh-askpass sur Mac OS 10.9/Mavericks cassé ?

Sur Mac OS 10.7 et 10.8 (ordinateurs séparés), j'ai utilisé un script ssh-askpass script pour me permettre de vérifier l'utilisation des clés SSH :

https://github.com/TimZehta/mac-ssh-confirm

Cependant, cela ne semble pas fonctionner sur Mavericks/10.9 ?

Les clés SSH simples fonctionnent 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

Mais avec -c, cela ne fonctionne plus

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 user@remotehost:

/usr/libexec/ssh-askpass appartient à Root et a +x. Il ne semble même pas être exécuté (ajout d'une simple ligne "touch a-logfile", jamais appelée).

Des idées ou des conseils sur la manière de poursuivre le débogage ?

Remerciements

6voto

jstrom Points 131

Problème résolu ! En cas de doute, lisez la source...

ssh-agent n'appellera pas ssh-askpass si la variable env DISPLAY n'est pas définie. Il est fort probable que cela ait fonctionné sur des installations antérieures, puisque j'avais installé X11. Pas sur cette machine (pour l'instant).

Solution de contournement :

Patch du fichier LaunchAgents de 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>

Redémarrez ensuite votre ordinateur.

Vous pouvez aussi le recharger de force, mais SSH_AUTH_SOCK sera invalide dans toutes les nouvelles sessions 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 ....

Problème résolu !

Note : le fichier plist de ssh-agent sera probablement écrasé lors de la mise à jour... Il pourrait y avoir des moyens plus propres de s'assurer que DISPLAY est activé.

0voto

Quinn Comendant Points 184

Je suis sur 10.9 et la solution de @jstrom n'a pas fonctionné pour moi. Pour moi, l'option DISPLAY était déjà définie. Le problème est dû à l'absence d'un ssh-askpass programme :

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

Vous pouvez remédier à ce problème en utilisant un ssh-askpass programme tel que de jcs (nécessite CocoaDialog) ou de markcarver .

Je préfère copier ce programme sur ~/bin/ssh-askpass . Pour ce faire, il faut spécifier cet emplacement dans le fichier SSH_ASKPASS ajoutez-la à votre ~/.bash_profile :

export SSH_ASKPASS=~/bin/ssh-askpass

Il se peut que vous deviez également rendre cette variable disponible dans le contexte de launchd :

launchctl setenv SSH_ASKPASS $SSH_ASKPASS

Avant que cela ne fonctionne, vous devrez redémarrer ou au moins tuer et redémarrer l'application ssh-agent :

killall ssh-agent
ssh-add -c -t 1h

0voto

Jason White Points 1

En plus d'utiliser les différents remplacements de ssh-askpass, j'ai mis ce code dans mon fichier ~/.bashrc pour s'assurer que l'environnement launchd est toujours correctement défini à chaque fois que je démarre un shell. En plaçant ceci dans ~/.bash_profile n'a pas donné de résultats cohérents et ce code s'exécute très rapidement, de sorte que l'exécuter à chaque fois qu'un shell démarre n'est pas un problème.

Je fixe DISPLAY pour éviter d'avoir à l'ajouter comme clé dans le fichier /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist De plus, cela évite d'avoir à modifier les listes de stock. Je vérifie que l'affichage est déjà défini parce que je ne veux pas le définir aveuglément s'il est déjà défini par quelque chose d'autre, par exemple 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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X