GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara SSH Ke Wadah Docker

SSH adalah salah satu perintah yang paling sering digunakan di kotak alat sysadmin tetapi tidak biasa terlihat di samping Docker. Inilah cara Anda memasukkan SSH ke dalam container yang sedang berjalan dan mengapa Anda harus berpikir dua kali sebelum melakukannya.

Haruskah Anda Menggunakan SSH Dengan Kontainer Docker?

SSH-ing ke dalam wadah Docker umumnya merupakan praktik buruk yang harus Anda hindari. Hampir selalu lebih baik menggunakan docker exec perintah untuk memasukkan shell ke dalam container.

Pendatang baru Docker dapat tergoda untuk menggunakan SSH untuk memperbarui file di dalam wadah. Wadah dimaksudkan untuk sekali pakai sehingga harus diperlakukan sebagai tidak berubah setelah dibuat, kecuali untuk data persisten yang disimpan di dalam volume. Buat gambar baru dan mulai ulang penampung Anda saat Anda mengedit kode sumber.

Selain dari proses konfigurasi multi-langkah, menginstal SSH dalam gambar Docker menambahkan beberapa paket ketergantungan dan memperlihatkan vektor serangan potensial lainnya. Pada sistem dengan beberapa container aktif, Anda akan menjalankan beberapa proses SSH independen dan harus mengingat port yang benar untuk setiap container.

Alih-alih menambahkan SSH ke wadah individual, instal sekali di host fisik yang menjalankan Docker. Gunakan SSH untuk terhubung ke host Anda, lalu jalankan docker exec -it my-container bash untuk mengakses wadah individual.

Sementara docker exec adalah pendekatan yang disukai, masih ada skenario di mana SSH mungkin berguna. Anda dapat memperkenalkannya sebagai langkah sementara untuk berintegrasi dengan sistem penerapan lama. Ini juga dapat digunakan oleh beberapa IDE dan membangun alat untuk menyediakan kemampuan memuat ulang secara langsung selama pengembangan.

Menginstal Server SSH di Wadah Docker

Gambar dasar Docker yang paling populer disimpan dengan sengaja disederhanakan. Anda harus menambahkan server OpenSSH sendiri, bahkan pada image yang berasal dari distribusi sistem operasi populer.

Berikut ini contoh Dockerfile untuk gambar berbasis Debian:

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

Konfigurasi SSH dimodifikasi sehingga Anda dapat login sebagai root , pengguna default dalam wadah Docker. Untuk keamanan yang lebih baik, siapkan akun pengguna khusus sebagai gantinya:

RUN useradd -m -s /bin/bash sshuser

Ini membuat pengguna baru bernama sshuser dengan direktori home (-m ). -s switch menyetel shell login default pengguna ke Bash.

Penggunaan ENTRYPOINT memastikan layanan SSH selalu dimulai saat container melakukannya. Eksekusi kemudian diserahkan ke Bash sebagai proses latar depan wadah. Anda dapat menggantinya dengan biner aplikasi Anda.

Mengonfigurasi Otentikasi

Selanjutnya Anda perlu mengatur sistem otentikasi. Anda dapat menetapkan kata sandi untuk sshuser Anda akun dan login dengan itu:

RUN echo "sshuser:Changeme" | changepasswd

Cara yang lebih aman adalah dengan mengatur otentikasi kunci SSH. Anda harus membuat pasangan kunci di mesin klien Anda, lalu menyalin bagian publik ke dalam wadah. Dengan cara ini daemon SSH dapat memverifikasi identitas mesin Anda saat Anda terhubung.

Ubah Dockerfile Anda untuk mengatur .ssh folder konfigurasi untuk pengguna Anda. Salin kunci publik dari direktori kerja Anda, baik dengan docker cp perintah atau COPY instruksi di Dockerfile . Dalam kasus terakhir, kunci akan dimasukkan ke dalam gambar, dapat dilihat oleh siapa saja yang memiliki akses.

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

Urutan perintah ini membuat authorized_keys SSH file dengan id_rsa.pub kunci publik di direktori kerja Anda. Izin sistem file disesuaikan agar sesuai dengan persyaratan SSH.

Menghubungkan ke Penampung

Sekarang Anda siap untuk terhubung ke penampung Anda. Jalankan wadah dengan port 22 terikat ke host:

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

Menjalankan ssh [email protected] akan memberi Anda cangkang di dalam wadah Anda.

Anda dapat melewati pengikatan port jika Anda akan terhubung dari mesin yang menghosting wadah Docker. Gunakan docker inspect untuk mendapatkan alamat IP penampung Anda, lalu berikan ke perintah koneksi SSH.

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

Gunakan klien SSH di mesin Anda untuk terhubung ke container:

ssh [email protected]

# OR

ssh [email protected]

Anda harus menggunakan port alternatif jika Anda menjalankan server SSH terpisah di host atau Anda memiliki beberapa container yang memerlukan port 22. Berikut cara memulai koneksi saat SSH terikat ke port 2220:

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

ssh [email protected] -p 2220

Menyiapkan Pintasan Kontainer Dengan SSH Config

Anda dapat memanipulasi file konfigurasi SSH Anda untuk menyederhanakan koneksi ke wadah individual. Edit ~/.ssh/config untuk mendefinisikan host singkatan dengan port yang telah dikonfigurasikan sebelumnya:

Host my-container
    HostName 172.17.0.1
    Port 2220
    User sshuser

Sekarang Anda dapat menjalankan ssh my-container untuk menjatuhkan langsung ke wadah Anda. Ini membuatnya lebih mudah untuk mengatur beberapa koneksi tanpa mengingat IP dan port container.

Gunakan Dockssh untuk Menyederhanakan Pengelolaan Kontainer

Proyek Dockssh mengambil langkah lebih jauh dengan menyediakan daemon lain yang memungkinkan Anda menjalankan ssh [email protected] , tanpa konfigurasi SSH manual. Anda tidak perlu menginstal server SSH di wadah Anda; Dockssh secara otomatis mem-proxy koneksi SSH dan menjalankan docker exec yang benar perintah sebagai gantinya.

Anda harus menginstal Redis terlebih dahulu untuk menyimpan data konfigurasi Dockssh:

sudo apt install redis

Selanjutnya, tentukan wadah yang ingin Anda tampilkan dengan menambahkan catatan Redis dengan nama wadah dan kata sandi untuk koneksi SSH:

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

Kemudian unduh 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

Sekarang Anda dapat terhubung ke penampung Anda:

ssh [email protected] -p 22022

Dockssh mendengarkan pada port 22022 secara default. Firewall dibuka untuk mengizinkan koneksi masuk menggunakan port.

Anda akan dimintai kata sandi penampung saat Anda terhubung. Ini ditetapkan sebagai container-password-here dalam catatan Redis kami di atas.

Menggunakan Dockssh memudahkan SSH ke sejumlah besar container Docker. Pendekatan ini sangat ideal ketika Anda secara teratur terhubung ke wadah Anda dari host jarak jauh karena menyederhanakan dua langkah “SSH lalu docker exec ” urutan menjadi satu perintah yang mudah diingat.

Daftarkan Dockssh sebagai layanan sistem untuk penggunaan jangka panjang:

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

Aktifkan layanan menggunakan systemctl :

sudo systemctl enable dockssh.service
sudo systemctl start dockssh

Dockssh sekarang akan mulai secara otomatis ketika sistem Anda melakukan booting.

Ringkasan

Menggabungkan SSH dengan wadah Docker secara luas dianggap sebagai anti-pola namun masih digunakan dalam lingkungan pengembangan, pengujian, dan warisan. Jika tidak ada alternatif lain, Anda dapat menambahkan server SSH ke penampung Anda, menyalin kunci publik, dan terhubung melalui IP penampung atau pengikatan port host.

Admin sistem yang ingin mengelola sejumlah besar container Docker dari jarak jauh dapat mencoba Dockssh. Ini memungkinkan Anda menjalankan ssh familiar yang familier perintah melalui pemetaan di belakang layar yang mulus ke docker exec , memberi Anda yang terbaik dari kedua dunia menggunakan gambar yang tidak dimodifikasi.


Docker
  1. Cara Menjalankan MySQL Dalam Wadah Docker

  2. Cara Mendaftar Kontainer Docker

  3. Cara Keluar dari Kontainer Docker

  1. Cara menginstal WordPress menggunakan Docker

  2. Bagaimana Cara Menjalankan Program Di Dalam Wadah Docker?

  3. Cara Memasang Direktori Host Ke Wadah Docker

  1. Cara SSH ke dalam Running Docker Container dan Jalankan Perintah

  2. Cara Menetapkan IP Statis ke Wadah Docker

  3. Cara Menginstal Vim di Wadah Docker