Come posso aggiungere le chiavi SSH al file authorized_keys?


185

Ho un server Ubuntu su Amazon EC2, che utilizzo per lo sviluppo, e oggi ho stupidamente cancellato tutto dal mio ~/.ssh/authorized_keysfile. Fortunatamente ho un SSH aperto, quindi sono ancora connesso e posso riparare il file, ma quando provo a rimettere il mio file chiave, non funziona. Ricevo ancora l'autorizzazione negata dal server sul mio computer locale.

authorized_keysha i permessi 600. Ho provato ad aggiungere la mia chiave SSH con ssh-rsa e lasciare ssh-rsa spento. Ho anche provato a rendere la chiave SSH tutta una riga, ma non ha funzionato neanche.

C'è qualcos'altro che devo fare come ricaricare il file in qualche modo?


3
Anni dopo, questo -still- sembra rilevante e attivo; volevo solo fare un'osservazione, parlare di aver schivato un proiettile: "Per fortuna ho un SSH aperto, quindi sono ancora connesso [..]" - sheesh! ; dP
Nostromov

1
Questo post, che è stato modificato per il mio compleanno, mi ha salvato due mesi fa per il mio compleanno.
ytpillai,

Risposte:


198

Non si dovrebbe mai salvare il file con i suoi contenuti a partire -----BEGIN RSA PRIVATE KEY-----dal server, ovvero la chiave privata . Invece, è necessario inserire la chiave pubblica nel ~/.ssh/authorized_keysfile.

Questa chiave pubblica ha l' .pubestensione quando viene generata usando ssh-keygene il suo contenuto inizia con ssh-rsa AAAAB3. (Il formato binario è descritto nelle risposte a questa domanda ).

Le autorizzazioni di ~/.sshsul server dovrebbero essere 700. Il file ~/.ssh/authorized_keys(sul server) dovrebbe avere una modalità di 600. Le autorizzazioni della chiave (privata) sul lato client dovrebbero essere 600.

Se la chiave privata non è stata protetta con una password e la hai inserita sul server, ti consiglio di generarne una nuova:

ssh-keygen -t rsa

Puoi saltare questo se sei completamente sicuro che nessuno può recuperare la chiave privata cancellata dal server.

Se questo non aiuta, esegui le sshopzioni per maggiore verbosità:

ssh -vvv user@example.com

Sul lato server, è possibile rivedere i /var/log/auth.logdettagli.


1
Con i server Amazon EC2 tutto ciò che ottengo è la chiave privata (key.pem). Non ho una chiave pubblica da nessuna parte.
Dave Long,

3
@Dave Long: è necessario generare una nuova chiave utilizzando ssh-keygen -t rsae inserire il id_rsa.pubfile appena creato ~/.ssh/authorized_keyssul server. Vedi anche docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn

15
@DaveLong: è possibile generare la chiave pubblica dalla chiave privata in qualsiasi momento. Puoi farlo semplicemente con il seguente comando: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne,

5
@MorganBlackthorne Anche se è vero, consiglierei di generare le tue chiavi private invece di accettarne una da fonti remote. Non puoi essere sicuro che la chiave privata non sia trapelata.
Lekensteyn

2
@Gerrat Fixed².
Lekensteyn,

175

Un modo alternativo per installare la chiave pubblica nel computer remoto authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Alcuni vantaggi:

  • non richiede ssh-copy-idinstallazione.

  • garantisce che mkdirfunziona prima di tentare di accodare id_rsa.puba authorized_keys.


10
La tua risposta mi ha aiutato a farlo su più macchine remote senza pacchetti aggiuntivi, grazie.
nol

Ciò non garantisce che la directory "~ / .ssh" e il file "~ / .ssh / authorized_keys" verranno creati con le autorizzazioni corrette.
Nick,

1
@ Nick, ho avuto quel problema. Quindi forse uno deve prima verificare la loro esistenza, se manca crea correttamente con chmod (700 / cartella, 600 / file) e solo allora aggiungi? quindi forse non può essere una fodera?
AnneTheAgile,

7
@AnneTheAgile Penso che cambiare la mkdir -p ~/.sshparte della risposta data da @MariusButuc umask 077 && mkdir -p ~/.sshsia tutto ciò che devi fare per assicurarti che funzioni correttamente.
Nick,

1
ty @Nick! Ci proverò.
AnneTheAgile,

128

Se si dispone dell'autenticazione basata sull'accesso, utilizzare ssh-copy-idper aggiungere le chiavi pubbliche al server remoto.

ssh-copy-id user@host

1
Questo non sembra essere un comando valido su Mac, che è quello che è il mio computer client.
Dave Long,


13
su OSX è possibile installare con brew:brew install ssh-copy-id
phil

Su Macports, questo comando può essere installato usando sudo port install openssh +ssh_copy_id. Il +ssh_copy_idinstalla openssh con la variante ssh_copy_id.
Stefan Lasiewski,

6
Nota che le istruzioni su phildawson.tumblr.com ti chiedono di installare software non attendibile, come root. Questo è abbastanza pericoloso e un buon modo per essere hackerato, a meno che tu non sappia di poterti fidare dell'autore.
Stefan Lasiewski,

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

Il modo più semplice è copiare e incollare ...

Prima visualizza / copia i contenuti della tua chiave pubblica locale id_rsa.pubincluso l'inizio "ssh-rsa" fino a quando non termina con il tuo indirizzo email:

cat ~/.ssh/id_rsa.pub

Quindi modifica authorized_keyssul server e incolla il contenuto degli appunti sotto qualsiasi altra chiave in quel file:

nano ~/.ssh/authorized_keys

E salva Ctl+O, esci dal file Ctl+X, esci dalla sessione SSH exite prova ad accedere nuovamente per confermare che ha funzionato. Se non ha richiesto una password ha funzionato.


5

Ho pensato di poter contribuire a questo dato che si tratta in particolare di istanze AWS e tutte le risposte trattano il problema solo come un problema di Linux, come se fosse un componente hardware. La prima cosa che devi capire è che non dovresti mai, mai, non trattare le istanze EC2 come hardware. Questo creerà solo più lavoro per te Trattali come volatili. Questo è il più grande ostacolo che vedo le persone che hanno con AWS. Crea un AMI della tua istanza e inserisci la chiave di cui hai bisogno nella nuova istanza. cloud-init se ne occuperà per te. Più in dettaglio, è sufficiente utilizzare la chiave pubblica corretta quando si crea la nuova istanza dall'AMI dell'originale. Se, come nei commenti della risposta approvata, desideri generare la tua coppia di chiavi pub e pem, AWS ti offre la possibilità di caricare le tue chiavi pubbliche per l'uso in EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws


3

Dopo aver salvato la chiave pubblica, è necessario salvare la chiave privata in una directory e file sul PC. E nella sezione auth di ssh su putty dovresti puntare al file della chiave privata che hai salvato sul desktop. Funzionerà. Per me funziona.


1
Mi piacerebbe solo se Windows Console potesse aggiungere tutte le funzionalità ssh al suo interprete
Dennis

2

Prendi una shell sul computer remoto in cui vuoi inserire la chiave e quindi puoi eseguire questo one-liner per creare i file e le directory necessari, impostare le loro autorizzazioni e aggiungere la chiave al file. Ovviamente devi cambiare la KEYGOESHEREparte sotto e il commento dopo di essa.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

1

Ecco una variante in base alla quale potresti avere un elenco di nomi di file di chiavi pubbliche in un file di testo e anche il grosso batch di file di chiavi pubbliche si trova nella stessa directory.

Questa variazione può essere utile se fornissi un enorme elenco di file di chiavi pubbliche da importare :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
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.