it-swarm-eu.dev

Come usare Keychain per Mac OS X con chiavi SSH?

Capisco che dal momento che Mac OS X Leopard il portachiavi ha supportato l'archiviazione delle chiavi SSH. Qualcuno potrebbe spiegare come questa funzione dovrebbe funzionare.

Ho alcune chiavi RSA che ho generato memorizzate nella mia directory ~/.ssh per accedere a vari server. Non ho passphrase impostato su quelle chiavi. Attualmente per accedere a quei server, utilizzo i seguenti comandi nel Terminale:

 eval `ssh-agent` 
 ssh-add ~/.ssh/some_key_rsa 
 ssh user @ server 

(Ho scritto alcune funzioni di Bash per renderlo più facile).

C'è un modo migliore per farlo usando il portachiavi?

137
John Topley

Affinché funzioni, la variabile di ambiente $SSH_AUTH_SOCK deve essere indirizzata a /tmp/launch-xxxxxx/Listeners. Questo dovrebbe essere fatto automaticamente quando si accede. L'ascoltatore su quel socket parla il protocollo ssh-agent.

Gli script di bash stanno avviando il tuo agente ssh (scritto ssh-agent, non ssh_agent) e sovrascrivono il ssh-agent esistente che è impostato per te al login.

Inoltre, l'intero punto del portachiavi è quello di memorizzare le password per le chiavi ssh, ma tu dici che non hai passphrase impostate su quelle chiavi, quindi non sono sicuro di cosa ti aspetti dall'integrazione con il portachiavi.

Infine, al primo accesso, probabilmente non vedrai un processo ssh-agent. Quella procedura verrà avviata automaticamente dai servizi di avvio la prima volta che qualcosa tenta di leggere quel socket in /tmp.

16
Rudedog

A partire dalla versione Leopard di OS X, ssh-agent è più strettamente integrato con Keychain. È possibile memorizzare i passphrase di tutte le chiavi SSH in modo sicuro in Keychain, da cui ssh-agent leggerà le informazioni all'avvio. La linea di fondo è che è semplice proteggere le tue chiavi con passphrase, ma non devi mai digitare la passphrase per usarle! Ecco come:

Aggiungi la passphrase ad ogni chiave ssh al portachiavi: (l'opzione -k carica solo chiavi private, salta i certificati)

ssh-add -K [path/to/private SSH key]

(nota che è una K maiuscola)

Ogni volta che riavvii il tuo Mac, tutte le chiavi SSH nel tuo portachiavi verranno automaticamente caricate. Dovresti essere in grado di vedere le chiavi nell'app Accesso Portachiavi, così come dalla riga di comando tramite:

ssh-add -l
252
jeffmcc

A partire da macOS Sierra , ssh-agent non carica più automaticamente le chiavi ssh caricate in precedenza quando si accede al proprio account. Questo è intenzionale su parte Apple, volevano riallinearlo con il mainstream OpenSSH implementazione. [1]


Come spiegato here , questo è il metodo raccomandato poiché macOS 10.12.2 :

  1. Aggiungi le seguenti righe al tuo file ~/.ssh/config:

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Qualsiasi chiave aggiunta a ssh-agent usando il comando ssh-add /path/to/your/private/key/id_rsa verrà automaticamente aggiunta al portachiavi e dovrebbe essere caricata automaticamente al riavvio.


Quanto segue è deprecato (tenuto per riferimento).

Per tornare al comportamento precedente, dovresti eseguire il comando ssh-add -A (che carica automaticamente tutte le chiavi ssh che hanno pass-frasi sul tuo portachiavi) quando esegui l'accesso. Per farlo, procedi nel seguente modo:

  1. Per prima cosa, aggiungi tutte le chiavi che vuoi caricare automaticamente su ssh-agent usando il comando ssh-add -K /absolute/path/to/your/private/key/id_rsa. L'argomento -K assicura che la pass-frase chiave sia aggiunta a portachiavi di macOS . Assicurati di utilizzare il percorso assoluto della chiave. Utilizzando un percorso relativo, lo script avviato automaticamente non troverà la chiave.

  2. Assicurati che tutte le tue chiavi siano mostrate come aggiunte quando scrivi ssh-add -A.

  3. Crea un file chiamato com.yourusername.ssh-add.plist in ~/Library/LaunchAgents/ con il contenuto sottostante. I file Plist come questo sono usati da launchd per eseguire gli script quando si accede. [2][3]

    <?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>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. Dì a launchd di caricare il file plist che hai appena creato eseguendo: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

E dovresti essere tutto pronto.

76

C'è un modo più semplice di La risposta di Ricardo per mantenere la tua password tra sessioni/riavvii del tuo Mac che esegue 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa
    Nota: modificare il percorso in cui si trova la chiave id_rsa.
  2. ssh-add -A
  3. Crea (o modifica se esiste) il seguente file ~/.ssh/config:

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    Ora la password viene ricordata tra riavvii!

Apple ha volutamente modificato il comportamento di ssh-agent in macOS 10.12 Sierra per non caricare più automaticamente le chiavi SSH precedenti, come indicato in questo OpenRadar , Discussione su Twitter , e Nota tecnica di Apple . La soluzione sopra riprodurrà il vecchio comportamento di El Capitan e ricorderà la tua password.

32
ChrisJF

Nota: per macOS Sierra, fare riferimento alla più recente risposta di ChrisJF .

La [risposta di Jeff McCarrell] [2] è corretta, tranne per il fatto che il comando per aggiungere la pass phrase contiene un trattino invece di un trattino, cioè –K anziché -K, causando un messaggio all'effetto di –K: No such file or directory. Dovrebbe essere letto:

ssh-add -K [path/to/private SSH key]
9
simonair

Sospetto che tu non stia usando il comando ssh predefinito. Avete ssh installato tramite le porte? Prova which ssh per vedere quale comando ssh stai usando.

Di solito dovrebbe visualizzare una finestra di dialogo che richiede la tua password, se non è già presente nel tuo portachiavi.

6
Olly

Ho avuto un problema simile durante il tentativo di accesso utilizzando un client ssh cert. In questo caso specifico era per accedere a un repository git. Questa era la situazione:

  • La chiave è stata salvata in ~/.ssh/
  • La chiave privata ha una passphrase.
  • La passphrase è memorizzata nel portachiavi di login di OS X. ~/Library/Keychains/login.keychain
  • La connessione era la seguente: il mio mac -> mac -> git/ssh server remoto
  • Mac OS X 10.8.5

Quando mi sono collegato al Mac remoto utilizzando il desktop remoto, non ho avuto alcun problema. Tuttavia, quando mi collego con SSH al Mac remoto, mi è stata richiesta la passphrase di ssh ogni volta. I seguenti passaggi l'hanno risolto per me.

  1. security unlock-keychain La passphrase è memorizzata nel portachiavi di accesso. Questo lo sblocca e consente a ssh-agent di accedervi.
  2. eval `ssh-agent -s` Avvia ssh-agent per l'utilizzo di Shell. Otterrà la passphrase dal portachiavi e usarla per sbloccare la chiave ssh privata.
  3. Stabilisci la connessione ssh/git e fai il mio lavoro.
  4. eval `ssh-agent -k` Elimina il ssh-agent in esecuzione.
  5. security lock-keychain Blocca nuovamente il portachiavi.
6
orkoden

Guarda anche:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... aggiungendo questa nota come sono stati richiesti maggiori dettagli: il comando "sicurezza" è in grado di importare chiavi (e altre cose) direttamente in portachiavi. La cosa carina è che diversamente da ssh-add, puoi specificare il portachiavi. Ciò rende possibile importare direttamente nel sistema Keychain ("man security" per sapere come)

4
xaphod

La soluzione migliore e la soluzione prevista da Apple (da macOS 10.12.2) è descritta qui

Quindi, fai quanto segue:

echo "UseKeychain yes" >> ~/.ssh/config

1
Ben