SSH znamená bezpečný shell. Jedná se o šifrovaný protokol pro vzdálené přihlášení. Jakmile bude nastaven na každém uzlu, může být použit ke komunikaci s různými dalšími uzly v dané síti.
Hlavní výhody SSH jsou:
- SSH používá ke generování veřejných a soukromých klíčů šifrovací algoritmus RSA, takže vniknutí je extrémně obtížné.
- Protože SSH je protokol vzdáleného přihlášení, lze jej nakonfigurovat na notebooku. To znamená, že můžete svůj notebook použít k bezdrátovému připojení ke clusteru Raspberry Pi.
- Protože protokoly jako SCP (Secure Copy) a SFTP (Secure File Transfer Protocol) běží nad SSH, můžete je použít k přenosu souborů a složek přímo z jednoho uzlu do druhého.
- SSH podporuje jednorázové přihlášení. To znamená, že při prvním přihlášení musíte zadat pouze přihlašovací údaje. Od druhého přihlášení již to není nutné.
Začněme generováním klíčů SSH. Aby bylo možné použít SSH, měly by být klíče generovány mezi dvěma nebo více uzly, aby mohlo dojít k přenosu dat. K šifrování používáme RSA. Všimněte si, že na jednom uzlu vygenerujeme klíče a ten bude mít soukromé nebo tajné klíče. Stejný uzel také vygeneruje veřejný klíč, který bude zaslán dalším uzlům, které chtějí odeslat data tomuto uzlu. Proveďte následující příkazy na uzlu, ze kterého chcete odeslat data. Tento uzel nazývám „hlavní uzel“ a ostatní uzly „pracovní uzel“.
cd ~
ssh-keygen --t rsa --C "[email protected]"
Tyto dva příkazy nastavují výchozí umístění /home/pi/_ssh/id_rsa pro uložení klíče.
Pokud budete požádáni o heslo, ponechte heslo prázdné. Jakmile je toto hotovo, dalším krokem je odeslání veřejných klíčů do pracovního uzlu. Ujistěte se tedy, že máte pracovní uzel připojený k síti. Nyní můžeme nastavit šifrovací klíče na pracovním uzlu, takže použitá IP adresa je IP adresa pracovního uzlu. Spusťte následující příkaz na hlavním uzlu.
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir .ssh;cat >> .ssh/authorized_keys"
Jakmile jsou klíče SSH vygenerovány, můžeme se přihlásit k jakémukoli jinému uzlu, do kterého byly klíče odeslány z hlavního uzlu, a použít k tomu příkaz:
ssh [email protected]
Ve výše uvedeném příkazu „pi“ označuje uživatele, ve výchozím nastavení budou mít všechna PI používající Raspbian uživatele jako „pi“ a „192.168.3.216“ je IP mého klienta. budete ji muset změnit, aby reprezentovala IP adresu vašeho klienta PI.
To bude vyžadovat heslo. Jakmile se přihlásíte, všechny příkazy, které zadáte, poběží na tomto uzlu a ne na hlavním serveru, ale výstup se zobrazí na samotném hlavním serveru. SSH lze také použít ke spouštění příkazů přímo na ostatních uzlech. Chcete-li například změnit název hostitele různých uzlů, použijte tyto příkazy ve formátu, jak je uvedeno níže:
ssh [email protected] 'sudo echo "cilent001" | sudo nano /etc/hostname'
ssh [email protected] 'sudo echo "cilent002" | sudo nano /etc/hostname'
ssh [email protected] 'sudo echo "cilent003" | sudo nano /etc/hostname'
Jak je ukázáno výše, můžeme použít SSH ke spouštění příkazů v jiných uzlech/PI, aniž bychom se do nich skutečně přihlašovali. Následuje další příklad bezpečného vypnutí uzlu v síti s IP adresou 192.168.3.216
ssh [email protected] 'sudo poweroff'
Následující obrázek ukazuje, jak se SSH používá k přihlášení k pracovnímu uzlu (192.168.3.216) ak získání řídicího terminálu z pracovního uzlu zpět k hlavnímu uzlu.
Jak je vidět na obrázku výše, přihlášení do pracovního uzlu probíhá přímo, tedy bez zadání hesla, s výjimkou prvního. Ale pokaždé, když se ovládání terminálu vrátí do hlavního uzlu (192.168.3.215), je nutné zadat přihlašovací údaje. Tímto způsobem je master vždy chráněn před vnější hrozbou.
Takže po vydání příkazů přes SSH jiným uzlům může nastat situace, kdy je třeba data odeslat do více uzlů. Pokud je počet uzlů malý, můžeme se ke každému uzlu přihlásit ručně, připojit jej k displeji a klávesnici a odesílat soubory. Ale toto je vysoce neefektivní způsob, jak to udělat, když je velikost clusteru velká. Jednodušší způsob by bylo použít SCP k odesílání souborů. Nainstalujte SCP pomocí příkazu:
sudo apt-get install scp
Vezměte prosím na vědomí, že některé linuxové OS mohou být dodávány s předinstalovaným SCP, ale Raspbian, který jsme používali, jej neměl. Obecný příkaz k odeslání jednoho souboru je:
scp (cesta k souboru na místním zařízení) [chráněno e-mailem] (cesta ke vzdálenému umístění)
Příklad:
scp /pi/example.c [email protected] /pi/project
Zde je vzdálené zařízení, do kterého se mají odeslat data, rozpoznáno podle IP adresy. Mnoho souborů v adresáři lze odeslat pomocí rekurzivní volby (-R). Například:
scp -r /pi/project [email protected] /pi/project
Výše uvedený příkaz rekurzivně přenese všechny soubory v /pi/project z místního hostitele do rekurzivně složky ve vzdáleném hostiteli identifikovaném IP adresou.
Obrázek níže ukazuje různé příkazy ssh a scp. Začíná vypsáním obsahu aktuální složky a poté rekurzivně volá „scp“, aby se všechny soubory v aktuální složce přenesly do složky v jiném uzlu. Poté se přihlásí do druhého uzlu a ukáže, že scp úspěšně přenesl obsah do cíle.
SCP lze použít s několika dalšími možnostmi k provedení převodu, aby byly splněny některé z našich podmínek. Zde je několik možností:
-
Můžeme použít volbu "-p", abychom zachovali časy úprav, časy přístupu a režimy z původního souboru. Příklad:
scp -p test.c [email protected]:~/
Zde bude v cílovém uzlu zachován čas přístupu, režimy přístupu a čas poslední úpravy souboru "test.c".
-
SCP umožňuje komprimaci souborů před jejich odesláním přes síť do cíle. To je velmi užitečné, když je soubor (soubory) na přenos velmi velký, a proto komprimace zvýší rychlost, jakou budou odesílány. K tomu použijeme volbu "-C". Příklad:
scp -pC test.c [email protected]:~/
Zde vidíme, že lze použít více možností a obě jejich funkce budou aplikovány na příkaz.
-
Programování soketů zahrnuje odesílání a přijímání dat přes porty a SCP lze použít k odesílání dat přes konkrétní porty vzdálenému hostiteli. To lze provést pomocí volby "-P". Příklad:
scp -P 21938 test.c [email protected]:~/
Zde je port používaný k odesílání dat 1938.
-
Mohou nastat případy, kdy nebudete chtít znát stav přenosu souborů, jako na obrázku výše. Má smysl vypnout stav přenosu, když je velké množství souborů. Můžeme to udělat pomocí volby "-q". Příklad:
scp -rq ~/files [email protected]:~/files
Zde je obsah složky s názvem soubory přenesen do složky souborů na jiném uzlu, ale stavový řádek a ladicí zprávy jsou všechny deaktivovány, což se nezobrazuje.