ssh-askpass unter Mac OS 10.9 / Mavericks kaputt?

7

Unter Mac OS 10.7 und 10.8 (separate Computer) habe ich ein ssh-askpass-Skript verwendet, um die Verwendung von SSH-Schlüsseln zu überprüfen:

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

Dies scheint jedoch bei Mavericks / 10.9 nicht zu funktionieren?

Einfache SSH-Schlüssel funktionieren einwandfrei:

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

Aber mit -c funktioniert es nicht mehr ..

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 gehört root und hat + x. Es wird anscheinend nicht einmal ausgeführt (einfache Zeile "touch a-logfile" hinzugefügt, nie aufgerufen).

Irgendwelche Ideen oder Hinweise zum weiteren Debuggen?

Vielen Dank

jstrom
quelle

Antworten:

6

Problem gelöst! Wenn Sie Zweifel haben, lesen Sie die Quelle ...

ssh-agent ruft ssh-askpass nur auf, wenn die Variable DISPLAY env festgelegt ist. Höchstwahrscheinlich hat es bei früheren Installationen funktioniert, seit ich X11 installiert hatte. (Noch) nicht auf dieser Box.

Problemumgehung:

Patchen Sie die ssh-agent LaunchAgents-Datei:

--- 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>

Starten Sie dann Ihren Computer neu.

Oder laden Sie es mit Gewalt neu, jedoch ist SSH_AUTH_SOCK in allen neuen Terminalsitzungen ungültig:

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 ....

Problem gelöst!

Hinweis: Die ssh-agent plist-Datei wird wahrscheinlich beim Upgrade überschrieben. Dies könnte eine sauberere Methode sein, um sicherzustellen, dass DISPLAY eingestellt ist.

jstrom
quelle
1
Zum Schluss noch eine Erklärung zum eigentlichen Problem. In der Tat muss meine nach der Installation von X11 nicht mehr funktionieren. Danke für die Information! Sollte RTFM selbst haben ...
Jason Anderson
Vielen Dank! Unter OSX 10.9.5, der versucht, einen automatisierten Vagrant-Prozess über phpstorm auszuführen, schlägt der Prozess fehl, wenn 'NFS-freigegebene Ordner exportieren ... ==> Standard: Vorbereitung zum Bearbeiten von / etc / export. Administratorrechte sind erforderlich ... 'Fehler mit Fehler "no askpass" Die obige Optimierung scheint das Problem behoben zu haben.
Dman
0

Ich bin auf 10.9 und @ jstroms Lösung hat bei mir nicht funktioniert. Für mich wurde die DISPLAYVariable bereits gesetzt. Das Problem war ein fehlendes ssh-askpassProgramm:

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

Sie können dies beheben, indem Sie ein benutzerdefiniertes ssh-askpassProgramm wie jcs (erfordert CocoaDialog) oder markcarver verwenden .

Ich ziehe es vor, dieses Programm zu kopieren ~/bin/ssh-askpass. Dies erfordert die Angabe dieser Position in der SSH_ASKPASSVariablen. füge dies deinem ~ / .bash_profile hinzu:

export SSH_ASKPASS=~/bin/ssh-askpass

Möglicherweise müssen Sie diese Variable auch im Startkontext verfügbar machen:

launchctl setenv SSH_ASKPASS $SSH_ASKPASS

Bevor es funktioniert, müssen Sie Folgendes neu starten oder zumindest beenden und neu starten ssh-agent:

killall ssh-agent
ssh-add -c -t 1h
Quinn Comendant
quelle
Wie in meinem ersten Beitrag angegeben, wurde ssh-askpass von github.com/TimZehta/mac-ssh-confirm verwendet.
Jstrom
Ah ich sehe. Ich nahm an, dass Sie eine verwenden, die in OS X enthalten ist und die ich auf mysteriöse Weise nicht hatte. =)
Quinn Comendant
Soweit ich weiß, gibt es keinen Askpass gebündelt .. :)
Jstrom
0

Zusätzlich zu den verschiedenen Ersetzungen für ssh-askpass habe ich diesen Code in my eingefügt, ~/.bashrcum sicherzustellen, dass die Startumgebung bei jedem Start einer Shell immer richtig eingestellt ist. Das Einfügen ~/.bash_profileführte nicht zu konsistenten Ergebnissen, und dieser Code wird sehr schnell ausgeführt, sodass das Ausführen bei jedem Start einer Shell kein Problem darstellt.

Ich habe DISPLAYhier festgelegt, um zu vermeiden, dass es als Schlüssel hinzugefügt werden muss /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist, und um zu vermeiden, dass Bestandslisten bearbeitet werden müssen. Ich überprüfe, ob die Anzeige bereits eingestellt ist, weil ich sie nicht blind einstellen möchte, wenn sie bereits von etwas anderem eingestellt wurde, z. B. 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
Jason White
quelle