ssh-askpass su Mac OS 10.9 / Mavericks rotto?

7

Su Mac OS 10.7 e 10.8 (computer separati) Ho usato uno script ssh-askpass per permettermi di verificare l'uso delle chiavi SSH:

link

Tuttavia, questo non sembra funzionare su Mavericks / 10.9?

Le normali chiavi SSH funzionano bene:

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

Ma con -c, non funziona più ..

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 è di proprietà di root e ha + x. Non viene nemmeno eseguito sembra (ha aggiunto una semplice linea "touch a-logfile", mai chiamata).

Qualche idea o suggerimento su come eseguire il debug ulteriormente?

Grazie

    
posta jstrom 20.05.2014 - 19:08
fonte

3 risposte

6

Problema risolto! In caso di dubbi, leggi la fonte ...

ssh-agent non chiamerà ssh-askpass a meno che non sia impostata la variabile env DISPLAY. Molto probabilmente ha funzionato su installazioni precedenti, dal momento che avevo installato X11. Non su questa casella (ancora).

Soluzione:

Patch il file LaunchAgents 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>

Quindi riavvia il computer.

O ricaricalo con la forza, tuttavia SSH_AUTH_SOCK non sarà valido in tutte le nuove sessioni del terminale:

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

Nota: il file plist ssh-agent verrà probabilmente sovrascritto durante l'aggiornamento ... Potrebbe essere un modo più semplice per garantire che DISPLAY sia impostato.

    
risposta data 22.05.2014 - 10:03
fonte
0

Sono in 10.9 e la soluzione di @ jstrom non ha funzionato per me. Per me, la variabile DISPLAY era già impostata. Il problema era un programma ssh-askpass mancante:

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

Puoi risolvere questo problema utilizzando un programma personalizzato ssh-askpass come jcs's (richiede CocoaDialog) o markcarver's .

Preferisco copiare questo programma in ~/bin/ssh-askpass . Ciò richiede di specificare questa posizione nella variabile SSH_ASKPASS ; aggiungi questo al tuo ~ / .bash_profile:

export SSH_ASKPASS=~/bin/ssh-askpass

Potrebbe anche essere necessario rendere questa variabile disponibile nel contesto di launchd:

launchctl setenv SSH_ASKPASS $SSH_ASKPASS

Prima che funzioni, devi riavviare o almeno uccidere e riavviare ssh-agent :

killall ssh-agent
ssh-add -c -t 1h
    
risposta data 05.08.2015 - 22:11
fonte
0

Oltre a utilizzare le varie sostituzioni per ssh-askpass, inserisco questo codice nel mio ~/.bashrc per garantire che l'ambiente launchd sia sempre impostato correttamente ogni volta che avvio una shell. L'inserimento di questo valore in ~/.bash_profile non ha prodotto risultati coerenti e questo codice viene eseguito molto rapidamente, quindi eseguirlo ogni volta che si avvia una shell non è un problema.

Ho impostato DISPLAY qui per evitare di doverlo aggiungere come una chiave in /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist , in più evita di dover modificare gli elenchi titoli. Controllo che il display sia già impostato perché non voglio impostarlo alla cieca se è già impostato da qualcos'altro, ad esempio 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
    
risposta data 14.08.2016 - 01:33
fonte

Leggi altre domande sui tag