2009-12-28 12:08:48 +0000 2009-12-28 12:08:48 +0000
143
143

Come usare Mac OS X Keychain con le chiavi SSH?

Ho capito che da Mac OS X Leopard il Portachiavi supporta la memorizzazione delle chiavi SSH. Qualcuno potrebbe spiegare come dovrebbe funzionare questa funzione?

Ho alcune chiavi RSA che ho generato memorizzate nella mia directory ~/.ssh per accedere a vari server. Non ho impostato le passphrase su queste chiavi. Attualmente per accedere a questi server uso i seguenti comandi nel terminale:

eval `ssh-agent` ssh-add ~/.ssh/some\_key\_rsa ssh user@server

(ho scritto alcune funzioni di Bash per rendere questo più facile.)

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

Risposte (9)

255
255
255
2011-04-11 19:58:42 +0000

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

Aggiungete la passphrase ad ogni chiave ssh nel portachiavi: (l'opzione -k carica solo le semplici 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 saranno caricate automaticamente. Dovresti essere in grado di vedere le chiavi nell'app Keychain Access, così come dalla linea di comando tramite:

ssh-add -l
82
82
82
2016-12-12 18:17:44 +0000

A partire da macOS Sierra, ssh-agent non carica più automaticamente le chiavi ssh precedentemente caricate quando si accede al proprio account. Questo è intenzionale da parte di Apple, hanno voluto riallinearsi con l'implementazione mainstream di OpenSSH. [1]


Come spiegato qui , questo è il metodo raccomandato da macOS 10.12.2:

  1. Aggiungete le seguenti righe al vostro file ~/.ssh/config:

  2. Ogni chiave che aggiungi all’ssh-agent usando il comando ssh-add /path/to/your/private/key/id_rsa sarà automaticamente aggiunta al portachiavi, e dovrebbe essere caricata automaticamente al riavvio.


Il seguente è deprecato (tenuto per riferimento).

Per tornare al comportamento precedente, vorrai eseguire il comando ssh-add -A (che carica automaticamente tutte le chiavi ssh che hanno pass-phrase nel tuo portachiavi) quando fai il login. Per farlo, seguite questi passi:

  1. Per prima cosa, aggiungete tutte le chiavi che volete caricare automaticamente all’ssh-agent usando il comando ssh-add -K /absolute/path/to/your/private/key/id_rsa. L'argomento -K assicura che la passphrase della chiave sia aggiunta al portachiavi di macOS. Assicurati di usare il percorso assoluto della chiave. Usare un percorso relativo farà sì che lo script lanciato automaticamente non trovi la chiave.

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

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

  4. Dite a launchd di caricare il file plist che avete appena creato eseguendo: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

E dovresti essere a posto.

34
34
34
2017-01-05 18:53:54 +0000

C'è un modo più semplice della risposta di Ricardo per persistere la tua password tra sessioni/riavvii del tuo Mac con 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa Nota: cambia il percorso dove si trova la tua chiave id\rsa.
  2. ssh-add -A
  3. Crea (o modifica se esiste) il seguente file ~/.ssh/config:

Apple ha volutamente cambiato il comportamento di ssh-agent in macOS 10.12 Sierra per non caricare più automaticamente le precedenti chiavi SSH, come notato in questo OpenRadar , Twitter discussion , e Technical Note from Apple . La soluzione di cui sopra imiterà il vecchio comportamento di El Capitan e ricorderà la vostra password.

17
17
17
2009-12-28 17:37:32 +0000

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

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

Inoltre, l'intero scopo del portachiavi è quello di memorizzare le password delle tue chiavi ssh, ma tu dici di non avere frasi di passaggio impostate su quelle chiavi, quindi non sono sicuro di cosa ti aspetti dall'integrazione del portachiavi.

Infine, quando accedi per la prima volta, probabilmente non vedrai un processo ssh-agent. Quel processo verrà avviato automaticamente da launch services la prima volta che qualcosa cerca di leggere quel socket in /tmp.

10
10
10
2011-04-28 13:28:40 +0000

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

La [risposta di Jeff McCarrell][2] è corretta, tranne che il comando per aggiungere la frase di passaggio contiene un trattino al posto del trattino, cioè –K invece di -K, causando un messaggio del tipo –K: No such file or directory. Si dovrebbe leggere:

ssh-add -K [path/to/private SSH key]
6
6
6
2013-10-14 12:29:41 +0000

Ho avuto un problema simile mentre cercavo di fare il login usando 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: my mac -> remote mac -> git/ssh server
  • Mac OS X 10.8.5

Quando mi sono collegato a remote mac usando remote desktop, non ho avuto problemi. Tuttavia quando mi connettevo con SSH al mac remoto, mi veniva richiesta la passphrase ssh ogni volta. I seguenti passi mi hanno risolto il problema.

  1. security unlock-keychain La passphrase è memorizzata nel portachiavi di login. Questo la sblocca e permette a ssh-agent di accedervi.
  2. evalssh-agent -s`` Avvia ssh-agent per l'uso della shell. Otterrà la passphrase dal portachiavi e la userà per sbloccare la chiave privata ssh.
  3. Stabilisce la connessione ssh/git e fa il mio lavoro.
  4. evalssh-agent -k`` Uccidi lo ssh-agent in esecuzione.
  5. security lock-keychain Blocca di nuovo il portachiavi.
6
6
6
2009-12-28 12:55:13 +0000

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

Di solito dovrebbe mostrare una finestra di dialogo che ti chiede la password, se non è già memorizzata nel tuo portachiavi.

4
4
4
2014-03-26 09:45:49 +0000

Vedi anche:

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

… aggiungendo questa nota poiché sono stati richiesti maggiori dettagli: il comando “security” è in grado di importare chiavi (e altre cose) direttamente nei Keychain. La cosa bella è che, a differenza di ssh-add, si è in grado di specificare il portachiavi. Questo rende possibile importare direttamente nel Keychain del sistema (“man security” per imparare come)

1
1
1
2017-01-26 10:39:16 +0000

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

Quindi basta fare quanto segue:

echo “UseKeychain yes” >> ~/.ssh/config