Questo articolo continua la nostra serie di articoli su Linux e copre molte utili funzionalità e trucchi SSH per migliorare la produttività quotidiana. I nostri elementi visivi ti aiuteranno a comprendere l'impostazione SSH, la gestione dei file di configurazione, l'autenticazione, l'utilizzo di più chiavi SSH e, naturalmente, il port forwarding SSH locale e remoto. Diventa un maestro SSH in 10 minuti!
Cos'è SSH
Secure Shell, o SSH, è un protocollo di rete che ti consente di connetterti in modo sicuro a un server remoto e di utilizzare un'interfaccia console per gestirlo.
Quando stabilisci una connessione SSH, il server avvia una sessione di shell per te. Successivamente, puoi digitare i comandi nel tuo client SSH e verranno eseguiti su un server remoto.
Gli amministratori di sistema utilizzano questo protocollo per connettere e gestire server Linux remoti in modo sicuro.
Come funziona SSH
Come qualsiasi applicazione di rete, SSH utilizza due componenti:
- Client SSH è un'applicazione che installi sul computer che utilizzerai per connetterti al computer basato su Linux della rete. Il client SSH stabilisce una connessione crittografata tra il tuo computer e il server remoto.
- Server SSH è un'applicazione server in ascolto sulla porta TCP/IP 22 per le connessioni client. Se il client ha fornito le credenziali corrette, il server SSH crea una nuova sessione utente e consente di eseguire comandi remoti.
Autenticazione SSH
SSH consente di utilizzare più metodi di autenticazione diversi. I più utilizzati sono:
- Autenticazione tramite password – ti viene richiesto il nome utente e la password per accedere all'host remoto.
- Autenticazione basata su chiave SSH – stai utilizzando chiavi pubbliche e private SSH per l'autenticazione utente.
Autenticazione basata su chiave SSH
Questo metodo di autenticazione è considerato più sicuro rispetto all'utilizzo delle password. Ecco come funziona:
Algoritmo di autenticazione basata su chiave SSH:
- Il client avvia la connessione SSH.
- Il server invia un messaggio casuale.
- Il client crittografa il messaggio ricevuto utilizzando una chiave SSH privata e lo rimanda al server.
- Il server decodifica il messaggio del client utilizzando una chiave SSH pubblica . Se il messaggio è lo stesso, il server concede l'accesso.
L'utilizzo dell'autenticazione tramite password in SSH non è sicuro. Se stai ancora utilizzando l'autenticazione tramite password, devi cambiarla in Autenticazione basata su chiave SSH il prima possibile.
Come installare un client SSH
Nella maggior parte dei sistemi Linux e macOS, il server SSH è già installato disponibile per te per impostazione predefinita. Ma se stai giocando con Linux nella tua macchina virtuale, potrebbe essere necessario installarlo.
Ubuntu
Per le distribuzioni Linux basate su deb, puoi installare il client SSH utilizzando i seguenti comandi:
sudo apt-get update
sudo apt-get -y install openssh-client
CentOS, Fedora, RedHat
Per le distribuzioni Linux basate su yum, puoi installare il client SSH utilizzando i seguenti comandi:
sudo yum -y install openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
Finestre
Per il sistema operativo Windows, PuTTY è diventato un client SSH standard di fatto. Per installarlo, scarica il programma di installazione MSI dal link sopra e segui le istruzioni da Come installare PuTTY su Windows.
Ecco il modo automatizzato usando Chocolatey. Apri la console di PowerShell in modalità "Esegui come amministratore") ed esegui i seguenti comandi:
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install putty -y
Come installare un server SSH
Nella maggior parte dei sistemi Linux e macOS, il client SSH è già disponibile per te per impostazione predefinita. Ma se stai giocando con Linux nella tua macchina virtuale, potrebbe essere necessario installarlo.
Server SSH – Ubuntu
Per le distribuzioni Linux basate su deb, puoi installare il client SSH utilizzando i seguenti comandi:
sudo apt-get update
sudo apt-get -y install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
Server SSH – CentOS, Fedora, RedHat
Per le distribuzioni Linux basate su yum, puoi installare il client SSH utilizzando i seguenti comandi:
sudo yum -y install openssh
sudo systemctl enable sshd
sudo systemctl start sshd
Server SSH – Windows
Il server SSH non può essere installato su Windows. Nel mondo Windows, devi utilizzare Desktop remoto e WinRM per controllare i server Windows remoti.
Crea chiave SSH
Non appena disponi del client SSH, puoi creare chiavi SSH private e pubbliche utilizzate per l'autenticazione basata su chiavi SSH. Per creare una chiave SSH, esegui il seguente comando nel terminale:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Questo comando creerà una coppia di chiavi RSA da 4 Kb:
~/.ssh/id_rsa
– Chiave privata SSH.~/.ssh/id_rsa.pub
– Chiave pubblica SSH.
Importante: Il file della chiave privata SSH non deve mai essere mostrato o inviato a nessuno.
Configura l'autenticazione basata su chiave SSH
Per configurare l'autenticazione basata su chiave SSH sul server, è necessario completare i seguenti passaggi:
- Accedi al server.
- Vai alla home directory dell'utente.
- Modifica file ~/.ssh/authorized_keys e incolla il contenuto della chiave pubblica file lì.
- Salva le modifiche.
~/.ssh/authorized_keys può contenere tutti i record di file di chiave pubblica necessari. Quindi, molte persone diverse possono connettersi al server utilizzando lo stesso nome di accesso ma i loro file di chiave privata.
Come connettersi utilizzando SSH
Puoi connetterti a un server Linux remoto utilizzando un client SSH digitando il seguente comando:
ssh remote_username@host_ip_address
Utilizza chiavi SSH diverse per server diversi
È una situazione diffusa in cui potrebbe essere necessario utilizzare diversi file di chiavi SSH private per accedere a server diversi. Ci sono diversi modi per farlo.
Specifica SSH chiave nel comando di connessione
Per specificare una chiave privata richiesta come parte del comando di connessione SSH, usa -i
bandiera:
ssh -i ~/.ssh/another_private_key remote_username@host_ip_address
Utilizza un agente SSH
Se non hai troppe chiavi private, puoi utilizzare un agente SSH.
SSH Agent è un programma che carica la tua chiave SSH privata in memoria e la usa per superare l'autenticazione SSH.
Linux
Avvia ssh-agent in background:
eval "$(ssh-agent -s)"
Per aggiungere le tue chiavi SSH all'agente, utilizza i seguenti comandi:
ssh-add -K ~/.ssh/id_rsa
ssh-add -K ~/.ssh/another_private_key
Finestre
La distribuzione PuTTY contiene Pagent, che si trova nella barra delle applicazioni e svolge lo stesso ruolo. Fai clic con il pulsante destro del mouse su Pagent e aggiungi la tua chiave SSH.
Ora, il client SSH utilizzerà tutte le chiavi private caricate una per una per passare l'autenticazione durante la connessione SSH.
File di configurazione SSH
Un altro modo utile per configurare i parametri del client SSH è tramite il ~/.ssh/config
file.
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
Host exceptional.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/another_private_key
Nell'esempio sopra, stiamo utilizzando l'impostazione predefinita ~/.ssh/id_rsa
file della chiave privata per tutti i server, ad eccezione di exceptional.com
server. Per il exceptional.com
server, utilizzeremo ~/.ssh/another_private_key
file.
Agente SSH e inoltro chiavi
Un'altra funzionalità SSH preferita che utilizzo quotidianamente è l'inoltro della chiave SSH. Ti consente di utilizzare le tue chiavi SSH locali per connetterti a server diversi.
Puoi abilitare l'inoltro della chiave SSH durante l'esecuzione del client SSH specificando -T
bandiera:
ssh -T remote_username@host_ip_address
Oppure puoi abilitare permanentemente questa configurazione su ~/.ssh/config
file specificando ForwardAgent yes
:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
Inoltro porta SSH
Il protocollo SSH ti consente di inoltrare non solo la comunicazione dell'agente SSH attraverso un canale SSH sicuro, ma qualsiasi traffico TCP.
Se devi inoltrare il traffico UDP, utilizza nc
in combinazione con SSH.
Esistono due tipi di opzioni di port forwarding.
Inoltro alla porta locale
Il modo migliore per spiegare il port forwarding SSH locale è dare un'occhiata al diagramma seguente.
In questo diagramma, Host di salto il server ha una connettività privata al server Amazon RDS PostgreSQL.
Il cliente laptop può connettersi al server Jump Host utilizzando il protocollo SSH.
Il proprietario del cliente laptop sta cercando un modo per connettersi all'istanza Amazon RDS .
La funzione di inoltro della porta locale SSH consente di associare una porta al client computer portatile. Il traffico dalla porta collegata viene inoltrato tramite il Host di salto server a un'istanza Amazon RDS .
Di conseguenza, devi connetterti all'istanza RDS dal client laptop, devi configurare pgsql
al laptop per connettersi a localhost:15432
.
Ecco come devi stabilire una connessione SSH al Host Jump dal client Linux o macOS portatile:
ssh -L 127.0.0.1:15432:rds-endpoint-url:5432 ec2-user@jump_host_ip
Se utilizzi PuTTY, devi apportare modifiche in Connessioni – SSH – Tunnel prima di connettersi al Jump Host.
Inoltro porta remoto
Il port forwarding remoto SSH è una funzionalità un po' più interessante che risolve il problema opposto. Ti consente di associare la porta sul server ssh remoto e inoltrare il traffico in arrivo su quella porta alle reti dietro l'host client SSH.
Ecco un esempio.
Nel nostro esempio, abbiamo un server isolato , che non ha accesso a Internet, e il cliente laptop, che stiamo utilizzando per connetterci al Host Jump .
Traffico tra Jump Host e Server isolato non è limitato.
Dobbiamo consentire il server isolato per connettersi a Internet. Come possiamo farlo?
Ad esempio, possiamo avviare un container Docker con proxy Squid sul laptop client sulla porta 8080. Quindi possiamo connetterci a Jump Host usando SSH. La funzione di inoltro della porta remota serve per associare la porta 8081
su Host di salto per inoltrare il traffico al cliente porta laptop 8080
.
Di conseguenza, il server isolato potrà utilizzare http://jump_host_ip:8081
come server proxy.
Per abilitare il port forwarding remoto durante la connessione SSH su Linux o macOS:
ssh -R 8081:localhost:8080 ec2-user@jump_host_ip
Per host PuTTY e Windows:
Riepilogo
In questo articolo, ho trattato molte utili funzionalità SSH, che sto utilizzando nel mio lavoro quotidiano. Spero che inizierai a usarli anche tu. Se qualcosa non è chiaro, per favore, contattami nella sezione commenti qui sotto. Sarò più che felice di aiutarti.
Se hai trovato utile questo articolo, sentiti libero di aiutarmi a diffonderlo nel mondo!