SSH Autorized Keys Esempio di utilizzo

SSH Autorized Keys Esempio di utilizzo

SSH (Shell Shell) è un protocollo utilizzato per sistemi di accesso (crittografati) in remoto e in modo sicuro. Il server SSH viene eseguito sulla macchina remota e il client SSH sul computer di lavoro. La comunicazione tra client e server è tipica tramite la riga di comando. Ora, esistono diversi modi per autenticazione della connessione: autenticazione password, autenticazione basata su chiave pubblica/privata (utilizzando il file autorizzato_key) e autenticazione basata su host (usando il file noto_host).

  1. Nel metodo di autenticazione basato su password, è necessaria una password per l'accesso. Le password possono essere lunghe e noiose da ricordare; Tuttavia, peggio ancora, possono essere rafforzati (hackerati)! I semplici script di Python possono bruteformare anche le peggiori delle password e, come tali, rappresentano un rischio per la sicurezza.
  2. Nell'autenticazione basata sulla chiave pubblica/privata, non è necessaria alcuna password per l'accesso (accesso senza password). In effetti, l'autenticazione basata sulla chiave è più sicura dell'autenticazione della password perché non è necessario digitare una password. In tali circostanze, il server verifica semplicemente di avere una chiave privata! Questa chiave privata è un file e quindi può essere copiata (rischio di sicurezza); Tuttavia, è molto più forte e più lungo di una password di 8 caratteri. Inoltre, il file autorizzato_keys viene utilizzato per autenticare gli utenti dal server.
  3. Nel metodo di autenticazione basato su host noto, il file host noto contiene gli host che possono connettersi. Il file noto_hosts viene utilizzato per autenticare i server dagli utenti.

In questo tutorial, esamineremo come impostare l'autenticazione pubblica/privata basata sulla chiave e daremo un'occhiata al file autorizzato_keys e ai suoi usi.

Impostazione dell'autenticazione basata su chiavi

Quando si impostano sistemi complicati come questi, dobbiamo assicurarci che i file di configurazione siano appropriatamente configurati! In caso contrario, l'intero processo non funzionerà! Ora, ci sono due sistemi qui: il client e il server. IL /etc/ssh/sshd_config Sul server sul server fare il regigibile e configurarli come segue:

Per altirootlogin Sì
Passwordautenticazione Sì
ChallengeresesAuthentication n

Successivamente, dobbiamo generi chiavi pubbliche e private. Per generare le chiavi, eseguire (sulla macchina client):

ssh-keygen

Quando esegui SSH-Keygen, ti verranno spinti con alcune domande. La prima domanda sarà la posizione in cui si desidera salvare le chiavi. Se lasci questo vuoto, lo salverà nella cartella predefinita. Nel mio caso, questo è il/home/client/.SSH/ID_RSA, dove id_RSA è la chiave privata effettiva e il .ssh è la cartella. Successivamente, ti verrà richiesto di inserire una passphrase. Non devi inserire una passphrase, ma questo aggiunge un altro livello di sicurezza. La passphrase viene utilizzata per crittografare la chiave privata.

Questo creerà una chiave pubblica e una chiave privata.

~/.SSH/ID_RSA (chiave privata)
~/.SSH/ID_RSA.Pub (chiave pubblica)

Il punto SSH significa che è una cartella nascosta per impostazione predefinita. Inoltre, la chiave pubblica viene utilizzata per la crittografia, mentre la chiave privata viene utilizzata per la decrittografia. E sebbene la chiave pubblica possa essere bandata ovunque e ovunque, la chiave privata deve essere mantenuta al sicuro! La tua chiave privata deve rimanere nella tua rete in ogni momento! Se perdi la chiave privata, potresti anche supporre che il tuo sistema sia stato compromesso. È peggio che perdere la password perché è un accesso senza password).

Successivamente, dobbiamo copiare la chiave pubblica sul server e, per questo, utilizziamo il seguente codice (che viene eseguito sulla macchina client):

SSH-Copy-ID

Ad esempio, nel mio caso, scrivo:

Ex: SSH-Copy-ID [email protected]

SSH-Copy-ID è tale che nome del server è il nome del server e IP è il suo indirizzo IP. In questo caso, "server"È il nome del mio server e 10.0.2.15 è il suo indirizzo IP. Quando il codice precedente viene inserito nel computer client, il client richiederà la password del server, inseriscilo. Copierà la chiave pubblica sul server a ~/.SSH/AUTORITED_KEYS e successivamente Visualizza ”Numero di chiavi aggiunte:" Sulla macchina client.

La macchina client ti chiederà anche di tentare un accesso utilizzando:

ssh
(Ex: SSH [email protected])

Il secondo la chiave pubblica viene copiata sul server, verrà creato un file chiamato Authorized_keys con la chiave pubblica al suo interno. Come puoi vedere nelle seguenti immagini, ecco una cartella nascosta chiamata /.SSH ha vinto il mio server; Quando viene aperto il file autorizzato_keys, puoi vedere la chiave pubblica che abbiamo generato al suo interno.

Sebbene questo processo sembra essere abbastanza semplice, puoi e probabilmente imbatterai in una serie di errori durante l'impostazione del processo di autenticazione basato sulla chiave. Uno, in particolare, è il seguente:

Errore "Agent ha ammesso la mancata firma utilizzando la chiave. Permesso negato. (chiave pubblica"

Potresti ottenere questo errore dopo aver copiato la chiave pubblica a file autorizzato_keys. Utilizzare il seguente codice sul computer client per risolverlo:

ssh-add

Una volta che tutto è stato impostato, ora è necessario disabilitare l'autenticazione della password sulla macchina del server. Questo viene fatto andando nel /etc/ssh/sshd_config file sul tuo server e impostando il Passwordautenticazione al no:

Passwordautenticazione n

Una volta impostata l'autenticazione della password su NO, se si tenta di accedere tramite SSH, è necessario accedere automaticamente. (Si prega di notare che non ho impostato una passphrase.)

File autorizzato_keys

Indipendentemente dal tipo di chiave che usi (Es: RSA, ECDSA, ecc.), per utilizzare l'autenticazione basata sulla chiave, la chiave pubblica generata deve essere copiata sul server file autorizzato_keys. In genere, se questo file non esiste, il server tenterà l'autenticazione della password. Si prega di ricordare anche che ogni chiave pubblica è archiviata in una sola riga in file autorizzato_keys. Ricorda anche di dare il /.cartella ssh, le chiavi private/pubbliche e le file autorizzato_keys le autorizzazioni appropriate: tu e tu solo dovreste essere in grado di scherzare con esso. Si noti che è possibile copiare manualmente la chiave pubblica nel /.cartella ssh Inoltre, e se eseguiti manualmente, le autorizzazioni appropriate sono una parte importante del processo.

Nel caso in cui tu aggiunga una seconda chiave pubblica manualmente al file autorizzato_keys, Termina la linea con un "Newlin"O un ritorno. In caso contrario, penserà che le due chiavi distinte siano una singola chiave, e nessuno dei due funzionerà.

IL /.directory ssh dovrebbe avere la seguente autorizzazione:

chmod 700 ~/.ssh

IL file autorizzato_keys dovrebbe avere la seguente autorizzazione:

chmod 600 ~/.SSH/AUTORITED_KEYS

IL chiave pubblica dovrebbe avere la seguente autorizzazione:

chmod 644 ~/.SSH/ID_RSA.pub

La chiave privata dovrebbe avere la seguente autorizzazione:

chmod 600 ~/.SSH/ID_RSA

Puoi anche concedere ad altri utenti l'accesso al tuo server. Per questo, ottieni semplicemente la loro chiave pubblica e mettila nel file autorizzato_keys (in una nuova linea). Quest'ultimo garantirà loro l'accesso al tuo server.

In genere, quando viene impostata l'autenticazione basata sulla chiave, l'utente può accedere alla macchina remota con comandi completamente funzionali. Tuttavia, puoi limitare l'accesso a un singolo comando che desideri utilizzando il file autorizzato_keys. Questo è chiamato "comando forzato".

Questo è il formato del file autorizzato_keys Se vuoi forzare un comando:


Ex:
Command = "Date" ssh-rsa aasasa […]

Nel mio esempio, ho messo la "data" di comando davanti alla chiave pubblica nel file autorizzato_keys (vedere nell'immagine sotto). Il risultato di questo comando aggiunto al file autorizzato_keys è che ottengo solo la data sulla mia macchina client. Il comando che hai specificato e solo quel comando verrà quindi eseguito o consentito.


Il rovescio della medaglia al comando forzato nel file autorizzato_keys è che in genere puoi mettere solo un comando per chiave pubblica autorizzata. Per bypassare questo, avrai bisogno di uno script bash. Se hai a che fare con uno script bash, utilizzerai la seguente notazione:

comando =

Supponiamo di scrivere una sceneggiatura ssh_script.sh (Questo è solo uno script di esempio):

#!/Bin/Bash
PS3 = 'Scegli la tua opzione:'
scelte = ("Ottieni la data" "crea una directory" "crea un file" "uscita")
Seleziona opt in "$ scelte [@]"; Fare
Caso $ opt in
"Ottieni la data")
CurrentDate = 'Date +"%y-%m-%d%t"'
echo $ CurrentDate
;;
"Crea una directory")
echo "Qual è il nome della directory?"
Leggi il nome
mkdir $ nominato
;;
"Crea un file")
Echo "Immettere il testo che si desidera inserire nel file"
Leggi il testo
echo "nome del file per favore"
Leggi il nome file
echo $ text >> $ nome file
rottura
;;
"Uscita")
Echo "Arrivederci! Ci rivediamo presto!"
Uscita
;;
*) echo "opzione non valida $ risposta" ;;
Esac
Fatto

Il prossimo passo è rendere questo file eseguibile digitando quanto segue:

chmod +x ssh_script.sh

Si prega di notare che se non si rende eseguibile questo file, il processo lancerà un errore! Qui, posizioneresti il ​​file in cui hai appena creato ~/.ssh come ~/.ssh/ssh_script.sh, e scrivere quanto segue in file autorizzato_key:

Ex:
Comando = ”/home/server/.ssh/ssh_script.sh "ssh-rsa aasasa […]

Il risultato è il seguente:

Quando il ssh_script.File SH (eseguibile) è inserito nel file ~/.cartella ssh (~/.ssh/ssh_script.sh), e quello il file autorizzato_keys è modificato, è necessario vedere i risultati dello script bash sulla macchina client (come nell'immagine sopra). E questo è tutto! Codice facile, ventilato, bellissimo!

Autenticazione a chiave è un modo facile, rapido e sicuro per accedere alla macchina remota utilizzando ssh. In particolare, il file autorizzato_keys è di grande utilità nell'autenticazione dell'utente e specificando quali comandi sono consentiti dall'utente.

Codice felice!