GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak SSH do kontejneru Docker

SSH je jedním z nejpoužívanějších příkazů v sadě nástrojů správce systému, ale není běžně k vidění vedle Dockeru. Zde je návod, jak můžete SSH do běžícího kontejneru a proč byste si to měli dvakrát rozmyslet.

Měli byste používat SSH s kontejnery Docker?

SSH-ing do kontejneru Docker je obecně špatný postup, kterému byste se měli vyhnout. Téměř vždy je lepší použít docker exec příkaz k získání shellu uvnitř kontejneru.

Nováčci Dockeru mohou být v pokušení používat SSH k aktualizaci souborů v kontejneru. Kontejnery jsou však určeny k jednorázovému použití, takže by se s nimi mělo po vytvoření zacházet jako s neměnnými, s výjimkou trvalých dat uložených uvnitř svazků. Při úpravě zdrojového kódu vytvořte nový obrázek a restartujte kontejner.

Kromě vícefázového konfiguračního procesu přidává instalace SSH do obrazu Dockeru několik závislých balíčků a odhaluje další potenciální vektor útoku. V systému s několika aktivními kontejnery budete spouštět několik nezávislých procesů SSH a budete si muset zapamatovat správný port pro každý kontejner.

Místo přidávání SSH do jednotlivých kontejnerů jej nainstalujte jednou na fyzického hostitele, na kterém běží Docker. Pomocí SSH se připojte k hostiteli a poté spusťte docker exec -it my-container bash pro přístup k jednotlivým kontejnerům.

Zatímco docker exec je preferovaný přístup, stále existují scénáře, kdy by SSH mohlo být užitečné. Mohli byste to zavést jako dočasné opatření pro integraci se staršími systémy nasazení. Může být také používán některými IDE a nástroji pro sestavení, které poskytují možnosti živého načítání během vývoje.

Instalace serveru SSH do kontejneru Docker

Nejoblíbenější základní obrázky Dockeru jsou záměrně uspořádané. OpenSSH server si budete muset přidat sami, a to i na obrázky odvozené z populárních distribucí operačního systému.

Zde je příklad Dockerfile pro obraz založený na Debianu:

RUN apt-get update && apt-get install -y openssh-server
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

ENTRYPOINT service ssh start && bash

Konfigurace SSH je upravena, takže se můžete přihlásit jako root , výchozí uživatel v kontejneru Docker. Pro větší zabezpečení si místo toho nastavte vyhrazený uživatelský účet:

RUN useradd -m -s /bin/bash sshuser

Tím se vytvoří nový uživatel s názvem sshuser s domovským adresářem (-m ). -s přepínač nastaví výchozí přihlašovací shell uživatele na Bash.

Použití ENTRYPOINT zajišťuje, že služba SSH se vždy spustí, když se kontejner spustí. Provedení je pak předáno Bashovi jako proces na popředí kontejneru. Můžete to nahradit binárním souborem vaší aplikace.

Konfigurace ověřování

Dále musíte nastavit autentizační systém. Svému sshuser můžete přiřadit heslo a přihlaste se pomocí tohoto účtu:

RUN echo "sshuser:Changeme" | changepasswd

Bezpečnějším způsobem je nastavení ověřování pomocí klíče SSH. Na klientském počítači budete muset vytvořit pár klíčů a poté zkopírovat veřejnou část do kontejneru. Tímto způsobem může démon SSH ověřit identitu vašeho počítače, když se připojíte.

Změňte svůj Dockerfile pro nastavení .ssh konfigurační složku pro vašeho uživatele. Zkopírujte veřejný klíč ze svého pracovního adresáře, buď pomocí docker cp příkaz nebo COPY instrukce v Dockerfile . V druhém případě by byl klíč zapečen do obrázku, viditelný pro každého, kdo má přístup.

COPY id_rsa.pub /home/sshuser/.ssh/authorized_keys
RUN chown -R sshuser:sshuser /home/sshuser/.ssh
RUN chmod 600 /home/sshuser/.ssh/authorized_keys

Tato sekvence příkazů vytváří authorized_keys SSH soubor s id_rsa.pub veřejný klíč ve vašem pracovním adresáři. Oprávnění souborového systému jsou upravena tak, aby odpovídala požadavkům SSH.

Připojování ke kontejneru

Nyní jste připraveni se připojit ke svému kontejneru. Spusťte kontejner s portem 22 navázaným na hostitele:

docker run -p 22:22 my-image:latest

Spuštění ssh [email protected] vám dá shell uvnitř vašeho kontejneru.

Vazbu portu můžete přeskočit, pokud se budete připojovat ze stroje, který je hostitelem kontejneru Docker. Použijte docker inspect abyste získali IP adresu svého kontejneru, pak ji předejte příkazu připojení SSH.

docker inspect <id-or-name> | grep 'IPAddress' | head -n 1

Pro připojení ke kontejneru použijte klienta SSH na vašem počítači:

ssh [email protected]

# OR

ssh [email protected]

Pokud na hostiteli provozujete samostatný server SSH nebo máte více kontejnerů, které potřebují port 22, budete muset použít alternativní port. Zde je návod, jak zahájit připojení, když je SSH vázáno na port 2220:

docker run -p 22:2220 my-image:latest

ssh [email protected] -p 2220

Nastavení zástupců kontejneru pomocí SSH Config

S konfiguračním souborem SSH můžete manipulovat a zjednodušit tak připojení k jednotlivým kontejnerům. Upravte ~/.ssh/config k definování zkrácených hostitelů s předkonfigurovanými porty:

Host my-container
    HostName 172.17.0.1
    Port 2220
    User sshuser

Nyní můžete spustit ssh my-container spadnout přímo do vašeho kontejneru. To usnadňuje žonglování s více připojeními, aniž byste si pamatovali IP a porty kontejneru.

Použijte Dockssh ke zjednodušení správy kontejnerů

Projekt Dockssh to posouvá o krok dále tím, že poskytuje dalšího démona, který vám umožní spouštět ssh [email protected] , bez jakékoli ruční konfigurace SSH. Do svých kontejnerů nemusíte instalovat server SSH; Dockssh automaticky zprostředkovává připojení SSH a spouští správný docker exec místo toho příkaz.

Chcete-li uložit konfigurační data Dockssh, musíte nejprve nainstalovat Redis:

sudo apt install redis

Dále definujte kontejnery, které chcete vystavit, přidáním záznamu Redis s názvem kontejneru a heslem pro připojení SSH:

redis-cli set dockssh:my-container:pass "container-password-here"

Poté si stáhněte Dockssh:

sudo curl https://github.com/alash3al/dockssh/releases/download/v1.1.0/dockssh_linux_amd64 -O /usr/local/bin/dockssh
sudo chmod +x /usr/local/bin/dockssh
sudo ufw allow 22022

# Start DockSSH server
dockssh

Nyní se můžete připojit ke svému kontejneru:

ssh [email protected] -p 22022

Dockssh ve výchozím nastavení naslouchá na portu 22022. Brána firewall se otevře, aby umožnila příchozí připojení pomocí portu.

Při připojení budete vyzváni k zadání hesla kontejneru. Toto bylo nastaveno jako container-password-here v našem záznamu Redis výše.

Použití Dockssh usnadňuje SSH do velkého počtu kontejnerů Docker. Tento přístup je ideální, když se pravidelně připojujete ke svým kontejnerům ze vzdáleného hostitele, protože zjednodušuje dvoukrokové „SSH pak docker exec ” sekvence do jediného zapamatovatelného příkazu.

Zaregistrujte Dockssh jako systémovou službu pro dlouhodobé používání:

sudo nano /etc/systemd/system/dockssh.service
[Unit]
Description=Dockssh service
After=network.target

[Service]
type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/local/bin/dockssh

[Install]
WantedBy=multi-user.target

Povolte službu pomocí systemctl :

sudo systemctl enable dockssh.service
sudo systemctl start dockssh

Dockssh se nyní spustí automaticky při startu vašeho systému.

Přehled

Kombinace SSH s kontejnery Docker je obecně považována za anti-vzor, ​​ale stále má své využití ve vývojových, testovacích a starších prostředích. Pokud neexistuje žádná alternativa, můžete přidat server SSH do svého kontejneru, zkopírovat veřejný klíč a připojit se přes IP kontejneru nebo vazbu hostitelského portu.

Správci systému, kteří chtějí vzdáleně spravovat velké množství kontejnerů Docker, mohou vyzkoušet Dockssh. Umožňuje vám spouštět známé ssh příkazy prostřednictvím bezproblémového mapování ze zákulisí na docker exec , která vám poskytne to nejlepší z obou světů pomocí neupravených obrázků.


Docker
  1. Jak spustit MySQL v kontejneru Docker

  2. Jak připojit hostitelský adresář do kontejneru Docker

  3. Jak vypsat Docker kontejnery

  1. Jak nainstalovat WordPress pomocí Docker

  2. Jak spustit program uvnitř kontejneru Docker?

  3. Jak opustit kontejner Docker

  1. Jak vložit SSH do běžícího kontejneru Docker a spustit příkazy

  2. Jak přiřadit statickou IP ke kontejneru Docker

  3. Jak nainstalovat Vim do kontejneru Docker