La chiave ssh deve essere nominata id_rsa?

108

Ho riscontrato questo problema un paio di volte durante la creazione di build server con autenticazione con chiave.

Mi stavo chiedendo se qualcun altro ha esperienza di questo. Ho un paio di chiavi per il mio attuale utente che possono connettersi a macchine diverse. Diciamo machine1 e machine2. Ho incollato la mia chiave pubblica nel rispettivo file authorized_keys. Il primo che ho chiamato la prima chiave id_rsa e la seconda chiave bender.

Quando provo a connettermi a bender ottengo il seguente output con la mia connessione ssh verbosa

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Offre solo la chiave id_rsa, come puoi vedere sopra. È corretto? Se è così, perché? Come faccio a offrire più chiavi? So che è un problema che vedo a intermittenza, perché a casa ho più chiavi senza troppi problemi.

Gradirei anche una panoramica su come le chiavi pub e private interagiscono con il client e il server. Pensavo di avere un'idea abbastanza decente, ma a quanto pare mi manca qualcosa.

Per favore e grazie.

    
posta myusuf3 17.03.2011 - 16:37

3 risposte

134

Per impostazione predefinita, ssh cerca id_dsa e id_rsa file. Le chiavi non devono essere nominate in questo modo, puoi anche chiamarlo mykey o anche metterlo in una directory diversa. Tuttavia, se si esegue una di queste operazioni, è necessario fare riferimento esplicitamente alla chiave nel comando ssh in questo modo:

ssh [email protected] -i /path/to/mykey

Se un comando non accetta -i , ad es. sshfs , utilizza l'opzione IdentityFile :

sshfs -o IdentityFile=/path/to/mykey [email protected]:/path/on/remote /mountpoint

Come funziona

Quando generi una chiave, otterrai due file: id_rsa (chiave privata) e id_rsa.pub (chiave pubblica). Come suggeriscono i loro nomi, la chiave privata deve essere tenuta segreta e la chiave pubblica può essere pubblicata al pubblico.

L'autenticazione a chiave pubblica funziona con una chiave pubblica e privata. Sia il client che il server hanno le loro chiavi. Quando si installa openssh-server , le chiavi pubbliche e private del server vengono generate automaticamente. Per il cliente, dovrai farlo da solo.

Quando tu (client) ti connetti con un server, le chiavi pubbliche vengono scambiate. Riceverai i server uno e il server tuo. La prima volta che ricevi la chiave pubblica del server, ti verrà chiesto di accettarla. Se questa chiave pubblica cambia nel tempo, verrai avvisato perché sta accadendo un possibile attacco MITM (Man in the middle), intercettando il traffico tra il client e il server.

Il server controlla se sei autorizzato a connettersi (definito in /etc/ssh/sshd_config ) e se la tua chiave pubblica è elencata nel file ~/.ssh/authorized_keys . Possibili ragioni per cui la chiave pubblica è stata negata:

  • %codice%:
    • /etc/ssh/sshd_config o AllowUsers è specificato, ma l'utente del server non è elencato nell'elenco dei gruppi o degli utenti (predefinito non definito, nessuna restrizione per l'accesso di utenti o gruppi).
    • AllowGroups o DenyUsers è specificato e ti trovi nell'elenco utenti o gruppi.
    • Stai tentando di accedere come utente root, ma DenyGroups è impostato su PermitRootLogin (predefinito No ).
    • yes è impostato su PubkeyAuthentication (predefinito No ).
    • yes è impostato su un percorso diverso e le chiavi pubbliche non vengono aggiunte a quel file (predefinito AuthorizedKeysFile , relativo alla home directory)
  • .ssh/authorized_keys : la tua chiave pubblica non viene aggiunta in questo file (nota che questo file viene letto come utente root)

Utilizzo di più tasti

Non è raro usare più chiavi. Invece di eseguire ~/.ssh/authorized_keys , puoi utilizzare un file di configurazione, ssh [email protected] -i /path/to/identity_file .

Le impostazioni comuni sono IdentityFile (le chiavi) e la porta. La prossima configurazione controllerà "id_dsa" e "bender" solo quando ci si connette con ~/.ssh/config :

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

Se ometti ssh [email protected] , le impostazioni si applicano a tutte le connessioni SSH. Altre opzioni possono essere specificate per questa corrispondenza host, ad esempio Host yourhost , User youruser , ecc. Ciò consentirebbe di connettersi con la stenografia Port 2222 anziché ssh yourhost .

    
risposta data Lekensteyn 17.03.2011 - 16:58
30

Il mio metodo preferito consente di selezionare automaticamente la chiave privata

IdentityFile ~/.ssh/%l_%[email protected]%h_id_rsa

SSH sostituirà% l con il nome del computer locale,% r con il nome utente remoto e% h con l'host remoto, quindi se volessi connetterti dal mio computer chiamato foo a bar come utente, eseguo:

ssh bar

E ssh userebbe automaticamente:

~/.ssh/[email protected]_id_rsa

Dato che l'host locale è anche memorizzato, questo consente la directory home condivisa su NFS (chiave diversa per macchina!) o anche l'identificazione di quale macchina la chiave doveva essere su ...

    
risposta data Viperfang 19.02.2014 - 19:54
0

In considerazione del commento di StevenRoose che impiega più tempo per specificare molte chiavi e mi capita di giocare con un sacco di chiavi, vorrei suggerire la mia soluzione personale.

Creo un link simbolico alla chiave che voglio usare in quel momento, e poiché questo cambia solo raramente a seconda del progetto su cui sto lavorando, ne sono felice.

Qui ho collegato le mie chiavi per le macchine in esecuzione su virtualbox:

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

Si potrebbe anche aggiungere uno script molto veloce per passare a un altro set senza dover digitare manualmente il comando ln .

Ancora una volta, questa non è una soluzione solo per due chiavi, ma per un numero maggiore potrebbe essere praticabile.

    
risposta data ajhcasual 04.10.2013 - 16:43

Leggi altre domande sui tag