ssh-server

Le connessioni a Raspberry PI

Raspberry Pi permette la connessione diretta ai dispositivi periferici tipici del desktop: monitor, tastiera, mouse. Se a questi cavi aggiungiamo la rete, l'alimentazione e (spesso, per quanto mi riguarda) il connettore GPIO otteniamo un piccolo circuito stampato sommerso da oggetti ben più grandi e pesanti di lui. Direi qualcosa di impossibile da tenere fermo... o spostare. Senza contare che non sempre abbiamo un monitor e una tastiera a portata di mano...

Per questo potrebbe essere opportuno connettersi a Raspberry Pi remotamente attraverso SSH (headless), usando un normale PC.

Qualche idea su come usare OpenSSH.

Installare il server SSH

La prima cosa da fare è verificare l'installazione su Raspberry Pi del server SSH e, in caso negativo, provvedere.

Se sshd non è installato

Questa è la condizione delle versioni più vecchie di Raspbian, basate su Wheezy o precedenti. Ovviamente per fare le operazioni descritte è necessario usare tastiera e monitor.

Per installare il server SSH è possibile utilizzare lo strumento di configurazione generale presente in Raspbian:

vv@vv-raspberrypi:~$ sudo raspi-config

In alternativa è possibile lavorare al modo Debian:

vv@vv-raspberrypi:~$ sudo aptitude install openssh-server

Se sshd è installato, ma non attivo al boot

Questa è la condizione che (stranamente, a mio parere) è prevista a partire dalla versione di novembre 2016 di Raspbian.

Per attivare il server è necessario creare nella partizione di boot un file vuoto con nome ssh (nessuna estensione, attenzione per chi usa Windows)

Se sshd è installato e attivo al boot

Questa è la condizione che è prevista nelle versioni precedenti al novembre 2016 di Raspbian Jessie. In questo caso non occorre fare nulla.

Verifica del funzionamento

Occorre a questo punto verificare il funzionamento del server SSH collegandosi in remoto. Ma prima occorre scoprire l'indirizzo IP, visto che è in genere attivo nella rete un server dhcp (nota 5). Se abbiamo collegato tastiera e monitor è facile:

pi@vv-rpi2:~ $ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:a6:e0:af brd ff:ff:ff:ff:ff:ff
inet 192.168.111.13/24 brd 192.168.111.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::dc3a:2f30:4700:5fd6/64 scope link
valid_lft forever preferred_lft forever

Tutto bene! Ora non occorre far altro che connettersi, usando dal PC principale ssh (oppure puTTY o simili, per chi ancora è rimasto a MS Windows senza bash): (nota 4)

vv@vv-15rse:~$ ssh 192.168.111.13 -l pi
pi@192.168.111.13's password:

In alternativa, dall'identico significato:

vv@vv-15rse:~$ ssh pi@192.168.111.13

Se si utilizza una macchina con installato un X-server (qualunque desktop Linux è adatto) è possibile anche utilizzare programmi con interfaccia grafica. Al momento della connessione occorre specificarlo nella linea di comando:

vv@vv-15rse:~$ ssh -X 192.168.111.13 -l pi

Per chi trova scomodo digitare ogni volta la password, consiglio vivamente di caricare sul Raspberry Pi la propria chiave pubblica.

vv@vv-15rse:~$ ssh-copy-id pi@192.168.111.13

Errori

A volte, quando il client ssh viene usato su reti particolarmente "dinamiche" e da macchine molto utilizzate, viene mostrato il seguente errore, causato da due macchine diverse che, in momenti diversi, hanno assunto lo stesso nome o lo stesso IP:

vv@vv-inspiron:~$ ssh pi@raspberrypi.local
Warning: the ECDSA host key for 'raspberrypi.local' differs from the key for the IP address 'xxx'
Offending key for IP in /home/vv/.ssh/known_hosts:76
Matching host key in /home/vv/.ssh/known_hosts:78
Are you sure you want to continue connecting (yes/no)?

Per risolvere la cosa occorre cancellare una delle righe in ~/.ssh/known_hosts, la 76 nell'esempio. Per faro velocemente:

vv@vv-inspiron:~$ sed -i '76d' ~/.ssh/known_hosts

Scoprire l'indirizzo IP di Raspberry

Ora ci rimane un solo problema: scoprire l'indirizzo IP del Raspberry Pi nel caso in cui monitor e tastiera non sono collegati

Propongo diverse strade, da usare a seconda dei casi e delle preferenze. Non ho testato nessuna di queste opzioni con macchine MS Windows oppure MAC OS, ma dovrebbero funzionare.

DHCP e DNS

Se usate una rete minimamente complessa questa opzione dovrebbe essere automatica: non dovete far nulla! Occorre che la rete disponga di un server DHCP ed un server DNS integrati tra di loro (Dynamic DNS). Se così è (e lo è in tutte le reti che uso regolarmente, ma in genere non nelle semplici reti SOHO) per connettersi basta digitare il nome del proprio Raspberry Pi:

vv@vv-15rse:~$ ssh vv-raspberrypi -l pi

Il problema potrebbe sorgere se due Raspberry Pi hanno lo stesso nome... Per questo è bene personalizzarne da subito il nome usando raspi-config oppure, da linea di comando:

vv@vv-raspberrypi:~$ sudo joe /etc/hostname

Inutile dire che è il metodo che preferisco di gran lunga, con il solo "piccolo" problema di richiedere servizi di rete correttamente configurati. Chiedete eventualmente al vostro SysAdmin (oppure RTFM, dove F sta per amichevole, senza ironia).

Pseudo dominio .local

Questa strada è alternativa alla precedente e potrebbe non funzionare nel caso di reti configurate con Dynamic DNS. Fa uso dello pseudo dominio di primo livello .local

vv@vv-15rse:~$ ssh vv-raspberrypi.local -l pi

IP statico

Se l'IP di Raspberry Pi è statico... non ci sono ovviamente problemi! Per fare ciò occorre modificare il file /etc/interfaces (nota 6), come nell'esempio di seguito mostrato:

vv@vv-raspberrypi:~$ cat /etc/network/interfaces
auto lo

iface lo inet loopback
# iface eth0 inet dhcp <- Configurazione originale

auto eth0
iface eth0 inet static
address 192.168.123.250
netmask 255.255.255.0
gateway 192.168.123.254

Per modificare il file /etc/network/interfaces è possibile semplicemente inserire la scheda SD in un normale PC linux e modificare il file, con un qualunque editor di testo (come root). Ovviamente gli indirizzi vanno adattati alla propria rete.

Per accedere via SSH occorre poi digitare l'IP statico, come già mostrato. Se ritenete noioso digitare ogni volta un numero, potete inserirlo nel vostro file /etc/hosts.

Problema: se cambio rete (vado a scuola o da un amico) devo modificare il file /etc/network/interfaces per accedere ad internet o comunque utilizzare i servizi della rete a cui sono collegato.

IP statico - bis

Occorre aggiungere all'interfaccia eth0 (già automaticamente configurata come dinamica) un secondo IP, statico. O anche un terzo ed un quarti... Per fare ciò occorre modificare il file  /etc/network/interfaces, come di seguito mostrato come esempio:

vv@vv-raspberrypi:~$ cat /etc/network/interfaces
auto lo

iface lo inet loopback
iface eth0 inet dhcp # Rimuovere se si usa dhcpcd

auto eth0 # Usare eth0:1 per sistemi molto vecchi
iface eth0 inet static  # Usare eth0:1 per sistemi molto vecchi
address 192.168.123.250
netmask 255.255.255.0

Per accedere via SSH occorre digitare l'IP statico (ovviamente sul PC utilizzato occorre aver opportunamente definito le rotte e/o gli indirizzi IP) oppure quello dinamico, se già noto per altre strade.

IP (quasi) statico - ter

Molti server DHCP, inclusi quelli integrati in molti router/AP, permettono di assegnare sempre lo stesso IP ad uno specifico indirizzo MAC. Per fare ciò occorre leggere il manuale del proprio dispositivo.

Per conoscere L'indirizzo MAC del proprio Raspberry;

vv@vv-raspberrypi:~$ ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:f8:31:71
...

Occorre dire che molti DHCP server tendono a riassegnare lo stesso IP alla stessa macchina, ottenendo un risultato simile anche se assolutamente non garantito.

NMAP

Un po' lungo se la rete locale è grande; di buono c'è che non si richiede nulla né alla rete né al Raspberry Pi. (nota 2)

root@vv-15rse:/home/vv# nmap -sP 192.168.111.1-255
...
Nmap scan report for vv-raspberrypi.village (192.168.111.31)
Host is up (0.00083s latency).
MAC Address: B8:27:EB:F8:31:71 (Raspberry Pi Foundation)
...

IPv6

IPv6 permette la configurazione automatica dell'indirizzo usato nella rete locale partendo dall'indirizzo fisico della scheda di rete. In questo modo l'indirizzo è fisso e raggiungibile senza difficoltà. In termini tecnici useremo un indirizzo link-local (fe80::/10) con SLAAC e EUI/64.

IPv6 e SLAAC sono già attivi, ma occorre attivare EUI-64 in modo tale che l'indirizzo sia legato al MAC address:

pi@vv-rpi2:~ $ sudo nano /etc/dhcpcd.conf

# slaac private
slaac hardware

Dopo aver riavviato, avremo l'indirizzo IPv6, indipendente dalla rete, a cui collegarsi: (nota 3)

pi@vv-rpi2:~ $ ip addr
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:a6:e0:af brd ff:ff:ff:ff:ff:ff
inet 192.168.111.13/24 brd 192.168.111.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::ba27:ebff:fea6:e0af/64 scope link
valid_lft forever preferred_lft forever

vv@vv-15rse:~$ ssh pi@fe80::ba27:ebff:fea6:e0af%eth0

O anche:

vv@vv-15rse:~$ rpi3="pi@fe80::ba27:ebff:fea6:e0af%eth0"
vv@vv-15rse:~$ ssh $rpi3

Le connessioni a Raspberry... situazione decisamente migliorata
Direi che il risultato merita :-)

WiFi

Ovviamente il passaggio successivo è quello di togliere il cavo di rete ed usare una chiavetta WiFi. Nulla di più semplice!

E magari anche l'alimentatore USB... sostituendolo con una normale batteria esterna da cellulare, per qualche ora di autonomia:

Le connessioni a Raspberry... wireless

Note

  1. Spesso sshd (il demone di ssh) è già installato e configurato fin dalla prima installazione. Per questo, volendo, è possibile un'installazione alla cieca.
  2. Potrebbe essere una buona idea stampare l'indirizzo MAC su un'etichetta, direttamente sul Raspberry Pi.
  3. Potrebbe essere una buona idea stampare gli indirizzi IPv6 e MAC su un'etichetta, direttamente sul Raspberry Pi
  4.  vv-15rse è il nome proprio del PC principale, pi l'utente utilizzato per la connessione
  5. vv-rpi2 è il nome proprio del Raspberry Pi e pi è l'utente, di default, utilizzato per la connessione
  6. In versioni moderne di Raspbian viene consigliato di intervenire sul file /etc/dhcpcd.conf anche se personalmente sono all'antica. Comunque:
    interface eth0
    static ip_address=192.168.111.250/24
    static routers=192.168.111.254
    static domain_name_servers=192.168.111.254 8.8.8.8

Pagina creata nel gennaio 2016
Ultima modifica di questa pagina: 18 luglio 2018


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima