SSH

Ssh

Collegamento da terminale remoto

Fornisce login remoto sicuro e altri servizi su canale insicuro

E' in realtà un'insieme di utilities:

  • ssh - secure shell - emulatore di terminale remoto
  • sftp - secure file transfer protocol - trasferimanto di file
  • scp - secure copy - copia di files tra sistemi remoti

SSH fornisce:

  • Crittografazione del canale
  • Autenticazione forte - basato sull'uso di chiavi doppie (Pubblica / Privata)
  • Tunnel per altri protocolli su ssh (X Window)

Contrasta:

  • IP spoofing
  • DNS spoofing
  • Alterazioni di routing

SSH è anche usato come canale di connessione sicuro da altre utilities, p.es. Git.

E' una utility Client-Server

  • Il server deve essere attivo sulla macchina che ospita i login
  • Il server si autentica con chiave pubblica
  • Il client deve accettare e fidarsi della chiave pubblica

E' possibile preinstallare le chiavi pubbliche degli host conosciuti

Files:

  • /etc/ssh/known_hosts (default per tutti gli utenti)
  • $HOME/.ssh/known_hosts (per ciascun utente)

Ssh1

Ubuntu

Può non essere installato di default il server ssh

Test:

sudo service ssh status
sudo systemctl status ssh
which sshd

Ricerca del pacchetto:

sudo apt search sshd

Installazione:

sudo apt install openssh-server

Abilitazione / disabilitazione al target corrente:

sudo systemctl enable | disable ssh

Uso di SSH

Ottenere l'indirizzo IP della macchina:

ip addr show

Test in locale:

ssh utente@IP
  • Rispondere 'yes' alla domanda di accettazione della chiave pubblica
  • Dare la password di utente
  • Uscire dalla shell con 'exit'
  • La chiave viene registrata nel file ~/.ssh/known_hosts
    • E' possibile editare il file per rimuovere entries errate

Test da macchina remota:

ssh utente@IP

Collegamento SSH senza password

Questo diventa utilissimo in due casi principali:

  • aumenta la sicurezza prevenendo la presenza di 'Man in the Middle'
  • velocizza alcuni tipi di operazioni come il git push

Il seguente è un esempio, da personalizzare secondo le proprie esigenze.

(1) E' necessaria una coppia di chiavi pubblica e privata. Se non se ne dispone già, generarla.

Generazione chiavi asimmetriche sul client:

ssh-keygen
  • Accettare la locazione di default ~/.ssh/id_rsa
  • Dare la passphrase 'segreto' ( 2 volte) (per esempio)
  • Registrare la chiave allo ssh agent: ssh-add
    • Viene chiesta la passhphrase

La 'passphrase' serve a crittografare il file contenente la chiave privata sul proprio sistema. E' un file molto delicato; se fosserubato e se è in chiaro, inficierebbe tutta la sicurezza del metodo.

(2) La chiave pubblica deve essere manualmente installata sul server.

Copy della chiave pubblica

cat ~/.ssh/id_rsa.pub

Copy di tutto il file nel clipboard

Collegarsi al server: ssh utente@IP

  • Siamo ancora in modo 'normale', quindi viene ancora chiesta la password.

Editare il file contenente le chiavi autorizzate dal server:

vi ~/.ssh/authorized_keys

Incollare la chiave dal clipboard

E' indispensabile che il file delle chiavi permesse abbia sicurezza aumentata:

chmod 600 authorized_keys

Uscire quindi dalla sessione 'normale col server.

(3) Test della connessione senza password

ssh utente@IP

Viene chiesta la 'passphrase'. Questa non è la password di accesso al server, ma la password con cui è stata crittografata la chiave privata sul client.

Il sistema del client di solito pone tale 'passphrase' in una cache locale per alcuni minuti.

Collegamento parametrico

Per evitare digitazioni inutili, si può redigere il file di configurazione sul client. ~/.ssh/config

Host userv
  User mich
  Hostname 192.168.1.2
  Port 22
  IdentityFile ~/.ssh/id_rsa

Sostituire il proprio nome di login sul server e l'indirizzo del server

Si possono aggiungere più paragrafi, per più host remoti

Test:

ssh userv