SSH je zkratka slova secure shell, což je označení pro program i pro kryptografický komunikační protokol používající TCP/IP.
Tento protokol byl vyvinutý jako náhrada za nedostatečně bezpečný telnet protokol a to tím, že SSH umožňuje utvořit zabezpečený kanál pro datovou komunikaci mezi dvěma entitami, typicky u architektury klient – server.
Specifikace protokolu obsahuje dvě verze, SSH-1 a SSH-2, které jsou vzájemně nekompatibilní.
SSH-1 je prvotní verze protokolu odpublikovaná jako freeware v roce 1995 ve Finsku výzkumníkem Tatu Ylönen, který později založil společnost SSH Communications Security Oyj.
SSH-2 je vylepšená verze protokolu, obsahující některé významné bezpečnostní doplňky (například kryptografický protokol pro distribuci klíčů Diffie-Hellmanov) a dnes je SSH-2 považován jako standard ve světě IT.
Aplikace SSH si nalezla mnoho praktických, každodenních použití.
-
Efektivně nahrazuje nezabezpečené protokoly jako jsou Telnet, rlogin,rsh
-
Pomocí SSH lze nahradit nezabezpečený protokol FTP a zajistit tak bezpečný transfer dat mezi dvěma stroji
-
Přes SSH lze utvořit tunel
Snad nejslavnější počítačový program poskytující šifrované sezení a užívající protokolu SSH je OpenSSH (OpenBSD Secure shell), který v roce 2000 užívalo více jak 2 miliony uživatelů na celém světě. OpenSSH má klientskou část a serverovou část. A o něm si dnes povíme více.
Za pomoci openSSH serveru si dnes ukážeme:
-
Jednoduché bezpečné připojení z klienta na server bez autentizace za pomocí klíčů
-
SSH tunel pro rychlý přístup do cizí sítě a bez nutnosti si konfigurovat např VPN tunel
Instalace na serveru
Serverová část je snadná k instalaci na vzdáleném stroji poslouží příkaz
sudo apt-get install openssh-server
Pojďme zeditovat nástavení SSH serveru na vzdáleném stroji. Příkazem níže se dostaneme do konfiguračního souboru OpenSSH serveru a podíváme se na některé nejzajímavější možnosti editace
sudo nano/etc/ssh/sshd_config
-
Port – je port, na kterém démon naslouchá. Můžeme jej libovolně změnit na jinou hodnotu, než jakou má defaultně a po restartu SSH serveru se změna ihned projeví.
-
PubkeyAuthentication – je proměnná povolující autorizaci ne pomocí hesla, ale pomocí asymetrické kryptografie privátních a veřejných klíčů.
-
PasswordAuthentication- Tímto povolujeme autentifikaci pomocí hesla
-
PermitRootLogin – tímto editujeme možnost povolení nebo zakázání root přístupu na přímo na server.
-
AuthorizedKeysFile – U této proměnné můžeme upravit absolutní cestu ke klíčům
-
X11Forwarding – Jak název napovídá, umožnuje nám pomocí tunelu si zobrazit graficky některé aplikace na stroji, na kterém je OpenSSH server a umožnuje ssh-forwarding.
Editaci SSH serveru můžeme provést dle syntaxe jak je uvedeno přímo v konfiguračním souboru. Většinou stačí odkomentovat proměnnou, nebo jen změnit yes/no. V Některých ohledech (například u PermitRootLogin je očekáváno specifické názvosloví). Zkrátka dle účelu si povolíme či upravíme proměnné tak, jak potřebujeme.
Po uložení editovaného souboru službu OpenSSH serveru vypněte a zapněte příkazem:
sudo service ssh restart
1. Zabezpečené připojení klient-server pomocí SSH a klíčů
Na lokálním, klientském stroji je potřeba mít dostupný balíček openssh-client. Standardně je openssh klient na všech distribucích by default, pokud jej ale nemáte, nainstalujte je v Debianu příkazem:
sudo apt-get install openssh-client
OpenSSH má takto několik doplňkových nástrojů pro plnohodnotnou práci, pro nás v tomto článku jsou nejzajímavější nástroj ssh-keygen sloužící k vytváření klíčů.
Na lokálním počítači můžeme provést editaci openSSH klienta v konfiguračním souboru dostupným v /etc/ssh/ssh_config
My jej nebudeme editovat, dodáváme informaci jako dodatek. V našem modelovém příkladě si ukážeme, jak na svém lokálním stroji vygenerujeme RSA klíč pomocé SSH-keygen, a nově vygenerovaný klíč poté naimportujeme na OpenSSH serveru jako autorizovaný klíč pro přístup.
Na lokáním stroji pod svým uživatelem zadejte příkaz:
ssh-keygen -t rsa
Jednoduše vše odsouhlaste. Všimněme si, že jsme si vygenerovali celkem dva páry klíču
-
id_rsa (privátní klíč) – ten si chraňte a nikdy jej nikomu nedávejte
-
id_rsa.pub (veřejný klíč) – ten můžeme libovolně importovat do různých strojů na kterých běží openSSH-server.
Na stroji na kterém běží OpenSSH server zkopírujeme obsah veřejného klíče id_rsa.pub pod naším uživatelským účtem a v adresář ~/.ssh vytvořte soubor s názvem authorized_keys To tohoto souboru vložte celý text id_rsa.pub z klienta.
Nalogování bez potřeby hesla poté je snadné, na našem lokálním stroji zadáme
ssh VzdalenyServerUserlogin@IpAdresaSSH-serveru -p Port
2. SSH forwarding
Představme si situaci, kdy na vzdáleném serveru se chceme dostat například na port 80, na kterém poslouchá apache2, ale nemáme přístup do hlavního firewallu. Nemáme možnost VPN tunelu. Řešení je například SSH-forward.
Další typický příklad je, když máme VPN koncentrátor (a současně i SSH server) a nechceme se připojit přes VPNku. Chceme se pouze dostat na webový port VPN klienta. I v takové chvíli nám pomůže SSH-forwarding svojí jednoduchostí.
SSH forwarding je mechanismus, jak si můžeme natunelovat přes SSH jen určitý port a otevřít si jej pro náš přístup. Modifikovaných variant SSH-forwardu je mnoho, my si budeme demonstrovat lokální SSH forward určitého portu na náš lokální stroj za účelem přístupu na daný port.
Na straně serveru je potřeba provést změnu v konfiguračním souboru.
sudo nano/etc/ssh/sshd_config
kde nalezneme proměnnou X11Forwarding, kterou odkomentujeme a necháme hodnotu yes
X11Forwarding yes
Je potřeba SSH demona restartovat příkazem
sudo service ssh restart
Před samotným rozborem SSH-Forwardu si musíme definvoat proměnné.
-
Open SSH server – je samostatný server, je pod veřejnou adresou PIP, běží na něm služba OpenSSH server pod portem Port3
-
Vzdálený stroj – Je stroj, který nás zajímá a nachází se ve stejném subnetu jako OpenSSH-server. OpenSSH-server na tento vzdálený stroj vidí. Tento stroj má Port2 a ten chceme vidět u nás na našem lokálním stroji namapovaný
-
Náš lokální stroj, to je náš počítač, na kterém si budeme otevírat Port1 a na Port1 bude namapovaný Port2 ze vzdáleného stroje
Pro ještě lepší pochopení dodávám i kresbu
Na linuxovém stroji u nás zadáme následující příkaz, který si podrobně rozebereme
ssh -L Port1:LIP:Port2 UserLogin@PIP -p Port3
-
SSH – L nám značí, že se jedná o lokální SSH forwarding
-
Port1 – je port, který se otevře bude u nás na našem PC a bude na tomto portu naslouchat vzdálená služba.
-
LIP – je Lokální IP adresa stroje, u kterého mapujeme jeho port
-
Port2 – je port, který mapujeme na vzdáleném stroji, na který se chceme dostat
-
UserLogin – Je na SSH serveru login, když se přihlašujeme
-
PIP – Je veřejná IP adresa našeho serveru
-
Port3 – Je Port na kterém OpenSSH-server naslouchá
Konkrétně může příkaz vypadat takto v Linuxu:
ssh -L 8406:172.23.12.55:8406 connectica@1.1.1.1 -p 7405
Nastavení v programu PUTTY
V putty si nakonfigurujeme připojení na vzdálený stroj na úvodní obrazovce
ve formátu Host name = PIP
Port = Port3
-
V putty si otevřeme vlevo dole sekci SSH – tunels
-
Vložíme Port1 jako Source port pole.
-
Vložíme LIP:Port2 do části Destination.
-
Potvrdíme tlačítkem Add, a poté klikneme na Open a můžeme se snadno protunelovat
Po úspěšném protunelování se na port dostaneme tak, že například ve webovém prohlížeči zadáme 127.0.0.1:Port1 a jsme na lokálním stroji.