ssh-copy-id non funziona


19

Sto cercando di impostare un accesso SSH senza password su CentOS 5.4:

  1. Ho generato la chiave pubblica RSA sul client.
  2. ssh-copy-id dal client al server.
  3. Verificato ~ / .ssh / authorized_keys contiene la chiave client.

Il client ha ancora richiesto la password. Cosa mi sono perso?

Grazie.

EDIT: controllato ssh_config e permessi come consigliato. Queste sono le informazioni di debug dal client:

debug2: key: /home/saguna/.ssh/identity ((nil))
debug2: key: /home/saguna/.ssh/id_rsa (0x2b31921be9a0)
debug2: key: /home/saguna/.ssh/id_dsa ((nil))
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup gssapi-with-mic
debug3: remaining preferred: publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic
debug3: Trying to reverse map address 192.168.1.75.
debug1: Unspecified GSS failure.  Minor code may provide more information
Unknown code krb5 195

debug1: Unspecified GSS failure.  Minor code may provide more information
Unknown code krb5 195

debug1: Unspecified GSS failure.  Minor code may provide more information
Unknown code krb5 195

debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/saguna/.ssh/identity
debug3: no such identity: /home/saguna/.ssh/identity
debug1: Offering public key: /home/saguna/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Trying private key: /home/saguna/.ssh/id_dsa
debug3: no such identity: /home/saguna/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
saguna@192.168.1.75's password: 

Anch'io ho questo :(
Matt Joiner

Risposte:


19

9/10 volte è perché ~ / .ssh / authorized_keys non è nella modalità giusta.

chmod 600 ~/.ssh/authorized_keys

2
Cordiali saluti, ho creato un piccolo script su github.com/centic9/generate-and-send-ssh-key che esegue i passaggi necessari in una volta sola e garantisce inoltre tutte le autorizzazioni di file / directory che mi hanno sempre causato mal di testa ...
centic

5
Se questo non funziona per qualcuno, dovresti anche guardare la risposta di @ Gilles. In particolare, la home e le~/.ssh directory non possono essere scrivibili da nessun altro che l'utente.
ostrokach,

So che questo è vecchio, ma grazie mille a @centic. Ero sicuro che i miei permessi fossero corretti ma non mi sono mai preso la briga di controllare le directory $ HOME e .ssh /.
jdferreira,

Ha funzionato per me. Grazie!
Ivan Kovtun l'

12

Controlla in / etc / ssh / sshd_config per consentire l'autenticazione con una chiave. Dovresti avere qualcosa del genere e assicurarti che le righe non siano commentate:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

PS: non dimenticare di riavviare sshd dopo aver modificato il file (/etc/init.d/sshd restart)


Oltre alla risposta di Patkos Csaba, controlla le autorizzazioni della tua cartella ~ / .ssh locale e remota.

Nel mio caso, è AuthorizedKeysFilestato commentato e ho anche dovuto usare un percorso assoluto per authorized_keys.
Andrew,

Ottengo "Impossibile aprire una connessione al tuo agente di autenticazione". quando provo ssh-add
Manticore il

questa dovrebbe essere la risposta selezionata
Francisco Tapia

Forse non capisci i commenti. Le righe commentate mostrano i valori predefiniti. Non è necessario decommentarli se si desidera il valore predefinito. È necessario decommentare la proprietà solo se si desidera sovrascrivere il valore predefinito.
chiarimento

5

Ho scoperto che con il mio sistema il problema era che la directory utente (/ home / username) era dotata di un set di autorizzazioni errato. Era drwxr-x-w-e doveva essere drwxr-xr-x(con il permesso di scrittura solo per il proprietario). La soluzione era usare chmod:

sudo chmod 0755 /home/username

1
Yah! Ha funzionato per me. ssh mi stava dando una richiesta di password perché ho sbagliato le convinzioni.
chiarimento

4

Non sono un esperto qui, ma ho riscontrato anche questo problema, ecco i miei due centesimi oltre a tutti gli altri suggerimenti.

A volte ssh-copy-idcopia la chiave errata sul server remoto (può accadere se si dispone di più chiavi e / o si utilizzano nomi non predefiniti per i file delle chiavi) o l'agente di autenticazione non è configurato correttamente.

Ecco una citazione dalle pagine man :

Se viene fornita l'opzione -i, viene utilizzato il file di identità (il valore predefinito è ~ / .ssh / id_rsa.pub), indipendentemente dal fatto che ci siano chiavi nel tuo ssh-agent. Altrimenti, se questo: ssh-add -L fornisce qualsiasi output, lo utilizza preferibilmente al file di identità.

Quindi in pratica vuoi verificare che:

  • Il tuo agente di autenticazione del sistema (di solito ssh-agent) vede le chiavi che intendi usare (controlla l' ssh-add -Loutput)
    • Se non vedi la chiave desiderata, aggiungila usando ssh-add
  • La ssh-copy-idcopiato la stessa chiave per la macchina remota (solo accedere al server remoto utilizzando la password e controllare il contenuto di ~/.ssh/authorized_keys)
    • Se non vedi la chiave desiderata sul server remoto, puoi implicitamente dire ssh-copy-idquale chiave copiare:ssh-copy-id -i ~/.ssh/some_public_key

Spero possa aiutare.


1
L'hai inchiodato! Scorrendo il mio ssh-copy-id problema è :, DEFAULT_PUB_ID_FILE=$(ls -t ${HOME}/.ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)che per impostazione predefinita sarà la prima chiave alfabetica - nel mio caso avevo un id_boot2docker.pub(che apparentemente è il nome predefinito per roba boot2docker ssh). Sembra che ci siano un sacco di diverse implementazioni ssh-copy-id in giro; la mia è venuta brew install ssh-copy-id, che a sua volta è presa da openssh-portable. La mia pagina man menziona esplicitamente questo comportamento ...
Christian Ulbrich,

3

Il problema più comune sono le autorizzazioni non valide sul lato server. Controlla che nessuna delle tue home directory ~/.sshe ~/.ssh/authorized_keyssia scrivibile da chiunque tranne te (in particolare non devono essere scrivibili in gruppo).

Se questo non è il problema, esegui ssh -vvv servere guarda la vista della conversazione da parte del cliente. In particolare, verificare che il client stia provando la chiave con il server.


Grazie!!! Non capisco perché, ma la vostra home directory , ~/.sshe ~/.ssh/authorized_keysnon posso essere scrivibile da chiunque, ma voi.
ostrokach,

2

Oltre a tutto quanto sopra, si può sempre controllare il file di registro sshd:

/var/log/auth.log

1

Ho provato le altre correzioni ma ho scoperto che dovevo cambiare la directory home per non essere scrivibile da altri. La home directory era 777. L'ho cambiata in 755 e ha funzionato.


1
benvenuto @dulcana, cerca di impostare un login ssh passwrodless, in che modo cambiare le autorizzazioni su 755 potrebbe aiutare a risolvere il problema?
Francisco Tapia,

@FranciscoTapia perché sshd garantisce che altri utenti non possano aver creato il file autorizzato_keys in modo maligno, rifiutando l'accesso con la chiave ssh in cui un gruppo o altro può scrivere il file o uno dei loro genitori. Anche altre risposte hanno menzionato questo.
Ángel

0

nel mio caso / etc / ssh / sshd_config conteneva il seguente parametro:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys2

Ma ssh-copy-id ha creato un file con nome authorized_keys, quindi ho dovuto modificare la voce con il nuovo nome. maggiori informazioni su obsolete authorized_keys2


0

A complemento della risposta di Omer Dagan per il nuovo CentOS 7, utilizzare:

journalctl -f -u sshd

per guardare i registri sshd sul server.


-1

Il problema era che RSAAuthentication era disordinato in / etc / ssh / ssh_config

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.