GNU/Linux >> Linux Esercitazione >  >> Linux

Ssh:come eseguire automaticamente Ssh-add, senza una richiesta di password?

Voglio comunicare tra diversi computer sulla mia rete (Ethernet statico), tramite SSH. Per fare ciò devo eseguire ssh-add ogni volta che accedo su una macchina specifica, come posso farlo in modo che sia configurato una volta e non mi chieda la passphrase ogni volta che accedo o riavvio la mia macchina?

So che c'è un modo per aggiungere alcune righe a bash_profile file, ma devo comunque digitare la password ogni volta che riavvio/accedo a una macchina specifica.

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Risposta accettata:

Questo è un tipico esempio di compromesso tra sicurezza e convenienza. Fortunatamente ci sono un certo numero di opzioni. La soluzione più appropriata dipende dallo scenario di utilizzo e dal livello di sicurezza desiderato.

tasto ssh con passphrase, no ssh-agent

Ora è necessario inserire la passphrase ogni volta che si utilizza la chiave per l'autenticazione. Sebbene questa sia l'opzione migliore dal punto di vista della sicurezza, offre la peggiore usabilità. Ciò può anche portare alla scelta di una passphrase debole per ridurre l'onere di inserirla ripetutamente.

tasto ssh con passphrase, con ssh-agent

Aggiunta di quanto segue a ~/.bash_profile avvierà automaticamente ssh-agent e carica i tasti ssh all'accesso:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Ora la passphrase deve essere inserita ad ogni accesso. Anche se leggermente migliore dal punto di vista dell'usabilità, questo ha lo svantaggio che ssh-agent richiede la passphrase indipendentemente dal fatto che la chiave debba essere utilizzata o meno durante la sessione di accesso. Ogni nuovo accesso genera anche un distinto ssh-agent istanza che rimane in esecuzione con le chiavi aggiunte in memoria anche dopo il logout, a meno che non venga uccisa in modo esplicito.

Per uccidere ssh_agent al logout, aggiungi quanto segue a ~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

o quanto segue a ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

Creazione di più ssh-agent le istanze possono essere evitate creando un socket di comunicazione persistente con l'agente in una posizione fissa nel file system, come nella risposta di Collin Anderson. Questo è un miglioramento rispetto alla generazione di più istanze di agenti, tuttavia, a meno che non venga eliminata in modo esplicito, la chiave decrittografata rimane ancora in memoria dopo il logout.

Sui desktop, gli ssh-agents inclusi nell'ambiente desktop, come Gnome Keyring SSH Agent, possono essere un approccio migliore poiché in genere possono essere impostati per richiedere la passphrase la prima volta che la ssh-key viene utilizzata durante una sessione di accesso e salva in memoria la chiave privata decifrata fino al termine della sessione.

tasto ssh con passphrase, con ssh-ident

ssh-ident è un'utilità in grado di gestire ssh-agent per tuo conto e caricare le identità secondo necessità. Aggiunge le chiavi solo una volta quando sono necessarie, indipendentemente dal numero di terminali, sessioni ssh o login che richiedono l'accesso a un ssh-agent . Può anche aggiungere e utilizzare un agente diverso e un diverso set di chiavi a seconda dell'host a cui è connesso o della directory da cui viene richiamato ssh. Ciò consente di isolare le chiavi quando si utilizza l'inoltro dell'agente con host diversi. Consente inoltre di utilizzare più account su siti come GitHub.

Correlati:Php:imagecropauto — Ritaglia un'immagine automaticamente utilizzando una delle modalità disponibili

Per abilitare ssh-ident , installalo e aggiungi il seguente alias al tuo ~/bash_profile :

alias ssh='/path/to/ssh-ident'

tasto ssh con passphrase, con keychain

keychain è una piccola utility che gestisce ssh-agent per tuo conto e
consente l'ssh-agent per rimanere in esecuzione al termine della sessione di accesso. Negli accessi successivi, keychain si collegherà all'ssh-agent esistente esempio. In pratica, questo significa che la passphrase deve essere inserita solo durante il primo login dopo un riavvio. Negli accessi successivi, la chiave non crittografata dall'ssh-agent esistente viene utilizzata l'istanza. Questo può essere utile anche per consentire l'autenticazione RSA/DSA senza password in cron lavori senza chiavi ssh senza password.

Per abilitare il keychain , installalo e aggiungi qualcosa come il seguente a ~/.bash_profile :

eval `keychain --agents ssh --eval id_rsa`

Dal punto di vista della sicurezza, ssh-ident e keychain sono peggio di ssh-agent istanze limitate alla durata di una particolare sessione, ma offrono un elevato livello di praticità. Per migliorare la sicurezza del keychain , alcune persone aggiungono il --clear opzione al loro ~/.bash_profile invocazione del portachiavi. In questo modo le passphrase devono essere reinserite al login come sopra, ma cron i lavori continueranno ad avere accesso alle chiavi non crittografate anche dopo la disconnessione dell'utente. Il keychain la pagina wiki contiene ulteriori informazioni ed esempi.

tasto ssh senza passphrase

Dal punto di vista della sicurezza, questa è l'opzione peggiore poiché la chiave privata non è completamente protetta nel caso in cui venga esposta. Questo è, tuttavia, l'unico modo per assicurarsi che la passphrase non debba essere reinserita dopo un riavvio.

tasto ssh con passphrase, con ssh-agent , passando la passphrase a ssh-add da script

Anche se potrebbe sembrare un'idea semplice passare la passphrase a ssh-add da uno script, ad es. echo "passphrase\n" | ssh-add , non è così semplice come sembra ssh-add non legge la passphrase da stdin , ma apre /dev/tty direttamente per la lettura.

Questo può essere risolto con expect , uno strumento per automatizzare le applicazioni interattive. Di seguito è riportato un esempio di uno script che aggiunge una chiave ssh utilizzando una passphrase memorizzata nello script:

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact

Si noti che poiché la passphrase è memorizzata in chiaro nello script, dal punto di vista della sicurezza, questo non è certo meglio che avere una chiave ssh senza password. Se deve essere utilizzato questo approccio, è importante assicurarsi che expect lo script contenente la passphrase ha le autorizzazioni appropriate impostate, rendendolo leggibile, scrivibile ed eseguibile solo dal proprietario della chiave.


Linux
  1. MySQLdump senza password in cronjob

  2. Come eseguire SSH e SCP senza password da SSH2 a OpenSSH

  3. Come configurare Rsync con SSH su UNIX / Linux (rsync senza password)

  4. Come passare la password a su/sudo/ssh senza sovrascrivere il TTY?

  5. Come eseguire lo script come un altro utente senza password?

Come eseguire il comando Sudo senza password

Come eseguire comandi particolari senza password Sudo in Linux

Come eseguire comandi Sudo senza password

Come eseguire sudo comandi senza password

Come copiare in remoto file su SSH senza inserire una password

Come eseguire in remoto il comando ssh un comando sudo senza password