2009-07-18 16:51:50 +0000 2009-07-18 16:51:50 +0000
155
155

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

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

Risposte (10)

167
167
167
2009-07-18 17:36:45 +0000

Genera una chiave SSH (se non ne hai una)

Se ti capita di usare GNOME, l'applicazione seahorse (“Passwords and Encryption Keys”) può farlo per te: File -> New -> Secure Shell Key.

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

  • rsa: il default
  • dsa: più o meno equivalente, tranne che per le chiavi limitate a 1024 bit
  • ecdsa: stessa sicurezza con chiavi più piccole, ma relativamente nuovo e piuttosto raro nel software SSH.
  • ed25519: alta sicurezza (più resistente agli attacchi del canale laterale e ai generatori di numeri casuali deboli). Generazione di firma molto veloce. Molto nuovo. Disponibile solo in OpenSSH >= 6.5 .

Il programma vi chiederà una passphrase e un percorso dove salvare la nuova chiave. Si raccomanda di usare il percorso predefinito suggerito perché tutti gli altri strumenti lo cercheranno lì.

Caricate la chiave pubblica sul server remoto

Di nuovo, seahorse può spesso farlo per voi - in My Personal Keys, cliccate con il destro sulla vostra chiave SSH e scegliete Configure key for secure shell.

Oppure, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host nel terminale.

Oppure, completamente manualmente passo dopo passo:

  1. Create una directory (se non esiste già) chiamata .ssh nella home directory dell'utente remoto sull'host remoto.
  2. In quella directory, creare un file chiamato authorized_keys (se non esiste già).
  3. Nel caso in cui l'utente remoto umask sia più liberale del solito, fate in modo che il file non sia group-writable: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Infine, in qualche modo copiate (appendete) il contenuto della vostra chiave pubblica locale (~/.ssh/id_rsa.pub) nel file remoto ~/.ssh/authorized_keys.

Caricare la chiave nell'agente ssh

Se caricate la vostra chiave privata in un agente ssh, esso terrà la chiave decrittata in memoria. Vogliamo questo per evitare di reinserire la password ogni volta che entriamo in un server.

Per prima cosa, l'agente deve essere avviato o il percorso di un socket di comunicazione lanciato deve essere caricato in una variabile. L'esecuzione di ssh-agent su un terminale genererà dei comandi per assegnare e impostare le variabili dell'agente. Questi comandi possono essere salvati in un file per essere utilizzati in un altro terminale. In alternativa, si potrebbero eseguire questi comandi e dimenticare di riutilizzare lo stesso agente in un altro terminale. es: eval $(ssh-agent).

Caricare la chiave è una semplice questione di eseguire ssh-add e dargli la pass phrase.

Se stai usando GNOME, gnome-keyring-daemon di solito fornisce la stessa funzionalità dell'agente SSH di ssh-agent, quindi non dovresti aver bisogno di avviare nulla. Anche GNOME caricherà e sbloccherà automaticamente la chiave al momento del login.

Shell nel server remoto senza password

Se tutto è stato fatto correttamente, usando ssh user@server non verrà richiesta la password. Se qualcosa è sbagliato con l'agente e non con la chiave, vi verrà chiesto di digitare la frase di accesso per la chiave, e non la password per l'account utente.

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


Note:

  • Hai bisogno solo di una chiave SSHv2, dato che SSHv1 è molto insicuro e ormai inutilizzato.
  • Hai anche bisogno di un solo tipo di chiave - o RSA o DSA è sufficiente. (ed25519 e ECDSA sono entrambi recenti e quindi non supportati ovunque).
  • Tutti questi passi sono gli stessi sia per le chiavi RSA che DSA. Se usi DSA, usa id_dsa invece di id_rsa, e ECDSA avrà id_ecdsa.
  • I server OpenSSH più vecchi della 3.0 usavano authorized_keys2 - ma è davvero improbabile che troverai qualcosa di più vecchio della 5.0 in uso.
  • Queste istruzioni valgono solo per OpenSSH versione 3.0 e successive. lsh, ssh.com, e altri server SSH (Unix e non) non sono inclusi in questo tutorial.

Esempi:

  • Copiare la chiave pubblica su un host remoto:

  • Salvare le variabili dell'agente per il riutilizzo (esempio elaborato) ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent

22
22
22
2009-07-18 17:28:34 +0000

Non hai specificato su quale Unix sei, a quale Unix ti stai connettendo, quale shell stai usando, quale variante di SSH stai usando, ecc. Quindi alcune di queste cose potrebbero aver bisogno di essere regolate 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 usare il default per il keyname. Vi suggerisco di fare impostare una passphrase su quella chiave, altrimenti è un problema di sicurezza. “-t rsa” non sarebbe una cattiva idea, ma probabilmente non è necessario.

ssh-copy-id username@server

Questo vi chiederà la password che userete per accedere, e imposterà la roba authorized\keys per voi. (non c'è bisogno di farlo a mano)

Poi, questo:

`ssh-agent`

o forse questo:

exec ssh-agent sh

oppure:

exec ssh-agent bash

Questo avvierà un agente SSH che può contenere la vostra chiave. Su molte varianti moderne di Unix, se avete fatto il login grafico, questo avrà già avuto luogo. La prima variante (con i trattini) mette un agente ssh in background e imposta le variabili d'ambiente per parlargli. Le seconde due hanno l'agente che esegue una shell per voi, in modo che quando uscite dalla shell, l'agente esce.

Molte varianti moderne di Unix avranno già un agente in esecuzione per voi, specialmente se vi siete loggati graficamente. Potreste provare “ps aux | grep ssh-agent” o “ps -ef | grep ssh-agent”; se qualcosa è già in esecuzione, usate quello.

Poi, finalmente:

ssh-add

Vi chiederà una passphrase; dategli quella che avete dato a ssh-keygen. C'è anche un modo per farlo chiedere graficamente. E potete mettere la roba di ssh-agent e ssh-add nei vostri script di login (la configurazione è diversa a seconda della shell che usate) per automatizzare questo, ma alcune varianti di Unix (l'attuale Ubuntu Linux, per esempio) fanno la maggior parte di questo automaticamente, così che tutto quello che dovete fare è creare una chiave e usare ssh-copy-id per impostarla sull'host remoto.

Ora, “ssh username@server” dovrebbe funzionare senza chiedere alcuna autenticazione. Dietro le quinte, sta usando una chiave che lo ssh-agent sta tenendo, e chiede all'agente di fare i magici trucchi di firma per lui.

11
11
11
2009-07-25 03:42:47 +0000

È possibile farlo anche in PuTTY su Windows.

Una volta che hai impostato la coppia di chiavi pubbliche/private (come mostrano altre risposte qui) lancia PuttyGen. Lì, carica la chiave privata esistente che hai già impostato, e poi salvala come chiave privata PuTTY (ppk).

Poi in PuTTY, basta cliccare sulla sessione salvata in cui vuoi fare l'accesso automatico e cliccare su Load. Da qui vai in Connection -> Data nel pannello di sinistra, e in “Auto-login username” scrivi il nome utente per quel server remoto:

Dopo di che vai in Connection -> SSH -> Auth, e cerca il ppk che hai fatto in PuttyGen:

Poi torna alla pagina delle sessioni e salva la sessione che hai caricato prima.

3
3
3
2009-07-18 17:39:21 +0000

Da una domanda molto simile su ServerFault , raccomanderei di usare ssh-copy-id , che fa tutti i passi coinvolti nell'impostazione delle chiavi di autenticazione per te:

ssh-copy-id è uno script che usa ssh per accedere a una macchina remota (presumibilmente usando una password di accesso, quindi l'autenticazione con password dovrebbe essere abilitata, a meno che non si sia fatto un uso intelligente di identità multiple)

Cambia anche i permessi della home 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 data l'opzione -i allora viene usato il file di identità (di default ~/.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 tua password una volta, e sei pronto a partire!

3
3
3
2009-07-18 17:57:35 +0000

A parte tutto quello che è già stato detto su come impostare le chiavi ssh, raccomando Keychain come frontend di console ssh-agent che permette di gestirne una sola per processo di sistema invece che per login.

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

Per usarlo, aggiungete semplicemente quanto segue al vostro ~/.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
2
2
2013-02-01 16:58:45 +0000

Ho scritto questo brevissimo tutorial dopo essere stato VERAMENTE frustrato da tutorial VERAMENTE 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
2
2
2009-07-18 16:55:59 +0000

http://linuxproblem.org/art\9.html

Il tuo obiettivo

Vuoi usare Linux e OpenSSH per automatizzare i tuoi compiti. Quindi avete bisogno di un login automatico dall'host A / utente a all'host B / utente b. Non volete inserire alcuna password, perché volete chiamare ssh da uno script di shell.

2
2
2
2012-12-02 23:11:47 +0000

Putty ha un'opzione -pw che vi permette di creare un collegamento sul desktop come questo:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
1
1
1
2009-07-18 17:06:33 +0000
  1. Sull'host che si connette, eseguite ssh-keygen. (Se ti dice che devi specificare un tipo, fai ssh-keygen -t rsa.) Quando ti chiede una posizione del file, prendi quella predefinita. Quando ti chiede una passphrase, premi enter per nessuna passphrase.
  2. cat ~/.ssh/id_rsa.pub (o qualunque fosse la posizione predefinita del file in ssh-keygen, anche se dovresti avere un'installazione di ssh molto vecchia perché sia diversa); copia l'output negli appunti.
  3. Accedere normalmente all'host di destinazione come l'account a cui ci si vuole connettere. Modifica il file ~/.ssh/authorized_keys (se ~/.ssh non esiste, slogin da qualche parte; questo è il modo semplice e facile per farlo creare con i giusti permessi). Incollate i vostri appunti (contenenti lo id_rsa.pub dell'altro host) in questo file.
0
0
0
2012-10-25 12:27:48 +0000

Se volete fare tutto nel terminale in Linux:

Sull'host

cd ~/.ssh/

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

Le voci nel {} sono opzioni, usa rsa o dsa e scegli la dimensione del bit (più grande è più sicuro)

Poi devi aggiungere i permessi ai file authorized\keys e authorized\keys2.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Poi scaricate il file id_AribtraryName sulla macchina da cui volete ssh. Se la casella di connessione è basata su unix, potrebbe essere necessario un file di configurazione (in Putty, qualcuno sopra ne ha parlato).

Sulla box di connessione

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

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

Nome utente

IdentityFile ~/.ssh/id_ArbitraryName

Il file di configurazione necessita di permessi 600. La cartella SSh ha bisogno di 700.

Spero che questo aiuti se vi imbattete nel problema della configurazione che viene omesso spesso.