Tento článek pokračuje v naší sérii článků o Linuxu a pokrývá mnoho užitečných funkcí a triků SSH ke zlepšení vaší každodenní produktivity. Naše vizuály vám pomohou porozumět nastavení SSH, správě konfiguračních souborů, autentizaci, práci s více klíči SSH a samozřejmě místnímu a vzdálenému přesměrování portů SSH. Staňte se mistrem SSH za 10 minut!
Co je SSH
Secure Shell neboli SSH je síťový protokol, který vám umožňuje bezpečně se připojit ke vzdálenému serveru a používat k jeho správě rozhraní konzoly.
Když navážete připojení SSH, server za vás spustí shellovou relaci. Poté můžete zadat příkazy do svého klienta SSH a budou spuštěny na vzdáleném serveru.

Správci systému používají tento protokol k bezpečnému připojení a správě vzdálených serverů Linux.
Jak funguje SSH
Jako každá síťová aplikace používá SSH dvě součásti:
- Klient SSH je aplikace, kterou nainstalujete do počítače, který budete používat pro připojení k počítači se systémem Linux v síti. Klient SSH naváže šifrované spojení mezi vaším počítačem a vzdáleným serverem.
- Server SSH je serverová aplikace naslouchající na TCP/IP portu 22 pro klientská připojení. Pokud klient poskytl správné přihlašovací údaje, server SSH vytvoří novou uživatelskou relaci a umožní vám spouštět vzdálené příkazy.

Ověření SSH
SSH umožňuje používat více různých metod ověřování. Nejpoužívanější jsou:
- Ověření hesla – budete požádáni o uživatelské jméno a heslo, abyste získali přístup ke vzdálenému hostiteli.
- Ověřování pomocí klíče SSH – používáte veřejný a soukromý klíč SSH k ověření uživatele.
Ověřování pomocí klíče SSH
Tato metoda ověřování je považována za bezpečnější než používání hesel. Funguje to takto:

Algoritmus ověřování pomocí klíče SSH:
- Klient zahájí připojení SSH.
- Server odešle zpět náhodnou zprávu.
- Klient zašifruje přijatou zprávu pomocí soukromého klíče SSH a odešle jej zpět na server.
- Server dešifruje klientovu zprávu pomocí veřejného klíče SSH . Pokud je zpráva stejná, server udělí přístup.
Použití ověřování heslem v SSH není bezpečné. Pokud stále používáte ověřování heslem, musíte jej co nejdříve změnit na ověřování pomocí klíče SSH.
Jak nainstalovat klienta SSH
Ve většině systémů Linux a macOS je server SSH již nainstalován a je k dispozici ve výchozím nastavení. Ale pokud hrajete s Linuxem na svém virtuálním počítači, možná budete muset nainstalovat.
Ubuntu
Pro distribuce Linuxu založené na deb můžete nainstalovat klienta SSH pomocí následujících příkazů:
sudo apt-get update
sudo apt-get -y install openssh-client
CentOS, Fedora, RedHat
U linuxových distribucí založených na yum můžete klienta SSH nainstalovat pomocí následujících příkazů:
sudo yum -y install openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
Windows
Pro operační systém Windows se PuTTY stal standardním de facto klientem SSH. Chcete-li jej nainstalovat, stáhněte si instalační program MSI z výše uvedeného odkazu a postupujte podle pokynů v části Jak nainstalovat PuTTY na Windows.
Zde je automatický způsob používání Chocolatey. Otevřete konzolu PowerShell v režimu „Spustit jako správce“) a proveďte následující příkazy:
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install putty -y

Jak nainstalovat SSH server
Ve většině systémů Linux a macOS je klient SSH již nainstalován a je k dispozici ve výchozím nastavení. Ale pokud hrajete s Linuxem na svém virtuálním počítači, možná budete muset nainstalovat.
Server SSH – Ubuntu
Pro distribuce Linuxu založené na deb můžete nainstalovat klienta SSH pomocí následujících příkazů:
sudo apt-get update
sudo apt-get -y install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
Server SSH – CentOS, Fedora, RedHat
U linuxových distribucí založených na yum můžete klienta SSH nainstalovat pomocí následujících příkazů:
sudo yum -y install openssh
sudo systemctl enable sshd
sudo systemctl start sshd
Server SSH – Windows
SSH server nelze nainstalovat na Windows. Ve světě Windows potřebujete k ovládání vzdálených serverů Windows používat Vzdálenou plochu a WinRM.
Vytvořit klíč SSH
Jakmile budete mít klienta SSH, můžete vytvořit soukromé a veřejné klíče SSH používané pro ověřování SSH Key-Based Authentication. Chcete-li vytvořit klíč SSH, spusťte v terminálu následující příkaz:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Tento příkaz vytvoří 4 kB klíč RSA:
~/.ssh/id_rsa
– Soukromý klíč SSH.~/.ssh/id_rsa.pub
– Veřejný klíč SSH.
Důležité: Soubor soukromého klíče SSH nesmí být nikdy nikomu zobrazen ani odeslán.
Nastavení ověřování pomocí klíče SSH
Chcete-li na serveru nastavit ověřování SSH Key-Based Authentication, musíte provést následující kroky:
- Přihlaste se na server.
- Přejděte do domovského adresáře uživatele.
- Upravit soubor ~/.ssh/authorized_keys a vložte obsah veřejného klíče soubor tam.
- Uložte změny.
~/.ssh/authorized_keys může obsahovat tolik záznamů o souborech veřejného klíče, kolik potřebujete. Mnoho různých lidí se tedy může připojit k serveru pomocí stejného přihlašovacího jména, ale jejich souborů soukromých klíčů.
Jak se připojit pomocí SSH
Ke vzdálenému serveru Linux se můžete připojit pomocí klienta SSH zadáním následujícího příkazu:
ssh remote_username@host_ip_address

Použít různé klíče SSH pro různé servery
Je to rozšířená situace, kdy možná budete muset použít různé soukromé soubory klíčů SSH pro přístup k různým serverům. Existuje několik způsobů, jak to udělat.
Zadání klíče SSH v příkazu připojení
Chcete-li zadat požadovaný soukromý klíč jako součást příkazu připojení SSH, použijte -i
příznak:
ssh -i ~/.ssh/another_private_key remote_username@host_ip_address
Použít agenta SSH
Pokud nemáte příliš mnoho soukromých klíčů, můžete použít agenta SSH.
SSH Agent je program, který načte váš soukromý klíč SSH do paměti a použije jej k předání autentizace SSH.
Linux
Spusťte ssh-agenta na pozadí:
eval "$(ssh-agent -s)"
Chcete-li přidat klíče SSH k agentovi, použijte následující příkazy:
ssh-add -K ~/.ssh/id_rsa
ssh-add -K ~/.ssh/another_private_key
Windows
Distribuce PuTTY obsahuje Pagent, který je umístěn v systémové liště a hraje stejnou roli. Klikněte pravým tlačítkem na Pagent a přidejte svůj klíč SSH.

Nyní klient SSH použije všechny načtené soukromé klíče jeden po druhém k předání autentizace během připojení SSH.
Konfigurační soubor SSH
Další užitečný způsob, jak nakonfigurovat parametry klienta SSH, je pomocí ~/.ssh/config
soubor.
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
Host exceptional.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/another_private_key
Ve výše uvedeném příkladu používáme výchozí ~/.ssh/id_rsa
soubor soukromého klíče pro všechny servery kromě exceptional.com
server. Pro exceptional.com
serveru, použijeme ~/.ssh/another_private_key
soubor.
Agent SSH a předávání klíčů
Další oblíbenou funkcí SSH, kterou denně používám, je přesměrování klíče SSH. Umožňuje vám používat místní klíče SSH pro připojení k různým serverům.
Přesměrování klíče SSH během spouštění klienta SSH můžete povolit zadáním -T
příznak:
ssh -T remote_username@host_ip_address
Nebo můžete tuto konfiguraci trvale povolit u vás ~/.ssh/config
soubor zadáním ForwardAgent yes
:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes

Přesměrování portu SSH
Protokol SSH vám umožňuje přesměrovat nejen komunikaci SSH Agenta prostřednictvím zabezpečeného kanálu SSH, ale také jakýkoli TCP provoz.
Pokud potřebujete přesměrovat provoz UDP, použijte nc
v kombinaci s SSH.
Existují dva typy možností přesměrování portů.
Přesměrování místního portu
Nejlepší způsob, jak vysvětlit přesměrování místního portu SSH, je podívat se na následující diagram.

V tomto diagramu Hostitel skoku server má soukromé připojení k serveru Amazon RDS PostgreSQL.
Klient notebook se může připojit k hostitelskému serveru Jump pomocí protokolu SSH.
Vlastník klienta laptop hledá způsob, jak se připojit k instanci Amazon RDS .
Funkce místního přesměrování portů SSH umožňuje navázání portu na klienta notebook. Provoz z vázaného portu je přesměrován přes Hostitel skoku serveru do instance Amazon RDS .
V důsledku toho se k instanci RDS připojíte z klienta notebooku, musíte nakonfigurovat pgsql
na notebooku a připojte se k localhost:15432
.
Zde je návod, jak je třeba vytvořit připojení SSH k Hostiteli skoku z klienta Linuxu nebo macOS notebook:
ssh -L 127.0.0.1:15432:rds-endpoint-url:5432 ec2-user@jump_host_ip
Pokud používáte PuTTY, musíte provést změny v Připojení – SSH – Tunely před připojením k hostiteli Jump.

Vzdálené přesměrování portů
Vzdálené předávání portů SSH je o něco zajímavější funkcí, která řeší opačný problém. Umožňuje vám svázat port na vzdáleném serveru ssh a předat provoz přicházející na tento port do sítí za hostitelem klienta SSH.
Zde je příklad.

V našem příkladu máme Izolovaný server , která nemá přístup k internetu, a klient notebook, který používáme k připojení k Jump Host .
Provoz mezi Jump Host a Izolovaný server není omezeno.
Musíme povolit Izolovaný server pro připojení k internetu. Jak to můžeme udělat?
Můžeme například spustit kontejner Docker s proxy serverem Squid na klientském notebooku na portu 8080. Poté se můžeme připojit k Jump Host pomocí SSH. Funkce vzdáleného předávání portů je svázat port 8081
na Hostitele skoku k přesměrování provozu na klienta port notebooku 8080
.
Výsledkem je Izolovaný server bude moci používat http://jump_host_ip:8081
jako proxy server.
Chcete-li povolit vzdálené předávání portů během připojení SSH v systému Linux nebo macOS:
ssh -R 8081:localhost:8080 ec2-user@jump_host_ip
Pro hostitele PuTTY a Windows:

Přehled
V tomto článku jsem popsal mnoho užitečných funkcí SSH, které používám při své každodenní práci. Doufám, že je také začnete používat. Pokud něco není jasné, kontaktujte mě v sekci komentářů níže. Rád vám pomohu.
Pokud pro vás byl tento článek užitečný, neváhejte mi pomoci jej rozšířit do světa!