Come utilizzare SSH per connettersi a un server remoto

Introduzione

Uno strumento essenziale da padroneggiare come amministratore di sistema è SSH.

SSH, o Secure Shell, è un protocollo utilizzato per accedere in modo sicuro ai sistemi remoti. È il modo più comune per accedere ai server Linux remoti.

In questa guida, discuteremo come utilizzare SSH per connettersi a un sistema remoto.

Dispiega le tue applicazioni frontend da GitHub utilizzando DigitalOcean App Platform. Lascia che DigitalOcean si concentri sulla scalabilità della tua app.

Sintassi Principale

Per connettersi a un sistema remoto utilizzando SSH, utilizzeremo il comando ssh.

Se stai utilizzando Windows, dovrai installare una versione di OpenSSH per poter eseguire ssh da un terminale. Se preferisci lavorare in PowerShell, puoi seguire la documentazione di Microsoft per aggiungere OpenSSH a PowerShell. Se preferisci avere a disposizione un ambiente Linux completo, puoi configurare WSL, il Sottosistema Windows per Linux, che includerà ssh per impostazione predefinita. Infine, come terza opzione leggera, puoi installare Git for Windows, che fornisce un ambiente nativo di terminale bash per Windows che include il comando ssh. Ognuna di queste opzioni è ben supportata e la scelta dipenderà dalla preferenza personale.

Se stai utilizzando un Mac o Linux, avrai già il comando ssh disponibile nel tuo terminale.

La forma più diretta del comando è:

  1. ssh remote_host

Il remote_host in questo esempio è l’indirizzo IP o il nome di dominio a cui stai cercando di connetterti.

Questo comando presume che il tuo nome utente sul sistema remoto sia lo stesso del tuo nome utente sul sistema locale.

Se il tuo nome utente è diverso sul sistema remoto, puoi specificarlo utilizzando questa sintassi:

  1. ssh remote_username@remote_host

Una volta connesso al server, potresti essere chiesto di verificare la tua identità fornendo una password. In seguito, vedremo come generare delle chiavi da utilizzare al posto delle password.

Per uscire dalla sessione ssh e tornare alla sessione locale della shell, digitare:

  1. exit

Come Funziona SSH?

SSH funziona connettendo un programma client a un server ssh, chiamato sshd.

Nella sezione precedente, ssh era il programma client. Il server ssh era già in esecuzione sull’host remoto che abbiamo specificato, remote_host.

In quasi tutti gli ambienti Linux, il server sshd dovrebbe avviarsi automaticamente. Se non è in esecuzione per qualsiasi motivo, potresti dover accedere temporaneamente al tuo server tramite una console basata su web o una console seriale locale.

Il processo necessario per avviare un server ssh dipende dalla distribuzione di Linux che stai utilizzando.

Su Ubuntu, puoi avviare il server ssh digitando:

  1. sudo systemctl start ssh

Questo dovrebbe avviare il server sshd e potrai quindi accedere in remoto.

Come Configurare SSH

Quando si modificano le impostazioni di SSH, si stanno modificando le impostazioni del server sshd.

In Ubuntu, il file di configurazione principale di sshd si trova in /etc/ssh/sshd_config.

Eseguire il backup della versione attuale di questo file prima di modificarlo:

  1. sudo cp /etc/ssh/sshd_config{,.bak}

Apri utilizzando nano o il tuo editor di testo preferito:

  1. sudo nano /etc/ssh/sshd_config

Vorrai lasciare la maggior parte delle opzioni in questo file invariata. Tuttavia, ci sono alcune che potresti voler esaminare:

/etc/ssh/sshd_config
Port 22

La dichiarazione di porta specifica su quale porta il server sshd sarà in ascolto per le connessioni. Per impostazione predefinita, questa è 22. Probabilmente dovresti lasciare questa impostazione invariata, a meno che tu non abbia ragioni specifiche per fare diversamente. Se modifichi la tua porta, ti mostreremo come connetterti alla nuova porta in seguito.

/etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

Le dichiarazioni delle chiavi host specificano dove cercare le chiavi host globali. Discuteremo successivamente cosa sia una chiave host.

/etc/ssh/sshd_config
SyslogFacility AUTH
LogLevel INFO

Questi due elementi indicano il livello di registrazione che dovrebbe verificarsi.

Se stai riscontrando difficoltà con SSH, aumentare la quantità di registrazione potrebbe essere un buon modo per scoprire qual è il problema.

/etc/ssh/sshd_config
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

Questi parametri specificano alcune informazioni di accesso.

LoginGraceTime specifica quanti secondi mantenere viva la connessione senza effettuare l’accesso con successo.

Potrebbe essere una buona idea impostare questo tempo appena un po’ più alto rispetto al tempo necessario per effettuare normalmente l’accesso.

PermitRootLogin seleziona se l’utente root è autorizzato a effettuare l’accesso.

Nella maggior parte dei casi, questo dovrebbe essere cambiato in no quando hai creato un account utente che ha accesso a privilegi elevati (tramite su o sudo) e può effettuare l’accesso tramite ssh, al fine di ridurre al minimo il rischio di accesso di root al tuo server.

strictModes è una guardia di sicurezza che rifiuterà un tentativo di accesso se i file di autenticazione sono leggibili da tutti.

Questo impedisce tentativi di accesso quando i file di configurazione non sono sicuri.

/etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10

Questi parametri configurano una funzionalità chiamata Inoltro X11. Questo consente di visualizzare l’interfaccia grafica utente (GUI) di un sistema remoto sul sistema locale.

Questa opzione deve essere abilitata sul server e data con il client SSH durante la connessione con l’opzione -X.

Dopo aver apportato le modifiche, salva e chiudi il file. Se stai utilizzando nano, premi Ctrl+X, quindi quando richiesto, Y e poi Invio.

Se hai modificato qualche impostazione in /etc/ssh/sshd_config, assicurati di ricaricare il tuo server sshd per implementare le modifiche:

  1. sudo systemctl reload ssh

Dovresti testare accuratamente le tue modifiche per assicurarti che operino nel modo previsto.

Potrebbe essere una buona idea avere alcune sessioni terminali aperte mentre apporti modifiche. Questo ti consentirà di ripristinare la configurazione se necessario senza bloccarti fuori.

Come Accedere a SSH con le Chiavi

Pur essendo utile poter accedere a un sistema remoto utilizzando le password, è più veloce e sicuro configurare l’autenticazione basata su chiavi.

Come funziona l’autenticazione basata su chiave?

L’autenticazione basata su chiave funziona creando una coppia di chiavi: una chiave privata e una chiave pubblica.

La chiave privata si trova sul computer client ed è protetta e mantenuta segreta.

La chiave pubblica può essere fornita a chiunque o inserita su qualsiasi server a cui desideri accedere.

Quando tenti di connetterti usando una coppia di chiavi, il server utilizzerà la chiave pubblica per creare un messaggio per il computer client che può essere letto solo con la chiave privata.

Il computer client invia quindi la risposta appropriata al server e il server saprà che il client è legittimo.

Questo processo viene eseguito automaticamente dopo aver configurato le tue chiavi.

Come Creare Chiavi SSH

Le chiavi SSH dovrebbero essere generate sul computer da cui desideri effettuare l’accesso. Di solito si tratta del tuo computer locale.

Inserisci quanto segue nella riga di comando:

  1. ssh-keygen -t rsa

Potresti essere invitato a impostare una password sui file chiave stessi, ma questa è una pratica abbastanza rara e dovresti premere Invio attraverso i prompt per accettare le impostazioni predefinite. Le tue chiavi verranno create in ~/.ssh/id_rsa.pub e ~/.ssh/id_rsa.

Cambia nella directory .ssh digitando:

  1. cd ~/.ssh

Guarda i permessi dei file:

  1. ls -l
Output
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

Come puoi vedere, il file id_rsa è leggibile e scrivibile solo per il proprietario. Questo aiuta a mantenerlo segreto.

Il file id_rsa.pub, invece, può essere condiviso e ha permessi appropriati per questa attività.

Come Trasferire la Tua Chiave Pubblica al Server

Se al momento hai accesso basato su password a un server, puoi copiare la tua chiave pubblica su di esso emettendo questo comando:

  1. ssh-copy-id remote_host

Questo avvierà una sessione SSH. Dopo aver inserito la tua password, copierà la tua chiave pubblica nel file delle chiavi autorizzate del server, il che ti permetterà di accedere senza password la prossima volta.

Opzioni Lato Client

Ci sono diversi flag opzionali che puoi fornire quando ti connetti tramite SSH.

Alcuni di questi potrebbero essere necessari per corrispondere alle impostazioni nella configurazione del sshd host remoto.

Per esempio, se hai cambiato il numero di porta nella tua configurazione sshd, dovrai corrispondere a quella porta sul lato client digitando:

  1. ssh -p port_number remote_host

Nota: Cambiare la porta ssh è un modo ragionevole per fornire sicurezza tramite oscurità. Se consenti connessioni ssh a un server ampiamente noto sulla porta 22 come normale, e hai l’autenticazione tramite password abilitata, probabilmente sarai attaccato da molti tentativi di accesso automatizzati. Utilizzare esclusivamente l’autenticazione basata su chiavi ed eseguire ssh su una porta non standard non è la soluzione di sicurezza più complessa che puoi adottare, ma dovrebbe ridurre al minimo tali tentativi.

Se vuoi eseguire un singolo comando su un sistema remoto, puoi specificarlo dopo l’host in questo modo:

  1. ssh remote_host command_to_run

Ti connetterai alla macchina remota, autenticandoti, e il comando verrà eseguito.

Come detto prima, se l’inoltro X11 è abilitato su entrambi i computer, puoi accedere a quella funzionalità digitando:

  1. ssh -X remote_host

Se hai gli strumenti appropriati sul tuo computer, i programmi GUI che usi sul sistema remoto apriranno ora la loro finestra sul tuo sistema locale.

Disabilitare l’Autenticazione tramite Password

Se hai creato le chiavi SSH, puoi migliorare la sicurezza del tuo server disabilitando l’autenticazione solo tramite password. Oltre alla console, l’unico modo per accedere al tuo server sarà tramite la chiave privata che si abbina alla chiave pubblica che hai installato sul server.

Avviso: Prima di procedere con questo passaggio, assicurati di avere installato una chiave pubblica sul tuo server. Altrimenti, sarai bloccato fuori!

Come root o utente con privilegi sudo, apri il file di configurazione di sshd:

  1. sudo nano /etc/ssh/sshd_config

Trova la riga che contiene Password Authentication e rimuovi il commento togliendo il # iniziale. Puoi quindi cambiare il suo valore in no:

/etc/ssh/sshd_config
PasswordAuthentication no

Altre due impostazioni che non dovrebbero essere modificate (a meno che tu non abbia già modificato questo file in precedenza) sono PubkeyAuthentication e ChallengeResponseAuthentication. Sono impostati per impostazione predefinita e dovrebbero essere come segue:

/etc/ssh/sshd_config
PubkeyAuthentication yes
ChallengeResponseAuthentication no

Dopo aver apportato le modifiche, salva e chiudi il file.

Ora puoi ricaricare il demone SSH:

  1. sudo systemctl reload ssh

L’autenticazione tramite password dovrebbe essere disabilitata e il tuo server dovrebbe essere accessibile solo tramite autenticazione con chiave SSH.

Conclusione

Imparare a muoversi in SSH sarà di grande beneficio per qualsiasi tuo futuro impegno nel cloud computing. Man mano che utilizzi le varie opzioni, scoprirai funzionalità più avanzate che possono rendere la tua vita più semplice. SSH è rimasto popolare perché è sicuro, leggero e utile in situazioni diverse.

Successivamente, potresti voler imparare a lavorare con SFTP per effettuare trasferimenti di file da riga di comando.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server