it-swarm-eu.dev

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

Come posso configurare SSH in modo da non dover digitare la mia password durante la connessione a un host?

146
Richard Hoskins

Genera una chiave SSH (se non ne hai uno)

Se usi GNOME, il seahorse application ("Password e chiavi di crittografia") può farlo per te: File -> Nuovo -> Chiave Shell sicura.

Se preferisci il terminale, esegui ssh-keygen -t <type> per generare una coppia di chiavi. I tipi di coppie di chiavi valide sono:

  • rsa: il valore predefinito
  • dsa: equivalente più o meno, ad eccezione delle 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 ai canali laterali e ai 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

Di nuovo, seahorse può farlo spesso per te - in My Personal Keys, fai clic con il tasto destro sulla chiave SSH e scegli Configura la chiave per la Shell sicura.

O, ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] nel terminale.

Oppure, completamente manuale passo-passo:

  1. Crea una directory (se non esiste già) chiamata .ssh nella directory home 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 tuo umask remoto sia più liberale del solito, rendi il file non scrivibile in gruppo: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Infine, in qualche modo copia (aggiungi) il contenuto della tua chiave pubblica (~/.ssh/id_rsa.pub) locale nel file ~/.ssh/authorized_keys remoto.

Carica la chiave nell'agente ssh

Se carichi la tua chiave privata in un ssh agent, manterrà la chiave decodificata in memoria. Vogliamo che questo eviti di reinserire la password ogni volta che Shell entra in un server.

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

Caricamento della chiave è una semplice questione di eseguire ssh-add e dargli la passphrase.

Se si utilizza GNOME, gnome-keyring-daemon di solito fornisce la stessa funzionalità dell'agente SSH di ssh-agent, quindi non dovrebbe essere necessario avviare nulla. GNOME caricherà e sbloccherà automaticamente la chiave anche al login.

Shell nel server remoto senza password

Se tutto è stato fatto correttamente, usare ssh [email protected] non ti richiederà una password. Se c'è qualcosa di sbagliato nell'agente e non nella chiave, ti verrà chiesto di digitare la passphrase per la chiave e non la password per l'account utente.

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 fai uso di questo.


Gli appunti:

  • Hai solo bisogno di una chiave SSHv2, dato che SSHv1 è molto insicuro e ora non utilizzato.
  • Hai solo bisogno di un solo tipo di chiave: RSA o DSA sono sufficienti. (ed25519 e ECDSA sono entrambi recenti e quindi non supportati ovunque).
  • Tutti questi passaggi sono gli stessi per entrambe le chiavi RSA e DSA. Se utilizzi DSA, utilizza id_dsa anziché id_rsa e ECDSA avrà id_ecdsa.
  • I server OpenSSH precedenti alla 3.0 usavano authorized_keys2 - ma è davvero improbabile che tu trovi qualcosa di più vecchio di 5.0 in uso.
  • Queste istruzioni si applicano solo a OpenSSH versione 3.0 e successive. lsh, ssh.com e altri (Unix e non) server SSH non sono inclusi in questo tutorial.

Esempi:

  • Copia della chiave pubblica su un host remoto:

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

Non hai specificato su quale Unix sei, su quale Unix ti stai collegando, quale Shell stai usando, quale variante SSH stai usando, ecc. Quindi alcuni di questi potrebbero aver bisogno di essere regolati leggermente; questo è basato su versioni ragionevolmente recenti di OpenSSH, che è usato su molte varianti di Unix.

Questo è tutto dal tuo sistema desktop locale.

ssh-keygen

Assicurati di utilizzare l'impostazione predefinita per il nome chiave. Ti suggerisco di do impostare una passphrase su quella chiave, altrimenti è un problema di sicurezza. "-t rsa" non sarebbe una cattiva idea, ma probabilmente non è necessaria.

ssh-copy-id [email protected]

Questo ti chiederà la password che useresti per accedere e configura le cose authorized_keys per te. (non c'è bisogno di farlo a mano)

Poi questo:

`ssh-agent`

o forse questo:

exec ssh-agent sh

o:

exec ssh-agent bash

Ciò avvierà un agente SSH in grado di contenere la chiave. Su molte varianti moderne di Unix, se hai effettuato il login graficamente, questo sarà già avvenuto. La prima variante (con i backtick) mette uno ssh-agent in background e imposta le variabili di ambiente per parlarci. I secondi due hanno l'agente che esegue una Shell per te, in modo che quando si esce da Shell, l'agente esca.

Molte varianti moderne di Unix avranno già un agente in esecuzione, specialmente se hai effettuato il login graficamente. Potresti provare "ps aux | grep ssh-agent" o "ps -ef | grep ssh-agent"; se qualcosa è già in esecuzione, usalo.

Quindi, finalmente:

ssh-add

Richiederà una passphrase; dagli quello che hai dato a ssh-keygen. Ci sono anche dei modi per farlo chiedere graficamente. E puoi inserire gli oggetti ssh-agent e ssh-add nei tuoi script di login (l'installazione è diversa a seconda della Shell che usi) per automatizzarla, ma alcune varianti di Unix (l'attuale Ubuntu Linux, per esempio) fanno la maggior parte automaticamente, quindi tutto quello che devi fare è creare una chiave e usare ssh-copy-id per configurarla sull'host remoto.

Ora, "ssh [email protected]" dovrebbe funzionare senza richiedere alcuna autenticazione. Dietro le quinte, sta usando una chiave che ssh-agent sta tenendo, e chiede all'agente di fare i trucchi magici per farlo.

22
freiheit

È possibile farlo anche in PuTTY su Windows.

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

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

PuTTY username entry

Successivamente accedi a Connection -> SSH -> Auth e cerca la ppk che hai fatto in PuttyGen:

PuTTY private key entry

Quindi torna alla pagina della sessione e salva la sessione caricata in precedenza.

Da una domanda molto simile su ServerFault , consiglierei di usare ssh-copy-id , che fa tutti i passi necessari per configurare le chiavi di autenticazione per voi:

ssh-copy-id è uno script che usa 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 home dell'utente remoto, ~/.ssh e ~/.ssh/authorized_keys per rimuovere la scrittura di gruppo (che altrimenti impedirebbe l'accesso, se il sshd remoto ha StrictModes impostato nella sua configurazione).

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

Tutto ciò che devi fare è semplicemente questo:

ssh-copy-id [email protected]

Digita la tua password una volta, e sei a posto!

3
Chris Bunch

A parte tutto ciò che è già stato detto su come impostare le chiavi ssh, raccomando Portachiavi come un ssh-agent console frontend che consente di gestirne una solo per processo di sistema invece che per accesso.

So che ci sono già strumenti GNOME e KDE che fanno lo stesso, ma se sei il console junkie type questo è ottimo (e può essere usato su molti sistemi Unix).

Per usarlo, aggiungi semplicemente quanto segue al tuo ~/.bashrc (simile per le 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
3
scetoaux

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

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
2
Genc Hosting

Ho scritto questo tutorial molto molto breve dopo essere stato davvero VERAMENTE frustrato con tutorial DAVVERO VERAMENTE molto 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 [email protected]:/tmp/ #type password

ssh [email protected] #type password

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

rm /tmp/id_rsa.pub
2
samthebest

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 si desidera immettere alcuna password, poiché si desidera chiamare ssh da uno script di Shell.

2
TheTXI
  1. Nell'host di connessione, esegui ssh-keygen. (Se ti dice che devi specificare un tipo, fai ssh-keygen -t rsa.) Quando ti chiede il percorso di un file, prendi il valore predefinito. Quando ti chiede una passphrase, premi invio per nessuna passphrase.
  2. cat ~/.ssh/id_rsa.pub (o qualunque sia il percorso del file predefinito in ssh-keygen, anche se dovresti avere un'installazione ssh really old per essere 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 ~/.ssh non esiste, slogin in qualche luogo, questo è il modo semplice e facile per farlo creare con le giuste autorizzazioni). Incolla il tuo blocco appunti (contenente il id_rsa.pub dell'altro host) in questo file.
1
chaos

Se vuoi fare tutto nel terminale in Linux:

Sull'host

cd ~/.ssh /

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

Gli elementi in {} sono opzioni, usa rsa o dsa e scegli la dimensione del 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 ssh. 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 example.Host.com # o il nome del tuo computer

Nome utente dell'utente

IdentityFile ~/.ssh/id_ArbitraryName

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

Spero che ti aiuti se ti imbatti nel problema di configurazione che viene omesso molto.

0
nerdwaller