Come posso impostare SSH in modo da non dover digitare la mia password?


153

Come posso configurare SSH in modo da non dover digitare la mia password quando mi connetto a un host?


Si potrebbe obiettare se l'utilizzo di tali chiavi non richiede una password. Per evitare che chiunque ottenga la tua chiave privata possa effettivamente abusarne, puoi proteggere la chiave con una password di se stessa. Naturalmente, si può lasciare vuota quella password, ma ci sono molti casi in cui ciò non sarebbe raccomandato.
Arjan,

Sull'ultimo Cygwin con l'ultimo SSH, mi è stato richiesto di nuovo perché avevo bisogno di apportare una modifica al mio ~/.ssh/configche è ora richiesto PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
HDave

Risposte:


164

Genera una chiave SSH (se non ne hai una)

Se ti capita di usare GNOME, l' applicazione cavalluccio marino ("Password e chiavi di crittografia") può farlo per te: File -> Nuovo -> Secure Shell Key .

Se si preferisce il terminale, eseguire per generare una coppia di chiavi. I tipi di coppia di chiavi validi sono:ssh-keygen -t <type>

  • rsa: il valore predefinito
  • dsa: equivalente più o meno, tranne per le chiavi a 1024 bit
  • ecdsa: stessa sicurezza con chiavi più piccole, ma relativamente nuova e piuttosto rara nel software SSH.
  • ed25519: Alta sicurezza (più resistente agli attacchi dei canali laterali e generatori di numeri casuali deboli). Generazione di firme molto veloce. Molto nuovo. Disponibile solo in OpenSSH> = 6.5 .

Il programma ti chiederà una passphrase e una posizione in cui salvare la nuova chiave. Si consiglia di utilizzare il percorso predefinito suggerito perché tutti gli altri strumenti lo cercheranno lì.

Carica la chiave pubblica sul server remoto

Ancora una volta, l' ippocampo spesso può farlo per te: in Le mie chiavi personali , fai clic con il pulsante destro del mouse sulla chiave SSH e scegli Configura chiave per shell protetta .

Oppure, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-hostnel terminal.

Oppure, completamente manualmente passo-passo:

  1. Creare una directory (se non esiste già) denominata .sshnella home directory dell'utente remoto sull'host remoto.
  2. In quella directory, crea un file chiamato authorized_keys(se non esiste già).
  3. Nel caso in cui il telecomando umaskè più liberale del solito, rendere il file non gruppo-scrivibile: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Infine, in qualche modo copia (aggiungi) il contenuto della tua chiave pubblica locale ( ~/.ssh/id_rsa.pub) nel ~/.ssh/authorized_keysfile remoto .

Carica la chiave nell'agente ssh

Se carichi la tua chiave privata in un agente ssh , conterrà la chiave decifrata in memoria. Vogliamo questo per evitare di reinserire la password ogni volta che eseguiamo la shell in un server.

Innanzitutto, l'agente deve essere avviato o il percorso di un socket di comunicazione avviato deve essere caricato in una variabile. L'esecuzione di ssh-agent su un terminale genererà comandi per l'assegnazione e l'impostazione delle variabili dell'agent. Questi comandi possono essere salvati in un file per essere utilizzati in un altro terminale. In alternativa, è possibile eseguire questi comandi e dimenticare di riutilizzare lo stesso agente in un altro terminale. ad es eval $(ssh-agent). : .

Caricare la chiave è una semplice questione di esecuzione ssh-adde di assegnazione della passphrase.

Se stai usando GNOME, gnome-keyring-daemon di solito fornisce la stessa funzionalità di agente SSH di ssh-agent, quindi non dovresti aver bisogno di avviare nulla. GNOME caricherà e sbloccherà automaticamente anche la chiave all'accesso.

Shell nel server remoto senza password

Se tutto è stato eseguito correttamente, l'utilizzo non richiederà una password. Se c'è qualcosa che non va nell'agente e non nella chiave, ti verrà chiesto di digitare la passphrase per la chiave e non la password per l'account utente.ssh user@server

Tutto ciò che utilizza ssh per la comunicazione funzionerà senza immettere la password dell'account utente quando la chiave corretta viene caricata nell'agente. Programmi come scp , sftp e rsync fanno uso di questo.


Appunti:

  • Hai solo bisogno di una chiave SSHv2, poiché SSHv1 è molto insicuro e ora inutilizzato.
  • È inoltre necessario un solo tipo di chiave: RSA o DSA sono sufficienti. (ed25519 ed ECDSA sono entrambi recenti e quindi non supportati ovunque).
  • Tutti questi passaggi sono uguali per le chiavi RSA e DSA. Se usi DSA, usa id_dsainvece di id_rsa, e ECDSA avrà id_ecdsa.
  • Server OpenSSH più vecchi di 3.0 utilizzati authorized_keys2- ma è davvero improbabile che troverai qualcosa di più vecchio di 5.0 in uso.
  • Queste istruzioni si applicano solo a OpenSSH versione 3.0 e successive. lsh, ssh.come altri server SSH (Unix e non) non sono inclusi in questa esercitazione.

Esempi:

  • Copia della chiave pubblica su un host remoto:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this
    
    cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorized_keys '# o questo
    
  • Salvataggio delle variabili dell'agente per il riutilizzo (esempio elaborato)
    ssh-agent> ~ / .ssh / cross-terminal-agent
    . ~ / .Ssh / cross-terminal-agente
    

7
ah, devi dire "ssh-add {path-to-private-key-file}" e poi ti chiederà la tua passphrase. Per favore, rendilo più esplicito nel tuo post. Dovresti anche aggiungere "Quarto, esegui ssh". Parte del problema con la documentazione con questa roba è che sorvola passaggi apparentemente ovvi che NON sono ovvi per una persona nuova nel processo che non ha idea di cosa stia succedendo e di come questi programmi funzionino insieme.
Jason S,

1
Jason: ssh-add -l è per verificare se un agente è in esecuzione. ssh-add senza argomenti aggiungerà la chiave dalla posizione predefinita (che è ~ / .ssh / id_rsa). Comunque aggiornato.
Grawity,

4
c'è un comando ssh-copy-idche copia la chiave pubblica nell'host di destinazione e imposta automaticamente le autorizzazioni.
hasen

1
Bella risposta! Manca un po 'le autorizzazioni per i file dei file chiave: oggi ho avuto un problema con quello. Il file della chiave privata dovrebbe essere accessibile solo da me e il file della chiave pubblica deve essere scrivibile solo da me.
ripper234,

1
Una fodera: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address(basta sostituire username@server-ip-or-address).
totymedli,

22

Non hai specificato a quale Unix sei connesso, a quale Unix ti stai collegando, a quale shell stai usando, a quale variante SSH stai usando, ecc. Quindi potrebbe essere necessario modificare leggermente questo; questo si basa su versioni ragionevolmente recenti di OpenSSH, che viene utilizzato su molte varianti unix.

Questo è tutto dal tuo sistema desktop locale.

ssh-keygen

Assicurati di utilizzare l'impostazione predefinita per il nome chiave. Vi suggerisco di fare impostare una passphrase su quel tasto, altrimenti è un problema di sicurezza. "-t rsa" non sarebbe una cattiva idea, ma probabilmente non è necessario.

ssh-copy-id username@server

Ciò ti chiederà la password che utilizzeresti per accedere e configurerà le cose authorized_keys per te. (non è necessario farlo a mano)

Poi questo:

`ssh-agent`

o forse questo:

exec ssh-agent sh

o:

exec ssh-agent bash

Ciò avvierà un agente SSH che può contenere la chiave. Su molte moderne varianti Unix, se hai effettuato l'accesso graficamente, questo avrà già avuto luogo. La prima variante (con i backtick) mette in background un agente ssh e imposta le variabili di ambiente per parlarci. I secondi due hanno l'agente che esegue una shell per te, in modo che quando esci dalla shell, l'agente esce.

Molte moderne varianti Unix avranno già un agente in esecuzione per te, soprattutto se hai effettuato l'accesso graficamente. Potresti provare " ps aux | grep ssh-agent" o " ps -ef | grep ssh-agent"; se qualcosa è già in esecuzione, usalo.

Quindi, infine:

ssh-add

Chiederà una passphrase; dagli quello che hai dato a ssh-keygen. Ci sono anche modi per farlo chiedere graficamente. E puoi inserire roba ssh-agent e ssh-add nei tuoi script di login (l'installazione è diversa a seconda della shell che usi) per automatizzare questo, ma alcune varianti di Unix (ad esempio Ubuntu Linux, ad esempio) lo fanno automaticamente, quindi tutto quello che devi fare è creare una chiave e usare ssh-copy-id per configurarlo sull'host remoto.

Ora, " ssh username@server" dovrebbe funzionare senza richiedere alcuna autenticazione. Dietro le quinte, sta usando una chiave che l'agente ssh ha in mano, e chiede all'agente di fare i trucchi per la firma magica.


11

È possibile farlo anche in PuTTY su Windows.

Una volta che hai impostato la coppia di chiavi pubblica / privata (come mostrano altre risposte qui) esegui PuttyGen. Lì, carica la chiave privata esistente che hai già impostato, quindi salvala come chiave privata PuTTY (ppk).

Quindi in PuTTY, fai clic sulla sessione salvata a cui vuoi accedere automaticamente e fai clic su Carica. Da qui vai in Connessione -> Dati nel riquadro a sinistra e in "Nome utente con accesso automatico" digita il nome utente per quel server remoto:

Voce nome utente PuTTY

Dopodiché vai su Connection -> SSH -> Auth e cerca il ppk che hai creato in PuttyGen:

Immissione della chiave privata PuTTY

Quindi tornare alla pagina della sessione e salvare la sessione caricata in precedenza.


Il primo link immagine, "Voce nome utente PuTTY", sembra essere rotto.
Peter Mortensen,

2
PuTTY include la propria versione di ssh-agent; si chiama Pageant. Funziona nella barra delle applicazioni e contiene la chiave per te. Non è necessario eseguire ssh-agent, è sufficiente selezionare "Consenti inoltro agente" nelle opzioni di PuTTY nella sezione Auth e la connessione di Pageant verrà inoltrata all'estremità remota per rendere disponibile l'agente chiave.
Kevin Panko,

3

Da una domanda molto simile su ServerFault , ti consiglio di usare ssh-copy-id , che fa tutti i passaggi necessari per impostare le chiavi di autenticazione per te:

ssh-copy-id è uno script che utilizza ssh per accedere a una macchina remota (presumibilmente usando una password di accesso, quindi l'autenticazione della password dovrebbe essere abilitata, a meno che tu non abbia fatto un uso intelligente di più identità)

Cambia anche le autorizzazioni della casa dell'utente remoto, ~ / .ssh e ~ / .ssh / authorized_keys per rimuovere la scrivibilità del gruppo (che altrimenti ti impedirebbe di accedere, se lo sshd remoto ha StrictModes impostato nella sua configurazione).

Se viene fornita l'opzione -i, viene utilizzato il file di identità (il valore predefinito è ~ / .ssh / identity.pub), indipendentemente dal fatto che ci siano chiavi nel tuo ssh-agent.

Tutto quello che devi fare è semplicemente questo:

ssh-copy-id user@host

Digita la password una volta e sei a posto!


3

A parte tutto quanto è stato già detto su come impostare le chiavi ssh, raccomando Keychain come frontend della console ssh-agent che consente di gestirne uno solo per processo di sistema anziché per accesso.

So che ci sono già strumenti GNOME e KDE che fanno lo stesso, ma se sei un drogato di console questo è fantastico (e può essere usato sulla maggior parte dei sistemi Unix).

Per usarlo, aggiungi semplicemente quanto segue al tuo ~/.bashrc(simile per altre shell):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

2

http://linuxproblem.org/art_9.html

Il tuo obiettivo

Vuoi usare Linux e OpenSSH per automatizzare le tue attività. Pertanto è necessario un accesso automatico dall'host A / utente a all'host B / utente b. Non vuoi inserire alcuna password, perché vuoi chiamare ssh da uno script all'interno di una shell.


1
Il downvote non era mio, ma non mi dispiacerebbe che le persone cancellassero la loro risposta se avessero notato che qualcun altro aveva postato una risposta quasi simile qualche istante prima.
Arjan,

2
Arjan: Per la maggior parte sono d'accordo con te, ma quando i messaggi sono separati solo da alcuni secondi, non penso necessariamente che sia giusto punire la persona al 2 ° posto. Non sto dicendo che devi premiarli con l'upgrade, ma il downvoting dà l'impressione che la risposta sia sbagliata, anziché non in tempo
TheTXI,

2

Ho scritto questo tutorial molto breve dopo essere stato DAVVERO DAVVERO frustrato con i tutorial VERAMENTE DAVVERO lunghi perché è davvero così semplice :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2

Putty ha -pwun'opzione che ti consente di creare un collegamento sul desktop in questo modo:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

1
  1. Sull'host che si connette, eseguire ssh-keygen. (Se ti dice che devi specificare un tipo, fallo ssh-keygen -t rsa.) Quando ti chiede un percorso per il file, prendi il valore predefinito. Quando ti chiede una passphrase, premi invio per nessuna passphrase.
  2. cat ~/.ssh/id_rsa.pub(o qualunque sia la posizione del file predefinito in ssh-keygen, anche se dovresti avere un'installazione davvero vecchia sshperché sia ​​diversa); copia l'output negli appunti.
  3. Accedi normalmente all'host di destinazione come account a cui desideri connetterti. Modifica il file ~/.ssh/authorized_keys(se ~/.sshnon esiste, sloginin qualche luogo; questo è il modo semplice e facile per crearlo con le giuste autorizzazioni). Incolla gli appunti (contenenti l' id_rsa.pubuno dall'altro host) in questo file.

3
-1 per aver suggerito di non aggiungere passphrase. Senza una passphrase, chiunque legga il file può ora rappresentare l'utente legittimo.
bortzmeyer,

2
Innanzitutto, ha chiesto di non dover digitare la sua password; Non pensavo davvero che dover digitare una passphrase invece della sua password sarebbe stato un miglioramento. Secondo, ti sbagli; ecco perché c'è una chiave pubblica e una chiave privata, quindi la chiave pubblica può essere disponibile nel mondo.
caos,

La password in questione viene digitata durante la generazione della chiave, non tutte le volte che ci si connette. Corretta?
Richard Hoskins,

No. Le chiavi generate con una passphrase richiedono l'immissione della passphrase ogni volta che si utilizza la chiave.
caos,

2
Sbagliato. Con ssh-agent (vedi la risposta accettata), digiti la password una sola volta per sessione.
bortzmeyer,

0

Se vuoi fare tutto nel terminale in Linux:

Sull'host

cd ~ / .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "testo di commento se si desidera" -f id_ArbitraryName

Gli elementi in {} sono opzioni, usa rsa o dsa e scegli la dimensione dei bit (più grande è più sicuro)

Quindi è necessario aggiungere le autorizzazioni ai file authorized_keys e authorized_keys2.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Quindi scaricare il file id_AribtraryName nella casella da cui si desidera eseguire l'shsh. Se la casella di connessione è basata su unix, potrebbe essere necessario un file di configurazione (in putty, qualcuno sopra lo ha coperto).

Sulla scatola di connessione

Nel tuo file di configurazione - vim ~ / .ssh / config

Host esempio.host.com # o il nome del tuo computer

Nome utente utente

IdentityFile ~ / .ssh / id_ArbitraryName

Il file di configurazione richiede autorizzazioni di 600. La cartella SSh richiede 700.

Spero che ti aiuti se riscontri il problema di configurazione che viene omesso molto.

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.