Come posso configurare l'accesso SSH senza password?

230

Voglio poter accedere a un telecomando tramite ssh senza dover inserire la password per tutto il tempo.

  • Come posso configurarlo?
  • È richiesto un comando diverso per eseguire una sessione senza password?
posta Oxwivi 04.06.2011 - 19:24

10 risposte

237

risposta

Esegui questi comandi:

ssh-keygen

Quindi dovrai copiare la nuova chiave per il tuo server :

ssh-copy-id [email protected]
## or if your server uses custom port no:
ssh-copy-id "[email protected] -p 1234"

Dopo che la chiave è stata copiata, ssh nella macchina normalmente:

ssh [email protected]

Ora puoi effettuare il login senza inserire una password dal particolare computer su cui hai eseguito i comandi.

Esempio

[email protected]:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

[email protected]:~$ ssh-copy-id [email protected]
[email protected]'s password: 
Now try logging into the machine, with "ssh '[email protected]'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Spiegazione

Questo presuppone che tu possa già connettersi al tuo server tramite SSH.

Dovrai generare un Keypair SSH che ti permetta di identificarti come te stesso senza usare una password. Se lo desideri, puoi scegliere di proteggere le chiavi con un passcode, ma questo può essere lasciato vuoto consentendo un accesso SSH totalmente privo di password.

  1. Per prima cosa crea il tuo SSH Keypair eseguendo ssh-keygen questo creerà un file id_rsa e id_rsa.pub . Il file pub è ciò che accade sui server, la chiave privata ( id_rsa ) è ciò che rimane con te ed è il modo in cui ti identifichi.
  2. Quindi copia la chiave pubblica sul tuo server con ssh-copy-id [email protected] sostituendo l'utente con il tuo utente e server remoto con il nome DNS o l'indirizzo IP della macchina. Richiederà la tua password SSH, la inserirà e se tutto va a buon fine sarai in grado di accedere alla macchina tramite ssh [email protected] senza bisogno di password.

Riferimenti

risposta data Rinzwind 04.06.2011 - 19:36
32

Scrivi i seguenti comandi:

  1. ssh-keygen

    Premere il tasto Invio fino a quando non viene visualizzato

  2. ssh-copy-id -i [email protected]_address

    (Richiederà una volta la password del sistema host)

  3. ssh [email protected]_address

Ora dovresti essere in grado di accedere senza alcuna password.

    
risposta data Ravindra 17.05.2013 - 10:45
21

Il modo in cui faccio questo è il seguente:

ssh-keygen -t rsa

(Quando viene richiesta una password, lasciala vuota)

Quindi: % Co_de%

(Ciò richiede che la cartella .ssh sia nella directory home sul nome host di destinazione, con il file authorized_keys in esso)

Ovviamente, sostituisci il nome utente con il nome utente desiderato e il nome host con il nome host o l'indirizzo IP desiderato

Dopodiché, solo SSH in quella casella, proprio come ti eri abituato.

    
risposta data kyentei 04.06.2011 - 20:22
18

Normalmente utilizzo sshpass per questo, installalo con sudo apt-get install sshpass e usalo in questo modo

sshpass -p 'password' ssh [email protected]_server
    
risposta data Bruno Pereira 06.12.2011 - 18:26
9

Questa soluzione è specifica per gli utenti che utilizzano Windows per ssh nelle loro macchine remote, comprese le immagini cloud su AWS Cloud e GCE Cloud

responsabilità

Recentemente utilizzata questa soluzione per l'accesso remoto a nuove immagini VM implementate su GCE.

Strumenti utilizzati:

  1. puttygen download puttygen
  2. winscp download winscp

Passaggi da eseguire:

  1. Genera una coppia di chiavi pubblica / privata usando puttygen.
  2. Carica la chiave pubblica sul tuo server in cloud o in remoto.

Come fare:

1. Genera una chiave / coppia o usa la chiave privata esistente

Se possiedi una chiave privata:

Apri puttygen , premi il pulsante di caricamento e seleziona il file della tua chiave privata ( *.pem ).

Se non possiedi una chiave privata:

  • Apri puttygen ,
  • Seleziona il tipo di chiave desiderata SSH2 DSA (puoi utilizzare RSA o DSA) nella sezione Parametri . È importante lasciare vuoto il campo della passphrase.
  • Premi genera e segui le istruzioni per generare una coppia di chiavi (pubblica / privata).

(dallafonte1,linkindicatodiseguito)

2.Creaunnuovofile'authorized_keys'(connotepad)

Copiaidatidellatuachiavepubblicadallasezione"Chiave pubblica per incollare nel file authorized_keys di OpenSSH" del Generatore di chiavi PuTTY e incolla i dati della chiave nel file authorized_keys .

Assicurati che ci sia solo una riga di testo in questo file.

3. Carica la chiave sul server Linux

  • Apri WinSCP,
  • Seleziona il protocollo del file SFTP e accedi con le tue credenziali ssh.
  • In caso di successo, viene visualizzata la struttura della directory home sul computer remoto.

Carica il file authorized_keys nella directory home sulla macchina remota.

4. Imposta le autorizzazioni appropriate

Crea la directory .ssh (se non esistente)

Copia authorized_keys file in .ssh directory.
(questo sostituirà qualsiasi file authorized_keys esistente, prendi nota di questo).

Se il file esiste, aggiungi semplicemente il contenuto di questo file al file esistente.

Esegui comandi per impostare le autorizzazioni:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

Ora sarai in grado di ssh nella macchina remota senza inserire le credenziali ogni volta.

Ulteriori letture:

risposta data devprashant 20.11.2015 - 10:07
7
% Bl0ck_qu0te%

link

    
risposta data Thufir 15.02.2015 - 02:10
4

Se crei una coppia di chiavi pubblica / pregna e accedi utilizzando la nostra nuova chiave pubblica appena creata, non dovrai digitare la tua password. A seconda della configurazione del tuo portachiavi e / o dell'agente ssh potresti dover proteggere la chiave con una passphrase.

Ecco uno dei tanti breve howto per te. È di fondamentale importanza per la sicurezza di questo metodo, che la chiave privata generata rimanga privata! Non dovresti mai condividerlo con nessuno o permetterne l'accesso a qualsiasi titolo.

Questo comando genera una chiave ragionevolmente forte in ~/.ssh/ :

ssh-keygen -b 4096

In ~/.ssh/ troverai la tua chiave pubblica come id_rsa.pub . Il suo contenuto deve essere aggiunto al file authorized_keys dei tuoi server trasportando tramite un supporto portatile (pen drive) o abilitando a breve l'autenticazione della password sul server, quindi utilizzando ssh-copy-id ~/.ssh/id_rsa.pub [email protected] e quindi disabilitandolo di nuovo.

Se scegli di proteggere la tua chiave con una passphrase (nel primo passaggio), puoi usare ssh-agent o il portachiavi di Ubuntu per proteggere quel pharse localmente in modo da non doverlo digitare tutto il tempo.

    
risposta data con-f-use 04.06.2011 - 19:32
3

Accesso remoto / copia senza fornire una password

Le applicazioni ssh e scp per accesso remoto e copia remota, rispettivamente, consentono di comunicare con un host remoto senza fornire una password. Ciò richiede che tu segua una procedura di autenticazione come quella descritta di seguito. Per client si intende la macchina su cui si è seduti e per server si intende la macchina a cui si desidera accedere senza fornire una password. I passaggi della procedura di autenticazione sono:

  1. Avvia ssh-keygen per generare chiavi private e pubbliche, a meno che non sia già stato fatto sulla tua macchina. Questi sono memorizzati in file in $HOME/.ssh .
  2. Aggiungi il contenuto del file della chiave pubblica al file $HOME/.ssh/authorized_keys o $HOME/.ssh/authorized_keys2 sul server.

Esistono tre diversi tipi di protocolli di autenticazione. Si specifica il tipo quando si esegue ssh-keygen:

  1. SSH versione 1 del protocollo, RSA1: questa è la scelta predefinita e genera l'identità dei file (chiave privata, dovrebbe prendere chmod 0700 per garantire che questo file non sia leggibile per altri ) e identity.pub (chiave pubblica).
  2. SSH versione 1, RSA : si ottiene eseguendo ssh-keygen -t rsa e restituisce file id_rsa (chiave privata) e id_rsa.pub (chiave pubblica)
  3. SSH versione 1 del protocollo, DSA : si ottiene eseguendo ssh-keygen -t dsa e restituisce i file id_dsa (chiave privata) e id_dsa.pub (chiave pubblica)

Quando si esegue ssh-keygen è possibile fare affidamento sulle risposte predefinite (implicando che non si fornisce una passphrase). Ciò rende l'intero set-up semplice, ma anche insicuro.

Puoi specificare il tipo di chiavi da utilizzare con un'opzione per ssh ; ssh -1 impone l'uso delle chiavi RSA1 (versione 1 del protocollo), mentre ssh -2 forza ssh per provare RSA o solo DSA (protocollo versione 2). Negli esempi qui sotto, generiamo e installiamo i tasti RSA1 e DSA sull'host remoto in modo da avere più flessibilità. Puoi creare un file di configurazione nella tua directory .ssh con la riga

Protocol 1,2

Questo rende ssh provare una connessione RSA1 (protocollo versione 1) prima di RSA / DSA (versione 2 del protocollo).

Utilizzo dei tasti RSA1

[email protected]   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

Utilizzo dei tasti DSA

[email protected]   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

Questo è tutto ciò che devi fare se non hai usato una passphrase durante la generazione delle chiavi. È possibile verificare la connessione eseguendo ssh $ remote e vedere se è possibile accedere senza fornire una password (potrebbe essere necessario utilizzare -1 o -2 come opzioni per ssh ). La procedura può, naturalmente, essere ripetuta per qualsiasi macchina a cui desideri accedere.

Se hai utilizzato una passphrase, devi eseguire il programma ssh-agent per avviare una shell speciale, seguita da ssh-add per registrare la tua chiave / passphrase combinazione con sshd . Vedi le pagine man di questi programmi per maggiori informazioni.

Uno script per automatizzare le connessioni prive di password: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 [email protected]
  exit
fi
remote="$1"  # 1st command-line argument is the [email protected] address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

copiato da: link

    
risposta data αғsнιη 14.09.2014 - 10:27
2

Per fare alcune aggiunte:

  • Mac di default non ha ssh-copy-id , dovrai installarlo da solo:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

trova altro qui: link

  • se hai fatto un port forwarding, il comando dovrebbe essere così:

    ssh-copy-id "[email protected] -p 2222"
    

nota che le virgolette sono necessarie.

    
risposta data samluthebrave 14.09.2013 - 14:14
1

Vorrei aggiungere una risposta per coloro che potrebbero scoprire di dover inserire la password, anche se hanno letto tutte le risposte qui perché hai impostato IdentitiesOnly come yes. E la risposta qui può farti risparmiare molto tempo per gestire più chiavi, essendo le chiavi per git o server.

Dopo aver generato la chiave e averla copiata sul server:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub [email protected]

Ho trovato che non ha funzionato.

Poi sono andato a controllare il file ~/.ssh/config sul client, l'ho visto in fondo:

Host *
IdentitiesOnly yes

Quindi aggiungo questo sopra:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

Posso accedere solo inserendo ssh somename .

Quindi puoi aggiungere più chiavi ssh usando i tuoi nomi preferiti, e devi solo aggiungere le impostazioni come le quattro righe precedenti al file di configurazione.

Host è il nome che desideri inserire quando colleghi il server in un secondo momento; l'hostname è l'ip del server; Utente è il nome utente che accedi al server; e il file di identità è il file in cui memorizzi la chiave che hai generato.

    
risposta data lerner 24.01.2018 - 10:08

Leggi altre domande sui tag