Come posso aggiungere in modo permanente un'identità per SSH?


37

Ho bisogno di correre ssh-add <key>ogni volta che devo ssh in un server web. C'è un modo per aggiungere l'ID in modo permanente, quindi non devo continuare ad aggiungere le identità su ogni accesso?

EDIT: la chiave è un file pem che ho scaricato da un servizio cloud.

Risposte:


40

Generare la chiave come di consueto:, ssh-keygenquindi posizionare la chiave sul server remoto con ssh-copy-id, che lo sincronizzerà con le chiavi accettate del server remoto.

ssh-keygen
ssh-copy-id user@host

Richiederà la password, quindi eseguirà tutti i passaggi necessari per collegare la .pubchiave al server SSH remoto.

Per impostazione predefinita, copierà tutte le chiavi .pub sul server remoto. Se hai appena creato la tua chiave con ssh-keygenallora questo non è un problema (perché ne hai solo una!). Tuttavia, se si dispone di più chiavi, è possibile copiare solo una chiave specifica con il -iflag.

ssh-copy-id -i ~.ssh/key_name.pub user@host

Sostituzione key_name.pubcon il nome della chiave.


4
Per qualcuno come me (o il richiedente della domanda) la cui unica esposizione a ssh lo sta usando per accedere a server ospitati su cloud in cui il servizio web crea la chiave e me la fornisce (nel mio caso, server AWS), questa risposta è difficile da capire senza fare alcune ricerche di fondo significative. Non l'ho mai usato ssh-keygeno ssh-copy-id, per esempio. D'altra parte, risposte come questa sono perfettamente chiare e utili per me, dato il mio livello di conoscenza. A te decidere se vuoi modificare la tua risposta in qualsiasi modo per aiutare le persone ignoranti come me. :)
Mark Amery,

La risposta presuppone che io voglia generare una nuova chiave. Cosa succede se desidero semplicemente registrare una chiave esistente con il portachiavi?
donquixote,

@donquixote: vedere la risposta di seguito dall'utente626052.
nulla101

7

Puoi generare una chiave ssh con il comando:

ssh-keygen

Quindi è possibile copiare la chiave sul server con:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Ora puoi accedere automaticamente al tuo server web


1
Per copiare la chiave sul server puoi semplicemente usare ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernameo ~/.ssh/id_rsa.pubrispettivamente. In realtà, se si utilizza il nome predefinito per il file chiave, non è nemmeno necessario specificarlo.
Carsten Thiel,

5

mettilo nel tuo ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 

3
Questa è l'unica risposta che risponde effettivamente alla domanda. Gli altri stanno solo aggiungendo la chiave pubblica predefinita a un singolo server di destinazione, il che è fastidioso se ne hai due + separati per diversi set di server.
nulla1018

3

Se la tua chiave è senza password e nominata come uno dei file che ssh proverà a cercare durante l'identificazione ( ~/.ssh/id_dsao ~/.ssh/id_rsa), non dovresti aggiungerla al tuo agente.

MA. Se c'è la minima possibilità che quei file vengano rubati, avresti permesso a chiunque di accedere ai server su cui stai usando questa identità. Insomma, arato.

IMHO, le chiavi private senza password sono una cattiva pratica e dovrebbero essere utilizzate solo in ambienti in cui ~/.ssh/authorized_keysè molto restrittivo.


1
ssh-agent può conservare la tua chiave privata decifrata mentre sei connesso. Se abilitato, il portachiavi gnome può persino usare la tua password di accesso. Oh, e ssh-copy-id può anche copiare la tua chiave pubblica sui server.
Frank

2

Scrivi uno script di shell corta che eseguirà ssh-add e quindi connetterà come il seguente:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Puoi quindi ssh nel tuo host con un solo comando.


1

Per AWS, scarica la chiave pem ed esegui:

ssh-add /path/to/pemfile.pem

Ha funzionato per me, Ubuntu 18.04. fonte , nient'altro era necessario.

NB : Tuttavia, è importante impostare le autorizzazioni su 400 prima di procedere.

chmod 400 /path/to/pemfile.pem

Altrimenti riceverai un errore:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
ATTENZIONE: FILE CHIAVE PRIVATO NON PROTETTO! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ Le autorizzazioni 0664 per "/home/toing_toing/blablabla.pem" sono troppo aperte. È necessario che i file della chiave privata NON siano accessibili ad altri. Questa chiave privata verrà ignorata.


0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 

-2

Stai parlando di Amazon Cloud? Nel tuo ~ / .bashrc, crea le variabili di ambiente:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

sì, parlo del cloud, ma questa è la coppia di chiavi per ssh nell'istanza e le variabili di ambiente sopra sono necessarie per usare gli strumenti api :)
theTuxRacer

Ok. Quindi genera una chiave RSA senza password: 'ssh-keygen -t rsa' e quindi concatena la chiave pubblica generata (~ / .ssh / id_dsa.pub) al file ~ / .ssh / authorized_keys del server remoto. Molti di loro hanno fornito un esempio per raggiungere questo obiettivo.
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.