Raspberry Pi jako webserver - SSH

Co by to bylo za webový server, pokud bychom k němu nemohli přistupovat vzdáleně. Nejlepším řešením je Secure Shell neboli SSH. Jedná se o zabezpečený komunikační protokol, který umožňuje vzdáleně ovládat počítač z jiných počítačů. Občas je potřeba rychle něco restartovat nebo opravit.

Co potřebuji k připojení pomocí SSH?

Aktivace tohoto protokolu nám zpřístupní příkazovou řádku (terminál) na Raspberry Pi z jiného počítače. Počítačem, ze kterého se k SSH připojujeme, může být bežný počítač s Windows, macOS, nebo dokonce „chytrý“ telefon. Jediná věc, kterou je potřeba si opatřit, je SSH klient. Na počítačích s operačními systémy Linux nebo macOS je SSH klient součástí systému. Na počítači s Microsoft Windows je potřeba stáhnout si nástroj putty. Pokud se potřebujete k SSH připojit z mobilního telefonu, je potřeba si stáhnout z marketu tu správnou aplikaci. Pro mobilní telefony s OS Android mohu doporučit například JuiceSSH.

A co je tedy potřeba udělat pro to, abychom se mohli na Raspberry Pi pomocí SSH připojit?

Od listopadu 2016 již není SSH po instalaci operačního systému Raspbian standardně zapnuté a je potřeba ho zapnout.

První možnost se nachází v menu Menu → Preferences → Raspberry Pi Configuration. Na záložce Interfaces je potřeba zakliknout u SSH Enabled.

Druhou možností je využít nástroj raspi-config. Spuštění tohoto nástroje je provede příkazem
sudo raspi-config Objeví se modrá obrazovka s jednotlivými možnostmi. Povolení SSH se nachází pod číslem 8 Advanced Options. Po zvolení této možnosti se zobrazí další obrazovka, na které je již SSH možné zapnout nebo vypnout.

Zjištění přihlašovacích údajů

Nyní je již možné se k „malině“ připojit SSH klientem. Potřebujeme znát IP adresu Raspberry a jméno uživatele. IP adresu zjistíme pomocí nástroje ifconfig. Do terminálu tedy zadáme
ifconfig Ve výpisu je potřeba hledat inet addr: Pod touto možností se skrývá IP adresa Raspberry Pi. Výpis a hledání si můžeme usnadnit použitím příkazu grep
ifconfig | grep "inet addr:" Výstup pak vypadá například takto:
inet addr:127.0.0.1 Mask:255.0.0.0
inet addr:192.168.1.104 Bcast:192.168.1.255 Mask:255.255.255.0
a adresa Raspberry je tedy 192.168.1.104.

Pokud známe IP adresu počítače tak už potřebujeme jen uživatelské jméno a heslo. Standardně, po nainstalování operačního systému Raspbian, je vytvořen uživatel s uživatelským jménem pi a heslem raspberry.

Toto heslo doporučuji před začátkem používá SSH změnit na něco bezpečnějšího. Tato změna se provádí příkazem
passwd Po zadání tohoto příkazu je potřeba zadat aktuální heslo, pak nové heslo, nakonec ještě jednou nové heslo pro potvrzení.

Takže známe všechny údaje potřebné pro přihlášení.

SSH z Linuxu

V operačním systému Linux je SSH připojení k Raspberry Pi asi nejjednodušší. Stačí spustit terminál a zadat
ssh uživatelské_jméno@ip_adresa
například ssh pi@192.168.1.104

Po spuštění tohoto příkazu se program zeptá na heslo.
Pokud se z počítače připojujete poprvé tak zadání hesla předchází ještě dialog potvrzení otisku klíče. V tomto dialogu je potřeba zadat yes ;-).

SSH z Windows

Pro připojení k SSH z operačního systému Windows je nutné stáhnout program PuTTY. Po spuštění pomocí putty.exe se zobrazí okno PuTTY Configuration. Do pole Host Name (or IP address) zadejte IP adresu Raspberry Pi. Port ponechte 22 a Connection Type nastavte na SSH.

Putty

Po klinutí na tlačítko Open se spustí přihlašování. Opět při prvním pokusu o přihlášení se zobrazí okno s potvrzením otisku klíče. Terminál následně zobrazí hlášení login as:. Zadejte přihlašovací jméno uživatele (pi). Pak se terminál zeptá na heslo.

Tak jsem připojen a co dál?

V tomto okamžiku jsme připojeni na terminál Raspberry Pi a můžeme provádět příkazy.
Můžeme pracovat se souborovým systémem. Kopírovat soubory (příkaz cp), vytvářet adresáře (mkdir), mazat soubory nebo adresáře (rm).
Můžeme editovat soubory. Například editorem nano nebo vim.
Můžeme dokonce instalovat nebo odinstalovávat aplikace. Na Raspberry se provádí příkazem sudo apt-get install abc nebo sudo apt-get remove xyz.

Připojení se ukončuje příkazem
exit

Jak SSH zabezpečit?

Ssh_keys

Přihlašování jménem a heslem není příliš bezpečné. Pro přístup na SSH z internetu je lepší využít ssh klíče. Velká spousta uživatelů totiž ponechává standardní přihlašovací údaje a jen někteří změní heslo. Pokud ponecháte standardní údaje, tak velmi brzo nebude Raspberry Vaše, ale bude ho mít v moci někdo jiný. Pokud změníte heslo, tak s největší pravděpodobností použijete nějaké slovníkové heslo, které útočník hrubou silou také nejspíše brzy prolomí.

SSH klíče jsou tedy výrazně bezpečnějším řešením.

Pomocí nástroje
ssh-keygen si vygenerujete dvojici klíčů.
Klíče je dobré chránit heslem, protože při případném odcizení soukromého klíče ho nebude moci uživatel neznající heslo použít. Klíče jsou uloženy v adresáři .ssh. Soubor s názvem id_rsa je soukromý klíč, který střežte jako oko v hlavě. Soubor id_rsa.pub je pak veřejný klíč, který musí být uložen na serverech, k nimž se chcete pomocí svého soukromého klíče připojovat.

Veřejný klíč je tedy nutné nahrát na Raspberry.
scp ~/.ssh/id_rsa.pub uživatelské_jméno@ip_adresa:/home/uživatelské_jméno
ssh uživatelské_jméno@ip_adresa
uživatelské_jméno@ip_adresa:-$ mkdir .ssh
uživatelské_jméno@ip_adresa:-$ cat id_rsa.pub >> .ssh/authorized_keys
Touto sekvencí příkazů nahrajeme veřejný klíč na Raspberry, vytvoříme adresář .ssh v domovském adresáři uživatele a do souboru auhtorized_keys v adresáři .ssh a pak tento veřejný klíč zapíšeme.

Po odhlášení a opětovném přihlášení již bude systém požadovat heslo k soukromému klíči a ne heslo uživatele.

Pokud přihlašování pomocí SSH klíče funguje, je možné v zabezpečování pokračovat.
V souboru /etc/ssh/sshd_config je dobré nastavit následující:

PermitRootLogin no Zakázání přihlášení jako uživatel root. Další možností je PermitRootLogin without-password, která způsobí, že jako uživatel root bude možné se přihlásit jen pomocí SSH klíče a ne jménem a heslem.

PermitEmptyPasswords no Zakázání přihlašování pomocí uživatelů bez hesla.

PasswordAuthentication no Tímto nastavením zakážeme přihlašování jménem a heslem a jediná možnost bude pomocí SSH klíče. Pozor ale na ztrátu klíče! :-)

Zdroje:
https://www.raspberrypi.org/magpi-issues/MagPi53.pdf
https://www.linuxexpres.cz/praxe/sprava-linuxoveho-serveru-uvod-do-ssh-pro-spravce

Raspberry Pi, Webserver

- (28. 7. 2017)
Kája z Norska
Kája z Norska

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.