Come posso salvare in modo permanente una chiave SSH protetta da password?


9

Sto usando Awesome Window Manager

Come posso aggiungere in modo permanente chiavi private con password?

Ispirato dalla risposta qui ho aggiunto le chiavi private in ~ / .ssh / config

Contenuti di ~ / .ssh / config:

IdentityFile 'private key full path'

Autorizzazioni di ~ / .ssh / config: 0700

Ma non funziona per me.

Se aggiungo manualmente la chiave in ogni sessione, funziona ma sto cercando un modo più elegante (non in .bashrc)

MODIFICA :

  • Utilizzo della versione classica di Gnome (senza effetti).

Dopo aver aggiunto la chiave SSH ssh-copy-ifall'host remoto, quando eseguo l'accesso ottengo il seguente prompt nel terminale (Terminale GNOME 3.0.1):

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • Utilizzando Awesome window manager v3.4.10. Avevo già gnome-keyring-dameonquindi ucciso l'altro pid ed eseguito gnome-keyring-daemon --start | grep SOCK(l'ho anche aggiunto in .profile) l'output (grep):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

Ho seguito gli stessi identici passaggi e allo stesso modo non ho alcuna finestra di dialogo ssh-add della GUI.

MODIFICA 2 :

Ho creato una nuova chiave protetta da password dalla macchina virtuale Ubuntu 11.10 sull'unità e ancora non riesco a ottenere alcuna richiesta di password.

EDIT 3 : sembra che questo non possa funzionare in Awesome window manager :( e possibilmente altro ..


1
Qual è il punto di aggiungere una chiave SSH protetta da password? Sconfigge lo scopo ...
MarkovCh1

3
@Syzygy Bene, digiti sempre le password di diversi servizi e app o stai utilizzando un portachiavi per sbloccare la password con la password di accesso?
pl1nk,

Altre idee / domande, per favore? Il periodo di grazia di Bounty scade DAVVERO :-)
ish,

@izx Ho controllato tutto ciò che hai menzionato e sono tutti come previsto. Come ho già detto nel mio aggiornamento, avevo usato anche Gnome. Devo presentare un bug?
pl1nk,

Potresti trovare alcuni indizi qui . Sembra che l'ordine in cui iniziano le cose sia importante, e anche per gnome-keyring-daemon arrivare al dbus è importante.
John S Gruber,

Risposte:


2

Se stai usando Unity o un gestore di sessioni che avvia gnome-keyring-daemon, puoi semplicemente usare Seahorse (Password e chiavi) per stabilire una chiave, definire a cosa serve, impostare una passphrase e distribuire la sua chiave pubblica sul computer che userai con ssh. Non sono necessari comandi del terminale.

Si crea la password tramite:

  1. selezionando File-> Nuovo e selezionare Secure Shell Key. Premi Continua.

  2. Digitare un nome descrittivo e selezionare Create and set up.

  3. Ti verrà richiesto di inserire una frase chiave due volte (la seconda volta per verificare di non averla inserita male la prima volta.

  4. Immettere il computer su cui deve essere utilizzata la chiave pubblica e il nome utente su quel computer per il quale verrà utilizzata la chiave. La chiave pubblica verrà copiata su quell'altro computer, richiedendo la tua password su quel computer, se necessario.

Ora la My Personal Keysscheda mostrerà la chiave.

Supponendo che gnome-keyring-daemon sia stato avviato correttamente quando si è effettuato l'accesso a Lightdm, e di nuovo dal gestore della sessione, quando si utilizza la chiave per la prima volta con ssh, verrà richiesto di inserire la frase chiave. In questa finestra di dialogo è possibile fornire la frase Detailschiave , selezionare il controllo e chiedere di sbloccare il portachiavi ogni volta che si effettua l'accesso, fornendo automaticamente questa chiave. stampaOK

Non è possibile che venga richiesto in questo modo se è disponibile un'altra chiave per l'accesso al computer remoto.

Al termine, la prima scheda Cavalluccio marino Passwordselencherà un "Sblocco immissione password" per il nome della chiave. Fai clic sul triangolo prima di " Password: Accedi" per vederlo.


Quindi questa funzionalità non funziona con Awesome WM. Vorrei continuare a utilizzare Awesome, quindi continuerò a utilizzare la mia soluzione alternativa.
Pl1nk,

19

Far persistere una chiave SSH protetta da password tra sessioni e riavvii

Questo è probabilmente quello che vuoi: l'immissione della chiave di accesso una volta la rende disponibile per sempre ogni volta che accedi. Funzionerà per la maggior parte degli utenti che utilizzano i desktop Unity o Gnome.

  • Quando ti connetti dopo aver aggiunto la chiave pubblica al server remoto, otterrai la finestra di dialogo ssh-add della GUI:

    inserisci qui la descrizione dell'immagine

  • Espandi i "Dettagli" facendo clic sul triangolo e otterrai quanto segue. L'impostazione predefinita è "blocca portachiavi quando esco", che richiede l'inserimento della password una volta per sessione:

    inserisci qui la descrizione dell'immagine

  • Modificalo in Sblocca automaticamente ... ogni volta che eseguo l'accesso , il che significa che funzionerà ogni volta che avrai effettuato l'accesso alla sessione - è "controllato" dalla tua password utente. Persisterà durante i riavvii.

    inserisci qui la descrizione dell'immagine

  • Immettere una volta la passphrase della chiave e il gioco è fatto: la chiave viene autenticata tramite l'accesso iniziale riuscito all'ambiente desktop.


Se stai usando AwesomeWM

Testato con una nuova installazione di AwesomeWM in un nuovo userid

  • Per impostazione predefinita, AwesomeWM utilizza ssh-agent:

    $ export | grep SSH
    declare -x SSH_AGENT_PID = "5479"
    dichiarare -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • Per far funzionare i passaggi precedenti, è necessario utilizzare gnome-keyring-daemoncome demone di autenticazione SSH, non ssh-agent. Quando accedi usando lightdm, viene avviato PAM gnome-keyring-daemonche proverà a sbloccare una chiave di accesso con la password di sblocco, ma devi aggiungere la tua configurazione per mantenerla in esecuzione e utilizzarla.

  • Aggiungi quanto segue alla fine del tuo ~/.xprofile:

      #! / Bin / bash
      eval $ (gnome-keyring-daemon --start)
      esporta SSH_AUTH_SOCK
      esporta GNOME_KEYRING_PID
      esporta GNOME_KEYRING_CONTROL
    

I comandi nel ~/.xprofilefile verranno eseguiti da xsession prima di avviare il fantastico gestore di finestre e lo legheranno al gnome-keyring-daemon --loginprocesso avviato da PAM attraverso le variabili di ambiente sopra riportate.

  • Esci di nuovo da lightdm e accedi di nuovo, e ora, quando lo fai ssh user@host, dovresti ottenere i popup di cui sopra - usali per decodificare le tue chiavi private in ~ / .ssh / e salvare le tue chiavi private nel portachiavi di login di gnome-keyring.

La soluzione generale per qualsiasi gestore di finestre / ambiente desktop

  • è usare gnome-keyring-daemoninvece di ssh-agent. Per questo, è necessario essere in esecuzione gnome-keyring-daemon e averlo inizializzato e farlo dopo l' ssh-agentavvio o non avviarlo ssh-agentaffatto.

  • ssh(attualmente ssh-add) decide quale agente di autenticazione chiamare in base al valore della SSH_AUTH_SOCKvariabile d'ambiente, che può essere verificato digitandoexport | grep SOCK

  • questo è il modulo SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130per ssh-agent (NON quello che vuoi poter salvare la tua chiave)

  • ma del modulo SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"per gnome-keyring-daemon (che vuoi)

  • quindi controlla il valore e verifica ps aux | grep keyringche gnome-keyring-daemon sia in esecuzione e, in tal caso, inizializzalo con i risultati dignome-keyring-daemon --start

  • puoi quindi controllare le identità salvate associate nella console digitando ssh-add -l- se mostra "nessun agente", hai fatto un errore nella configurazione di gnome-keyring-daemon.


Beh, non l'ho visto! Quale comando posso usare o ancora meglio quale comando chiama questa finestra di dialogo?
Pl1nk,

@izx quando si usa questo è necessario usare ssh-add?
John S Gruber,

@JohnSGruber No, finché sono presenti le chiavi private ~/.ssh, non è necessario utilizzarle ssh-add: la finestra di dialogo verrà visualizzata al primo utilizzo. Nota che questo funziona solo in Unity / Gnome - Ho scoperto in chat che l'OP sta usando AwesomeWM , dove non funziona!
Ish,

1
@ pl1nk: vedi la soluzione aggiornata per AwesomeWM verso la fine della risposta.
Ish,

@izx - Grazie per il tuo supporto generale, controlla la mia domanda aggiornata.
Plnnk,

2

La soluzione al tuo problema sta usando l'agente ssh. Devi solo sbloccare la password della tua chiave una volta, dopo che è stata conservata in memoria dall'agente e utilizzata automaticamente

  • Genera una coppia di chiavi privata / pubblica con ssh-keygen -t dsa
  • Copia la chiave pubblica sul computer remoto, di solito è ~ / .ssh / authorized_keys (usa ssh-copy-idper questo)
  • Esegui ssh-addprima di accedere al sistema remoto, questo richiederà la tua passphrase e la memorizzerà
  • Accedi al sistema remoto, nessuna password necessaria

ssh-agent è ben descritto su .net, ad esempio qui:

Un altro vantaggio di ssh-agent è che se accedi al sistema remoto con ssh -A user@domain.namete puoi ulteriormente ssh dal computer domain.name a un terzo computer contenente la tua chiave pubblica senza copiare ogni chiave privata sul computer domain.name (e mai vede la tua chiave privata, solo la sfida / risposta una tantum).


Come lo posso fare? Non è chiaro dalle istruzioni che hai inviato. Inoltre questo Ubuntu è legato?
pl1nk,

Ho modificato il mio post con istruzioni dettagliate
Floyd,

La tua soluzione memorizza la password per sessione, inoltre nel mio caso sembra che sia stato un conflitto con il portachiavi di gnome come puoi vedere nella mia risposta.
Plnnk,

@ pl1nk: quindi è necessario che la password sia archiviata in tutte le sessioni, vale a dire una sola volta per ogni avvio?
Ish,

sì, devi fornire la password una volta per sessione. Questa è l'idea alla base delle chiavi ssh protette da password, per fornire un altro livello di sicurezza oltre a poter accedere al file della chiave privata dopo il login.
Floyd,

-1

Puoi usare

ssh-add 'filename or fullpath'

ti verrà chiesta la passphrase se la tua chiave ne ha una

quindi è possibile connettersi senza password


1
Come ho già detto alla mia domanda, sto cercando un modo più elegante.
plnnk,

-2

Se vuoi lavorare con le chiavi private fai:

ssh-keygen -t rsa -N ''

Poi:

copia .ssh/id_rsa.pubsulla destinazione della macchina in .ssh/authorized_keysvia scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

Tutto fatto.

Connessione al computer remoto senza password:

ssh user@remote_machine

E non abbiamo richiesto la password.


Questo continuerà a chiedermi la password chiave ogni volta.
Plnnk,

1
Probabilmente perché quando esegui ssh-keygen -t rsa -N '', inserisci una password. Quindi, quando si esegue il comando sopra, non inserire una password, premere solo il tasto "INVIO".
Octávio Filipe Gonçalves,

Bene, vorrei avere le chiavi con password. Ho aggiornato la mia domanda
pl1nk

1
Ok, non capisco perché vuoi farlo con la password. Normalmente questo concetto viene utilizzato solo per stabilire connessioni con macchine remote in grado di riconoscere la macchina client senza autenticazione. Quindi, se non vuoi questo scenario, devi solo eseguire una normale connessione ssh. destra?
Octávio Filipe Gonçalves,

1
Dire alle persone di copiare la loro chiave pubblica tramite le chiavi autorizzate su una macchina remota è una forza un po 'bruta ... Molto meglio è usare il comando utente @ remotemachine ssh-copy-id, che sarà come una password per accedere la prima volta e poi APPEND non sovrascrive la chiave.
Floyd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.