Pràctica de connexió remota a una Raspberry Pi

De Wiki d'en Jordi Binefa
Dreceres ràpides: navegació, cerca

Identificació de les Raspberry Pi mitjançant protocol mDNS

Aquest tipus de Raspberry Pi Zero W es poden accedir des de la xarxa JESUITESFP d'aquesta manera:

A la foto hi surt r07 (pot haver-hi entre r00 i r30). Per accedir-hi mitjançant ssh des d'un sistema Linux:

ssh -o ServerAliveInterval=30 pi@rpizw07.local

L'opció ServerAliveInterval serveix per a que es pugui mantenir la connexió ssh i tramet un byte nul cada cert temps, en aquest cas cada 30 segons.

caption


Aquest altra tipus de placa (rb05 a la foto) s'accedix des d'un un sistema Linux:

ssh -o ServerAliveInterval=30 pi@robot05.local
caption


Accés ssh mitjançant la IP

a) Un cop heu entrat a la Raspberry Pi Zero W assignada, heu de trobar quina és la seva IP. Un cop ja sabeu quina és, i l'heu apuntat, heu de sortir de la connexió SSH.

b) Amb la IP trobada a l'apartat anterior accediu-hi mitjançant el programa putty fent servir la IP i no pas el seu nom (hostname)

Adjunteu la Raspberry Pi a una VPN

c) Adjunteu la Raspberry Pi Zero W assignada a una xarxa VPN de ZeroTier gestionada per vosaltres. Si sou un grup de dos heu d'ajuntar-ho a dues xarxes VPN de ZeroTier; una per membre del grup (l'àmbit de xarxa de cada usuari ha de ser diferent i ambdós han de ser diferents a 172.30.x.x).

d) Sortiu de la sessió. Entreu a la Raspberry Pi Zero W assignada fent servir una aplicació de mòbil. Feu una captura a on es vegi el nom de l'equip (hostname).

Usuaris i grups

Instal·leu el paquet de Debian per a poder fer servir mkpasswd:

sudo apt install whois

e) Afegiu-hi els usuaris usr01 i usr02 (amb contrasenyes contraSeNYa01 i contraSeNYa02, respectivament) membres del grup users:

sudo useradd usr01 -g  users  -d /home/usr01  -m  -s  /bin/bash -p $(mkpasswd  contraSeNYa01)

f) Feu que aquests dos nous usuaris siguin membres dels grup sudo i dialout:

sudo usermod -aG sudo usr01
sudo usermod -aG dialout usr01

també es podia haver fet al pas previ fent:

sudo useradd usr01 -g  users  -d /home/usr01  -m  -s  /bin/bash  -G sudo,dialout -p $(mkpasswd  contraSeNYa01)

g) Sortiu de la connexió ssh. Entreu remotament a la Raspberry Pi Zero W assignada autentique-vos, cada membre del grup, com a usr01 i usr02.

h) Dins del vostre directori /home/usr0x, feu una nova carpeta anomenada xxyyzz (essent xx les dues primeres lletres del vostre nom, yy les dues primeres del vostre primer cognom i zz les dues primeres lletres del vostre segon cognom. Per exemple Josep Ros Pineda seria joropi).

Accés amb el FileZilla

i) Feu servir el programa Filezilla per a pujar a la vostra carpeta, feta a l'apartat anterior, un arxiu de text, anomenat quiSoc.txt, amb el contingut del vostre nom i dos cognoms.

j) Fent servir l'ordre cat al terminal remot visualitzeu el contingut de l'arxiu quiSoc.txt que acabeu de pujar.

Feu accessible una nova carpeta mitjançant Samba

k) Sortiu i hi entreu amb l'usuari pi. Instal·leu els paquets del servidor Samba:

sudo apt-get install samba cifs-utils

en cas de que aquests paquets ja hi siguin instal·lats, desinstal·leu-los:

sudo aptitude purge samba cifs-utils

i torneu-los a instal·lar.

l) Afegiu l'usuari pi (amb contrasenya raspberry) a Samba:

sudo smbpasswd -a pi

m) Feu una còpia de seguretat de l'arxiu smb.conf:

sudo cp /etc/samba/smb.conf smb.old

n) Feu la carpeta /home/pi/compartit donant-li tots els permisos d'accés:

mkdir /home/pi/compartit
chmod 0777 /home/pi/compartit

o) Editeu l'arxiu smb.conf:

sudo nano /etc/samba/smb.conf

i hi inseriu:

[pi Compartit]
comment = Carpeta RPi compartida
path = /home/pi/compartit
writeable = yes
create mask = 0777
browseable = Yes
valid users @users
force user = pi

p) Reinicieu el servei Samba:

sudo /etc/init.d/samba restart

q) Verifiqueu que podeu accedir des de Windows. Feu servir el navegador d'arxius per a pujar a la vostra carpeta un arxiu de text, anomenat quiSoc.txt, amb el contingut del vostre nom i dos cognoms. Des de la Raspberry Pi Zero W, fent servir el programa nano afegiu-hi cursant un cicle d'informàtica a l'Escola del Clot. Des de Windows verifiqueu que el contingut de l'arxiu quiSoc.txt ha estat modificat.

Accés sense contrasenya

r) Des de Linux a la Raspberry

Genereu una clau al vostre ordinador Linux (si no existeix ~/.ssh/id_rsa.pub):

1- Obriu una sessió de terminal.

2- Creeu la carpeta ~/.ssh, en cas de que no existeixi:

mkdir -p $HOME/.ssh

3- Aneu al directori ~/.ssh:

cd ~/.ssh

i premeu Enter

4- Genereu les vostres claus:

ssh-keygen -t rsa

5- Premeu Enter per a contestar totes les preguntes per defecte.


Desplegueu la clau a la Raspberry Pi Zero W assignada:

6- Des de la vostra màquina Linux, entreu (canviant robot01 pel vostre hostname assignat):

scp ~/.ssh/id_rsa.pub pi@robot01.local:temp_id_rsa_key.pub

premeu Enter i entreu la contrasenya quan us ho demani (la contrasenya per defecte és raspberry).


7- Obriu una sessió SSH a la vostra Raspberry Pi des del vostre ordinador Linux (canvieu robot01 pel vostre hostname assignat):

ssh -o ServerAliveInterval=30 pi@robot01.local

premeu Enter i entreu la contrasenya quan us ho demani (la contrasenya per defecte és raspberry).

8- Creeu la carpeta ~/.ssh, en cas de que no existeixi:

mkdir -p $HOME/.ssh


9- Afegiu la vostra clau a l'arxiu authorized_keys:

cat ~/temp_id_rsa_key.pub >> ~/.ssh/authorized_keys

10- Esborreu l'arxiu amb la clau temporal:

rm temp_id_rsa_key.pub

11- Protegiu l'arxiu de claus SSH:

chmod 600 ~/.ssh/authorized_keys

12- Protegiu el directori SSH:

chmod 700 ~/.ssh

13- Sortiu de la sessió i torneu-hi a entrar. Si tot ha anat bé, hi podeu accedir sense introduir la contrasenya.


s) Des de la Raspberry a Linux

Feu el procés invers de l'apartat anterior (a on diu Raspberry serà la vostra màquina Linux i a on diu Linux serà la vostra Raspberry).

Túnel Invers

caption


t) Túnel invers

Des de Linux (canviant robot01.local per la IP assignada per la VPN del ZeroTier):

ssh -o ServerAliveInterval=30 -R 12345:localhost:22 pi@robot01.local

Fen servir el putty accediu a la Raspberry Pi Zero W assignada i feu una connexió a la vostra màquina Linux (canvieu smx2 pel vostre nom d'usuari a la màquina Linux):

ssh -p 12345 smx2@localhost

Un cop heu verificat el funcionament, sortiu dels dos terminals.

AutoSSH

Si el túnel invers deixa de funcionar (acostuma a ocórrer en xarxes molt ocupades o d'escassa qualitat, com el 3G), es pot utilitzar el paquet autossh en lloc de l'ssh per a establir la connexió que s’encarregarà de mantenir el túnel obert reiniciant automàticament la connexió.

u) autossh

Instal·leu l'autossh a la vostra màquina Linux:

sudo apt install autossh

Des de la vostra màquina Linux, executeu l'autossh (canvieu robot01.local per la IP assignada per la VPN del ZeroTier):

autossh -M 65500 -o ServerAliveInterval=30 -R 12345:localhost:22 pi@robot01.local


Fen servir el putty accediu a la Raspberry Pi Zero W assignada i feu una connexió a la vostra màquina Linux (canvieu smx2 pel vostre nom d'usuari a la màquina Linux):

ssh -p 12345 smx2@localhost

Un cop heu verificat el funcionament, sortiu dels dos terminals.

screen

Quan fem una connexió remota, i hem de fer accions que siguin llargues, pot haver el risc de perdre-hi la connexió (per exemple al fer un accés des del mòbil quan sou al tren i passeu per un túnel). Això implicarà haver de repetir l'acció.

Una bona idea és fer aquestes operacions en segon terme emprant l'screen

v) Persistència de les accions remotes

En cas de no tenir instal·lat l'screen a la Raspberry Pi Zero W assignada:

sudo apt install screen

Entreu a l'screen de la Raspberry Pi Zero W:

screen

Llegiu la informació i premeu Enter o espai per a saltar l'avís. Feu ping a una IP coneguda:

ping 1.1.1.1

Sortiu del screen prement Ctrl A + D (la tecla de Ctrl premuda al mateix temps que la tecla A i després, sense prémer ni el Ctrl ni la tecla A, premeu la tecla D)

Sortiu de la sessió:

exit

Torneu a entrar a la Raspberry Pi Zero W assignada i entreu:

screen -r


Malgrat heu sortit de la sessió, el ping ha seguit funcionant en segon terme. Per a cancel·lar el ping premeu Ctrl C.

Sortiu de la sessió de screen:

exit

Ara sou a la sessió normal. Sortiu de la sessió:

exit

Nota: Si per equivocació entreu a més d'un screen o es vol treballar amb més d'un screen alhora, per exemple:

pi@robot01:~ $ screen
[detached from 17737.pts-1.robot01]
pi@robot01:~ $ screen
[detached from 17747.pts-1.robot01]

Per diferenciar a quin screen s'accedeix hem d'indicar-ho. En cas de no saber quants screens estan funcionant:

pi@robot01:~ $ screen -list
There are screens on:
 17747.pts-1.robot01	(07/03/19 12:11:21)	(Detached)
 17737.pts-1.robot01	(07/03/19 12:11:06)	(Detached)
2 Sockets in /run/screen/S-pi.

Accés individualitzat als screens que estan funcionant:

pi@robot01:~ $ screen -r 17737.pts-1.robot01
[detached from 17737.pts-1.robot01]
pi@robot01:~ $ screen -r 17747.pts-1.robot01
[detached from 17747.pts-1.robot01]

Amb Ctrl A + D el programa screen segueix funcionant. Per a sortir-hi hem d'introduir exit.

Sortiu de la xarxa VPN gestionada per vosaltres

w) Assegureu-vos d'accedir a la Raspberry Pi Zero W assignada fent servir el nom de l'equip (per exemple rpizw07.local) o la IP assignada per la xarxa JESUITESFP. I no pas des de la IP assignada per la VPN de ZeroTier.

x) Desadjunteu-vos (leave) de les xarxes de ZeroTier gestionades per vosaltres.

y) Apagueu la Raspberry Pi Zero W:

sudo poweroff && exit