Il modo più semplice per copiare i tasti SSH su un'altra macchina?


342

Sono pigro a casa e utilizzo l'autenticazione con password per i miei computer di casa. Sono pronto per passare all'autenticazione basata su chiave. Ci sono molte opzioni sul web su come eseguire questa operazione, tra cui catturare e poi spostare la chiave, scansionare la chiave direttamente, ecc.

Sto cercando il modo più semplice e consigliato per copiare una chiave, spero che ci sia un wrapper di convenienza da qualche parte nel pacchetto ssh di Ubuntu?

Sono già a conoscenza di come chiudere gli accessi alle password .


Risposte:


463

Il ssh-copy-idcomando (nel pacchetto openssh-client e installato di default) fa esattamente questo:

ssh-copy-id user@hostname.example.com

copia la chiave pubblica dell'identità predefinita (utilizzare -i identity_fileper altre identità) sull'host remoto.

L'identità predefinita è la chiave ssh "standard". Si compone di due file (chiave pubblica e privata) nella vostra ~/.sshdirectory, normalmente chiamato identity, id_rsa, id_dsa, id_ecdsao id_ed25519(e lo stesso con .pub), a seconda del tipo di chiave. Se non hai creato più di una chiave ssh, non devi preoccuparti di specificare l'identità, ssh-copy-id la sceglierà automaticamente.

Nel caso in cui non si abbia un'identità, è possibile generarne uno con lo strumento ssh-keygen.

Inoltre, se il server utilizza una porta diversa da quella predefinita ( 22), utilizzare le virgolette in questo modo ( origine ):

ssh-copy-id "user@hostname.example.com -p <port-number>"

1
Qual è l'identità predefinita?
Oxwivi,

17
per diverse porte utilizzare questo:ssh-copy-id "user@host -p 6842"
jibon57

5
Cosa succede se il server remoto su cui stai copiando non consente le richieste di password ed è sostanzialmente bloccato, salvo per l'accesso a SSH?
Cyle,

10
Su Mac puoi fare brew install ssh-copy-ide quindi eseguire il comando.
Avishai,

1
@ MarcelStimberg, aggiorna la risposta per includere il profilo -i; le persone probabilmente hanno più di un tasto e li premono tutti, o devono cercare l'opzione -i nei commenti
Nick

129

Mi piace la risposta di Marcel. Non conoscevo questo comando. Ho sempre usato ciò che avevo trovato sul sito web Oracle :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Ho pensato di pubblicarlo ancora qui, perché è una buona illustrazione di ciò che può essere ottenuto nel codice della shell con la potenza di ssh. Ma usare ssh-copy-iddefinitivamente è un modo più sicuro per farlo correttamente!

Si noti che se la cartella .sshnon esiste già, il comando sopra fallirà. Inoltre, potrebbe essere meglio durante la creazione del file impostare un'autorizzazione minima possibile (sostanzialmente leggere / scrivere solo per il proprietario). Ecco un comando più avanzato:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

2
Questi comandi esatti funzionano anche da un Mac
Mihai P.

Dovrebbe funzionare con qualsiasi Unix con la maggior parte delle shell. Ho aggiornato il post con un comando aggiornato nel caso in cui la cartella .sshnon esistesse sul lato remoto.
Huygens,

1
Non catè necessario - è sufficiente un normale reindirizzamento di input, ad esempio< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig

@Huygens Grazie. Più utile ricordarlo, perché non è necessario installare nulla e può anche essere utile per eseguire comandi esterni, ad esempio per modificare le autorizzazioni sul lato server, come dimostrato nell'esempio avanzato.
Jonathan Komar,

2
Preferisco di gran lunga questo modo poiché ti consente di usare ssh verboso che è utile per capire perché le cose sono rotte. sshcopyid si è bloccato e non ha mai funzionato, questo è andato perfettamente.
Sirene,

31

Metodo grafico

  1. Apri ApplicazioniPassword e chiavi ▸ Le mie chiavi personali .
  2. Selezionare la chiave e quindi fare clic su RemotoConfigura chiave per Secure Shell .

Configurare il computer per la connessione SSH


Non ho "Password e chiavi di crittografia" nel mio menu.
Jorge Castro,

Quale versione di Ubuntu stai usando? In Ubuntu 10.04 LTS questo dovrebbe essere disponibile per impostazione predefinita.
ændrük,

10.10, appena aggiunto il tag. La risposta di Marcel è ciò che sto cercando, anche se +1 per la tua risposta orientata al desktop!
Jorge Castro,

4
Questo programma è seahorse.
Gilles,

1
Penso che questa applicazione sia nel menu Sistema-> Preferenze in 10.10 (non posso controllarlo adesso, sono il 10.04)
Huygens,

18

Su Ubuntu puoi recuperare le tue chiavi da Launchpad:

ssh-import-id [launchpad account name]

Dettagli :

  1. È necessario un account Launchpad, quindi accedi o crea un account
  2. Dopo aver effettuato l'accesso, fai clic sul pulsante accanto alle chiavi SSH:
  3. Incolla il contenuto del tuo file di chiave pubblica in quel campo (incluso il commento). Tale chiave è simile a:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Qui, ssh-rsaindica che la chiave è una chiave RSA, AAAAB3Nza .... UyDOFDqJpè la chiave effettiva ed lekensteynè il commento.

  4. Salvare la chiave premendo Importa chiave pubblica
  5. Se tutto è andato bene, la tua chiave ora dovrebbe essere elencata sotto le chiavi SSH:

Il pacchetto ssh-import-iddeve essere installato sul computer a cui è necessario accedere da remoto. Questo pacchetto viene installato insieme al openssh-serverpacchetto in quanto è un pacchetto consigliato per openssh-server. Dopo aver verificato che ssh-import-idsia stato installato sul computer client, eseguire:

ssh-import-id [launchpad account name]

Questo scaricherà la chiave pubblica dai server Launchpad su HTTPS che ti protegge dagli attacchi MITM.

Su Ubuntu Lucid e prima, puoi ottenere lo stesso risultato con:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

Il echocomando è necessario per ottenere una nuova riga aggiuntiva dopo la riga con il tasto SSH.


14

per porta personalizzata

ssh-copy-id -i "user@hostname.example.com -p2222"

-i passa i valori predefiniti a ~ / .ssh / id_rsa.pub, se vuoi un'altra chiave, inserisci il percorso della chiave dopo -i

ATTENZIONE: Se non hai scritto -i, copierà tutte le tue chiavi trovate in ~ / .ssh


1
Sei sicuro di questo AVVISO? "-i identity_file - Usa solo le chiavi contenute in identity_file (piuttosto che cercare identità tramite ssh-add (1) o nel default_ID_file). Se il nome file non termina in .pub, questo viene aggiunto. Se il nome file viene omesso, viene utilizzato il file default_ID_file. "
Yousha Aleayoub,

0

ssh-copy-idfa esattamente questo. Non sono sicuro del motivo per cui alcune delle altre risposte qui aggiungano informazioni inesatte. La guida mostra quanto segue:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Ho appena provato quanto segue sul client Ubuntu 18.04 con un server CentOS 7.6 e ha funzionato come un fascino. L'esempio mostra l'utilizzo di una porta personalizzata di 2222e la specifica di una chiave pubblica in~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld

Prima di eseguire il comando, ho effettivamente utilizzato l' -ninterruttore alla fine per eseguire una corsa a secco che ha confermato che il comando funzionerà come previsto. Una volta confermato, ho eseguito nuovamente il comando come sopra, senza l' -nopzione.

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.