Come posso configurare SSH in modo da non dover digitare la mia password quando mi connetto a un host?
~/.ssh/config
che è ora richiesto PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Come posso configurare SSH in modo da non dover digitare la mia password quando mi connetto a un host?
~/.ssh/config
che è ora richiesto PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Risposte:
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>
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ì.
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-host
nel terminal.
Oppure, completamente manualmente passo-passo:
.ssh
nella home directory dell'utente remoto sull'host remoto.authorized_keys
(se non esiste già).umask
è più liberale del solito, rendere il file non gruppo-scrivibile: chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
) nel ~/.ssh/authorized_keys
file remoto .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-add
e 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.
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.
id_dsa
invece di id_rsa
, e ECDSA avrà id_ecdsa
.authorized_keys2
- ma è davvero improbabile che troverai qualcosa di più vecchio di 5.0 in uso.lsh
, ssh.com
e altri server SSH (Unix e non) non sono inclusi in questa esercitazione.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
ssh-agent> ~ / .ssh / cross-terminal-agent . ~ / .Ssh / cross-terminal-agente
ssh-copy-id
che copia la chiave pubblica nell'host di destinazione e imposta automaticamente le autorizzazioni.
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
).
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.
È 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:
Dopodiché vai su Connection -> SSH -> Auth e cerca il ppk che hai creato in PuttyGen:
Quindi tornare alla pagina della sessione e salvare la sessione caricata in precedenza.
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!
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
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.
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
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.cat ~/.ssh/id_rsa.pub
(o qualunque sia la posizione del file predefinito in ssh-keygen
, anche se dovresti avere un'installazione davvero vecchia ssh
perché sia diversa); copia l'output negli appunti.~/.ssh/authorized_keys
(se ~/.ssh
non esiste, slogin
in qualche luogo; questo è il modo semplice e facile per crearlo con le giuste autorizzazioni). Incolla gli appunti (contenenti l' id_rsa.pub
uno dall'altro host) in questo file.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.