#howto - SSH: controllo remoto del desktop da mobile - Parte 1

Scritto da il
Redatto da
ubuntu
fedora
archlinux
android

Qualche volta risulta necessario usare il computer mentre si è fisicamente altrove, ad esempio per controllare lo stato di un download, oppure per verificare a che punto è arrivato Photorec nel recuperare i file persi, mentre si è in un’altra stanza.

In questi casi è conveniente instaurare un collegamento tra due dispositivi - l’host, a cui ci si vuole connettere, e il client, ossia il dispositivo a cui si ha accesso, come ad esempio uno smartphone Android su cui è installato Termux.

Vedi anche: Usare il proprio smartphone Android su Linux

SSH - Cos’è, in breve

SSH (“Secure Shell”) è il protocollo più utilizzato per connettersi a un dispositivo remoto in modo sicuro, anche su reti non attendibili, grazie all’utilizzo di autenticazione e crittografia.

Anche se è possibile impostare una password, risulta spesso più conveniente usare una crittografia a chiave pubblica (conosciuta anche come crittografia asimmetrica): in breve, client e server concordano anzitempo una coppia di chiavi, una pubblica e una privata (sono un particolare tipo di “password”, salvate però in formato binario su file, la cui lunghezza è misurata nell’ordine di centinaia o migliaia di bit).

Durante l’autenticazione, una viene usata solo per criptare e l’altra solo per decriptare, e viceversa. Nel caso di SSH, la chiave pubblica viene liberamente fornita dall’host (o server) ed è usata per crittografare il messaggio da spedire al client. La chiave privata è quella che deve essere custodita attentamente da ciascun client che vorrà connettersi al server SSH e permette di decriptare i messaggi del server.

Installare SSH (OpenSSH)

OpenSSH è un’implementazione open source del protocollo SSH, disponibile sulle principali distribuzioni Linux e non solo.

Ubuntu

apt-get install openssh-client openssh-server

Fedora

dnf install openssh-client openssh-server

Arch Linux

pacman -S openssh-client openssh

Come generare le chiavi asimmetriche

Per generare le chiavi, è necessario usare ssh-keygen da terminale (desktop).

Tuttavia, prima di generare le chiavi, è necessario scegliere l’algoritmo di cifratura.

È consigliato scegliere l’algoritmo Ed25519 (basato sul problema matematico delle curve ellittiche) piuttosto che RSA (basato sul problema matematico della fattorizzazione in numeri primi), DSA (considerato vulnerabile, ampiamente superato e sempre meno supportato) o ECDSA (la cui sicurezza è fin troppo legata alla capacità del sistema di generare numeri casuali, e poi va notato che ci sono anche sospetti di backdoor inserite volutamente dal NIST).

Ed25519 offre il medesimo livello di sicurezza crittografica con chiavi ben più brevi, è più performante, e non risulta vulnerabile a particolari tipi di attacchi che possono essere invece usati contro RSA. Tuttavia, Ed25519 è stato creato molto dopo RSA, quindi se la compatibilità è un problema (e solitamente non lo è più, almeno non tanto quanto qualche anno fa) allora potrebbe essere necessario ricorrere a RSA.

Per Ed25519:

# Genera una chiave Ed25519
ssh-keygen -t ed25519

Per RSA:

# Genera una chiave RSA a 4096 bit (default: 3072 bit)
ssh-keygen -t rsa -b 4096

In entrambi i casi, verrà chiesto dove salvare la coppia di chiavi e se inserire una passphrase (nient’altro che una “password di una password” - nella pratica, la passphrase crittografa la chiave privata, ed è utile a prevenire i rischi di un eventuale accesso non autorizzato ad essa). A meno di specifiche esigenze di sicurezza, la passphrase può essere tranquillamente omessa.

Configurare la chiave pubblica

Generata la coppia di chiavi, è necessario abilitare la chiave pubblica e autorizzare il server SSH ad usarla per accettare nuove connessioni in entrata.

# Aggiunge la chiave pubblica alla lista delle chiavi autorizzate.
#
# Attenzione ai simboli:
# ">>" è utilizzato per aggiungere alla fine, mentre ">" sovrascrive l'intero contenuto del file.
# ".pub" indica che, tra le due chiavi, si sta scegliendo quella pubblica.
cat '~/.ssh/id_ed25519.pub' >> ~/.ssh/authorized_keys

Avviare il server SSH

Usando Systemd:

# Avvio per la sessione attuale
systemctl start sshd.service
# Abilitazione generale (si avvia ad ogni futura accensione)
systemctl enable sshd.service

Senza Systemd, usando Init:

# Avvio per la sessione attuale
/etc/init.d/sshd start
# Abilitazione generale (si avvia ad ogni futura accensione)
chkconfig sshd on

Per effettuare eventuali modifiche, il file di configurazione è /etc/ssh/sshd_config.

Ora, il server SSH accetta le connessioni dei dispositivi dotati della giusta chiave privata. Resta solo da configurare il dispositivo Android.

Configurare la chiave privata e il dispositivo Android

Vedi anche: Termux - Linux su Android

Installato Termux, è necessario usare il package manager, pkg, per installare OpenSSH.

pkg update && pkg upgrade && pkg install OpenSSH

Installato OpenSSH, bisogna spostare la chiave privata sulla memoria interna del dispositivo (va trasferita manualmente).

# A partire dalle ultime versioni di Android, le applicazioni non hanno più
# automaticamente l'accesso alla memoria interna del dispositivo.
# Qualora non funzionasse, bisogna revocare e ridare i permessi manualmente.
termux-setup-storage

# Ora, per convenzione, la chiave privata andrebbe spostata sotto ~/.ssh.
# Il symlink "~/storage/shared" riporta alla memoria interna del dispositivo Android.
mv ~/storage/shared/Download/id_ed25519 ~/.ssh/

A meno che non sia stata inserita una passphrase (in tal caso potrebbe essere conveniente usare anche ssh-agent e ssh-add), dovrebbe ora essere possibile connettersi.

Connessione

Se i due dispositivi sono connessi alla stessa rete, prima di connettersi, è necessario ottenere sia l’username (usando whoami) che l’indirizzo IP locale del server SSH (usando ip address; nel caso di IPv4, è solitamente quello che inizia per 192.168):

A questo punto, la connessione può essere finalmente stabilita (sia 22 la porta in ascolto, ~/.ssh/id_ed25519 il percorso alla chiave privata, username il nome utente dell’host, 192.168.1.70 l’indirizzo locale):

ssh -p 22 -I ~/.ssh/id_ed25519 [email protected]

Per concludere

Per ora è tutto: analizzeremo la parte sul controllo remoto dello schermo del desktop prossimamente, nella seconda parte di questa guida.

history_edu Revisioni