È possibile modificare il percorso SSH_AUTH_SOCK?

0

Mi piacerebbe avere il socket ssh-agent nella mia home directory, ma attualmente è creato all'interno di /private/tmp .

Vedo che l'agente è gestito con launchctl e questo plist: /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist , ma non so come modificare questo file per avere il socket, ad esempio, a ~/.ssh-agent.sock .

    
posta GaretJax 19.03.2015 - 13:29
fonte

3 risposte

1

Ho finito col seguente plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.openbsd.ssh-agent</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/ssh-agent</string>
        <string>-l</string>
    </array>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <!--
                 <key>SecureSocketWithKey</key>
                 <string>SSH_AUTH_SOCK</string>
            -->
            <key>SockPathName</key>
            <string>/Users/myusername/.ssh-agent.sock</string>
            <key>SockPathMode</key>
            <integer>384</integer> <!-- 0600b8 in decimal -->
            <key>SockPathGroup</key>
            <integer>0</integer>
        </dict>
    </dict>
    <key>EnvironmentVariables</key>
    <dict>
        <key>SSH_AUTH_SOCK</key>
        <string>/Users/myusername/.ssh-agent.sock</string>
    </dict>
    <key>EnableTransactions</key>
    <true/>
</dict>
</plist>

L'unico svantaggio è la necessità di un nome utente hard coded. Se qualcuno sa come risolvere anche questo ...

Ho appena sovrascritto il file predefinito in /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist , quindi ho eseguito i seguenti comandi:

launchctl unload /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
launchctl load /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
launchctl start org.openbsd.ssh-agent
    
risposta data 19.03.2015 - 13:50
fonte
0

Finisco con uno script .bashrc:

# Predictable SSH authentication socket location.
SOCK="$HOME/.ssh/agent_sock"
AGENT_ENV="$HOME/.ssh/agent_env"
if ! ps -x | fgrep -v fgrep | fgrep -q $SOCK;
then
    rm -f $SOCK
    ssh-agent -a $SOCK > $AGENT_ENV
fi
eval $(cat $AGENT_ENV)

E sembra che questo non funzioni anche per la GUI. L'aggiornamento di plist è troppo doloroso su El Capitan (Riavvia per ripristinare e SIP disattiva - > riavvia - > modifica plist & test - > riavvia su ripristino e SIP abilita - > riavvia), quindi per coloro che sono OK per avere questo risolto solo per shell - questa è una soluzione funzionante.

    
risposta data 09.06.2016 - 23:44
fonte
0

Potresti farlo sostanzialmente in due modi possibili senza modificare i file plist:

  1. Se usi sempre bash nel Terminale e vuoi abilitarlo, imposta il percorso sul tuo socket globale in /etc/bashrc per tutti gli utenti:

    export SSH_AUTH_SOCK=${HOME}/.ssh-agent.sock
    
  2. Imposta la variabile SSH_AUTH_SOCK nello script .bashrc dell'utente. Come nel n. 1.

Quindi ogni volta che un utente accede con la riga di comando e ha eseguito bash, l'utente ha sempre il suo AUTH Socket impostato nella home directory. Potrebbe essere necessario farlo per altre shell in modo simile E devi sempre assicurarti che la directory dell'agente esista. Ovviamente non posso garantire che questo funzionerà anche con i client della GUI aka CyberDuck.

    
risposta data 19.03.2015 - 14:06
fonte

Leggi altre domande sui tag