Prova di fare l'autenticazione ssh con i file delle chiavi: il server ha rifiutato la nostra chiave


53

Sto provando a configurare l'autenticazione ssh con file chiave anziché nome utente / password. Il client è un box di Windows che esegue PuTTY e il server è un server Ubuntu 12.04 LTS.

Ho scaricato puttygen.exe e ho generato una coppia di chiavi. In /etc/ssh/sshd_configho questa linea:

AuthorizedKeysFile %h/.ssh/authorized_keys

e sul file della chiave pubblica del mio client dice questo:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my@email.address.com"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
AV1pKxs=my@email.address.com
---- END SSH2 PUBLIC KEY ----

Ho copiato la parte da "ssh-rsa AAA" a "my@email.address.com" e l'ho inserita nel file ~/.ssh/authorized_keyssul mio server (nella mia cartella home). In PuTTY in Connessione> SSH> Auth ho inserito il percorso della chiave privata generata sul mio client e salvato le impostazioni della sessione.

Ho riavviato il server SSH con

sudo service ssh restart

Ora se carico il profilo in PuTTY (ho verificato che la chiave privata è ancora in Connessione> SSH> Auth e che il percorso è corretto) ed eseguo il profilo, si dice

Server refused our key

Ho provato a mettere la chiave pubblica in un file nella directory ./ssh/authorized_keys/ ma non mi è stato di aiuto, quindi l'ho usata ./ssh/authorized_keyscome file , incollando la chiave in essa. Ho anche provato a generare una coppia di chiavi privata / pubblica sul server, inserendo la chiave pubblica ./ssh/authorized_filese caricando quella privata in PuTTY sul mio client. Il riavvio del server non ha aiutato neanche.

Ho scoperto che l'errore può essere risolto inserendo la chiave in un luogo esterno alla cartella principale dell'utente, ma è utile solo se la cartella principale è crittografata, cosa che non lo è.

Ho anche provato a generare una chiave a 4096 bit, pensando che forse 1024 era troppo corto.

Come posso farlo funzionare? Grazie!

MODIFICARE:

Ok, ha /var/log/auth.logdetto:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

Google mi dice che ~/.ssh/dovrebbe essere 700 e ~/.ssh/authorized_keysdovrebbe essere 600, quindi l'ho fatto. Ora /var/log/auth.logdice:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]

Risposte:


95

Ok, è stato risolto ma non vedo come sia diverso da quello che ho già provato.

Cosa ho fatto:

  • genera una coppia di chiavi con puttygen.exe (lunghezza: 1024 bit)
  • caricare la chiave privata nel profilo PuTTY
  • inserisci la chiave pubblica ~/.ssh/authorized_keys in una riga (deve iniziare con ssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • cambia in /etc/ssh/sshd_configmodo che contengaAuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

Per la risoluzione dei problemi fare # tail -f /var/log/auth.log.

Grazie per l'aiuto!


1
Hmm, quindi cosa è successo a sshd: error: key_read: uudecode AAAAB3Nquell'errore auth.log?
Alaa Ali,

Non ne ho idea, Alaa. Forse ho fatto un errore incollando la stringa di chiave precedente. Auth.log non riceve più voci ora e l'autenticazione basata su chiave funziona perfettamente. Il mio problema principale era che non ero veramente sicuro di quello che doveva essere fatto, rendendo il modo che molto più difficile. Quindi non so perché ma funziona. Grazie ancora per il tuo aiuto :)
Forkbeard,

Eccezionale!!! Mi gratto la testa da 2 giorni. Questa risposta salva la giornata !!
naka,

Il passaggio 3 è stato il trucco per me. Non ho inserito la chiave pubblica nel authorized_keysfile, ho appena incollato il mio mykey.pubfile nella ~/.sshcartella e ho pensato che l'avrebbe preso. Invece quello di cui avevo bisogno alla fine era eseguire questo o modificare e incollare sotto altre chiavi che potrebbero essere lì. cat mykey.pub >> authorized_keys. Sembra semplice ora, ma la lezione appresa è che tutte le chiavi pubbliche devono vivere authorized_keysnon solo nella ~/.ssh/directory. Qualcuno per favore avvisa se questa non è un'affermazione corretta.
timbrown

se i passaggi non sono di aiuto, controlla anche: 1. hai copiato la chiave pubblica PuTTY salvata in authorized_keys, non in OpenSSH 2. se hai copiato usando copia / incolla da PuTTYgen (cosa che dovresti fare), potresti aver diviso il chiave pubblica su più righe; dovrebbe essere una riga singola; assicurati di non aver aggiunto spazi iniziali o finali durante la copia grazie a r_hartman centos.org/forums/viewtopic.php?t=990
mvladk,

23

Ho appena riscontrato questo problema. Pur avendo impostato correttamente la configurazione come già menzionato in questo thread (permessi su authorized_keys ecc.), Risulta che avevo la chiave pubblica nel formato sbagliato. Era sotto forma di:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

Che non funzionava. Ma ha funzionato avendo nella forma:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME

14
Puoi usare ssh-keygen -i -f filenameofwindowsformpub.keyper trasformare la chiave pubblica nel formato compreso dal tuo server OpenSSH.
Nero,

Sì, ha funzionato per me! Deve essere in una sola riga. Non posso credere che fosse solo quello!
adelriosantiago,

1
Ciao kuraara, credo che le istruzioni di cui sopra di @ Black dovrebbero essere messe in risalto nella risposta.
ekerner

Posso aggiungere commenti al formato server OpenSSH? Per l'uomo è difficile dire quale computer rappresenti questa chiave.
user1700890

Quando seguo il suggerimento di @ Black, non c'è nessun UserName @ HOSTNAME alla fine della stringa. Non so se quella parte sia importante.
Arnoldbird,

9

il problema è che windows usa una nuova linea diversa da quella di linux, quindi quando si copia la chiave da windows a linux, c'è un \ n alla fine della riga che non si può vedere su linux nell'editor.

Se segui /var/log/auth.log e provi ad accedere, l'errore è simile a:

sshd: errore: key_read: uudecode AAAAB3N [....] == \ n

Se cambi la tua chiave su Windows in modo che sia in una singola riga senza una nuova riga alla fine e la copi su Linux, dovrebbe funzionare (ha fatto il trucco per me).


questo era il mio problema, ma non ho visto nulla in auth.log per suggerire che fosse il caso. frustrante ...
Anthony,

8

Ho dovuto cambiare i permessi nella home directory

chmod 700 ~

2
Questo ha funzionato anche per me (su AIX però).
stevepastelan,

Ha funzionato anche per me su CentOS
Jaywalker,

Ha lavorato per me su Redhat! L'accesso in scrittura di gruppo sembra essere il problema specifico. Funziona ancora per me se lascio le autorizzazioni di lettura del gruppo sul posto però: "chmod 740 ~".
Paul,

6

Ho dovuto modificare le autorizzazioni della directory ~ / .ssh da 770 a 700 e le autorizzazioni del file ~ / .ssh / authorized_keys da 660 a 600.

Per qualche motivo la rimozione delle autorizzazioni di gruppo ha risolto questo problema per me.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5

Il ~/.ssh/authorized_keysfile richiede che le chiavi siano tutte su una riga. Se l'hai aggiunto su più righe come nel tuo incolla sopra, prova a unire le linee.


Grazie, ha senso e ora capisco perché è un file, non una directory. Tuttavia non ha aiutato.
Forkbeard,

3
per chiunque possa essere confuso da ciò, ciò che intende è che ogni chiave stessa deve essere su una sola riga, ma chiavi diverse devono essere su linee diverse.
Anthony,

2

Ecco cosa ha funzionato per me:

In puttygen, dopo aver generato le chiavi, assicurarsi di copiare e incollare le informazioni dal campo superiore di andare nel file authorized_keys. Se salvi la tua chiave pubblica sul tuo computer client e poi la apri, il testo è diverso dal testo nella parte superiore dello puttygenschermo. Ancora una volta, assicurati di copiare e incollare il testo dalla parte superiore dello puttygenschermo (dopo aver creato le chiavi) nel file authorized_keys che dovrebbe trovarsi in ~/.ssh.


questo in realtà risolto il problema. non capisco perché se si fa clic sul tasto Salva la chiave pubblica perché non salva il formato corretto.
luky

1

Oltre a tutte le risposte sopra, assicurati di copiare e incollare la chiave puttygencorrettamente!

Se fai doppio clic sulla maggior parte della stringa di chiave per selezionarla, potresti non ottenere l'intera stringa, poiché la casella di testo divide le linee su alcuni caratteri, come +, in modo tale da non selezionare il testo dopo il +carattere ( che non puoi vedere perché la casella di testo è troppo piccola). Assicurati di selezionare manualmente l'intera stringa, dalla ssh-rsafine della casella di testo.


1

A volte può essere un problema associato all'avere la chiave pubblica su una riga, questo approccio sembra risolverlo

echo 'the content of the public key' > /root/.ssh/authorized_keys

1

per me il problema era che avevo creato ~/.ssh/authorized_keysusando root, quindi root posseduto. Ho dovuto chown sshuser:sshuser ~/.ssh/authorized_keysquindi iniziare a funzionare


1

Anch'io ho affrontato questo errore e l'ho risolto modificando le autorizzazioni del file authorized_keys in 600.

chmod 600 ~/.ssh/authorized_keys

1

L'errore comune è che le persone usano l'editor di testo (come Vim) e incollano il testo copiato prima di attivare "inserisci" (premi + i in Vim prima di incollarlo)


0

In effetti, ho cambiato authorized_keysil permesso in 644, quindi il problema è stato risolto.

chmod 644 ~/.ssh/authorized_keys

0

per eseguire il debug di ssh aperto è possibile utilizzare:

sudo `which sshd` -p 2020 -Dd

esegue sshd su un'altra porta 2020. esegue sshd come programma corrente, quindi l'output passa allo schermo. se chiuso è chiuso.

quindi prova a connetterti.

spiegazione:

  • `which sshd` - individua l'indirizzo sshd, prova a eseguire quale sshd vede cosa stampa. quando si usano le virgolette, viene eseguito e restituisce il risultato in posizione.
  • -p 2020: specifica la porta
  • -D - accedi al file
  • -d - registra sullo schermo

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm


Potresti espandere questa risposta? Cosa implicano gli argomenti? Cosa sta facendo il comando (per qualcuno che non ha esperienza)?
Zzzach ...

-1

Stavo creando i file .ssh e authorized_keys mentre eseguivo l'accesso come root, che ha dato le autorizzazioni sbagliate. Inoltre ha inserito tutti i file nella directory principale.

Cambiare la proprietà di quei file con l'utente che desideri non sarà una buona pratica, quindi ho ripercorso i miei passi e mi sono assicurato di essere loggato come l'utente con cui volevo utilizzare SSH e di aver creato di nuovo .ssh e authorized_keys.

Istruzioni per connettere Win7 al server Xubuntu 15.04: come creare chiavi SSH con Putty per connettersi a un VPS

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.