Ricerca nel sito web

Come configurare un SSH basato sul Web: una guida passo passo


Ecco come configurare SSH basato sul Web con Docker. Il nostro articolo analizza i passaggi per trasformare facilmente il tuo browser in una console terminale.

Accedere e gestire i server da remoto non è solo una comodità; è una necessità. Con le tecnologie di containerizzazione come Docker, questo processo è diventato più snello e accessibile.

La nostra guida completa è qui per mostrarti come sfruttare la potenza di Docker per configurare l'accesso Secure Shell (SSH) basato sul web. Seguendo le nostre istruzioni passo passo, imparerai come trasformare il tuo browser web standard in una console terminale completamente funzionale.

Al termine di questa guida avrai a portata di mano un robusto terminale basato sul Web, che ti consentirà di eseguire comandi, gestire file e mantenere facilmente i tuoi server, il tutto comodamente dal tuo browser. Quindi, tuffiamoci e sblocchiamo il potenziale di SSH basato sul web!

Prerequisiti

Per distribuire un SSH basato sul Web containerizzato è necessario che siano installati Docker e Docker Compose. Pertanto, se non hai già installato Docker, una delle seguenti guide ti sarà utile:

  • Come installare Docker su Ubuntu 22.04
  • Come installare Docker su Debian 12 (Bullseye)
  • Come installare Docker su AlmaLinux/Rocky Linux
  • Come installare Docker su Fedora
  • Come installare Docker su Linux Mint 21
  • Come installare Docker su Raspberry Pi

L'altro componente essenziale è Docker Compose. Ricorda, viene fornito separatamente da Docker. Pertanto, è necessario installare Docker per utilizzare Docker Compose; in caso contrario, Compose non funzionerà.

Fortunatamente, installarlo è piuttosto semplice, anche se non è già sul tuo sistema Linux. Per installare Docker Compose, digitare i due comandi seguenti:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Cosa include il nostro stack dockerizzato?

Per installare SSH basato sul Web, consentendoti di utilizzare il browser come terminale SSH, utilizzeremo tre contenitori separati: Caddy, Wetty e OpenSSH, che distribuiremo insieme utilizzando Docker Compose.

Di seguito è riportata una rappresentazione grafica di come interagiscono i diversi componenti nel nostro stack SSH basato sul Web dockerizzato.

Caddy: proxy inverso

Caddy è un server web versatile, semplice e velocissimo noto per la sua capacità di ottenere e rinnovare automaticamente i certificati SSL Let's Encrypt, rendendolo un candidato ideale per la nostra implementazione SSH basata sul Web.

Nel nostro caso, Caddy fungerà da server proxy inverso, seduto di fronte al contenitore Wetty, inoltrando richieste e fornendo risposte al client. Inoltre, ci fornirà una connessione HTTPS sicura e un accesso protetto da nome utente e password alla nostra implementazione SSH basata sul web.

WeTTY: terminale su HTTP e HTTPS

WeTTY (abbreviazione di Web + TTY) è un software di emulazione di terminale che funziona su HTTP e HTTPS. È essenzialmente un'interfaccia basata sul Web che consente agli utenti di accedere a un'interfaccia della riga di comando tramite il proprio browser web.

In altre parole, fornisce un terminale all'interno di un browser web, rendendolo facilmente accessibile da qualsiasi macchina con accesso a Internet senza richiedere installazioni di software aggiuntivi.

OpenSSH: server SSH

Il server SSH di cui stiamo parlando è quello a cui si connette il contenitore WeTTY. Ma c’è un punto cruciale da capire qui. Né WeTTY né il contenitore OpenSSH si collegheranno direttamente al server host su cui configuriamo il nostro SSH basato sul web.

Pertanto, è importante non considerarla come una soluzione che ti garantisce l’accesso solo al server specifico su cui è installata.

Invece, pensalo come un host di salto. Ciò significa che il contenitore OpenSSH funge da intermediario. Da esso è possibile stabilire una connessione SSH al server host e a qualsiasi altro server SSH remoto.

SSH basato sul Web con Docker Compose

Il primo passaggio è creare la cartella in cui verranno inseriti i file di distribuzione Docker Compose. Quindi passa ad esso; da qui in poi dovrai eseguire tutti i comandi più avanti in questa guida da quella posizione.

mkdir webssh
cd webssh

Inoltre, fin dall'inizio, chiariamo che la nostra installazione utilizzerà “ssh.tmplinux.com” come nome di dominio su cui sarà accessibile il servizio e per il quale Caddy rilascerà automaticamente un certificato SSL valido .

Naturalmente, devi sostituire questo nome con quello che possiedi e utilizzare nelle configurazioni seguenti.

Crea rete Docker

Come primo passo, creiamo la nostra rete Docker e chiamiamola "webssh_network. "

docker network create webssh_network

In questo modo, garantiamo che tutti i contenitori nella nostra distribuzione avranno visibilità diretta tra loro in modo che possano interagire. Allo stesso tempo, lo stack SSH basato sul web sarà isolato dagli altri contenitori Docker sul nostro host nella sua rete, il che aggiunge un livello di sicurezza.

Caddy

Come accennato in precedenza, Caddy fungerà da proxy inverso davanti al contenitore WeTTY. La sua sezione di servizio dal nostro file "docker-compose.yaml" è riportata di seguito. Per favore non copiarlo ancora; la versione finale e completa del file può essere vista più avanti in questa guida.

Lo mostriamo qui solo per spiegare come funziona, che si applica anche a tutti i seguenti snippet (WeTTY e OpenSSH) dei nostri servizi containerizzati di seguito.

caddy:
    image: lucaslorentz/caddy-docker-proxy:ci-alpine
    container_name: reverse-proxy
    ports:
      - 80:80
      - 443:443
    environment:
      - CADDY_INGRESS_NETWORKS=webssh_network
    networks:
      - webssh_network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - caddy_data:/data
    restart: unless-stopped

Caddy è l'unico contenitore nella nostra distribuzione dockerizzata che espone le porte (80 e 443), consentendo all'installazione SSH basata sul Web di essere accessibile dal mondo esterno direttamente tramite il browser.

Tutti gli altri contenitori nel nostro stack non espongono porte; comunicano invece tra loro tramite i nomi dei servizi all'interno della rete Docker isolata “webssh_network” definita in precedenza.

Poiché Caddy deve scansionare i metadati di Docker, cercando etichette che indichino che dovrebbe servire un contenitore specifico (maggiori informazioni qui), montiamo il socket Docker sull'host con quello del contenitore.

Dopo aver trovato le etichette, genera un "Caddyfile" in memoria (un file di configurazione del server Web Caddy principale) con voci del sito e proxy che puntano al servizio Docker tramite il nome DNS o l'indirizzo IP del contenitore.

Infine, garantiamo anche la persistenza dei dati creando un volume Docker denominato "caddy_data". Questo è importante da capire: i contenitori Docker non conservano i dati in modo permanente: sono temporanei per natura.

Quindi, quando avvii Caddy, entra in contatto con Let's Encrypt per ottenere un certificato SSL per il dominio scelto. Utilizzando un volume Docker denominato, un approccio per garantire la persistenza dei dati, ti assicuri che questo certificato non venga perso ogni volta che riavvii il contenitore Caddy.

WeTTY

WeTTY è il cuore della nostra implementazione: è il pezzo del puzzle che ti consente di utilizzare un terminale SSH direttamente nel tuo browser web, semplificando l'accesso da qualsiasi computer dotato di connessione Internet.

wetty:
    image: wettyoss/wetty
    container_name: wetty
    labels:
      caddy: ssh.tmplinux.com
      caddy.basicauth: /*
      caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH
      caddy.reverse_proxy: "{{upstreams 3000}}"
    environment:
      - SSHHOST=ssh-server
      - SSHPORT=2222
      - SSHUSER=term
    networks:
      - webssh_network
    restart: unless-stopped
    depends_on:
      - ssh-server

Qui impostiamo tutte le etichette discusse in precedenza nella sezione “etichette”. Ciò è necessario affinché Caddy possa svolgere efficacemente il suo ruolo di proxy inverso quando interagisce con il contenitore WeTTY.

Naturalmente, nella versione finale del file “docker-compose.yaml” (mostrato sotto), non dimenticare di sostituire la riga (“caddy: ssh.tmplinux.com ") con il tuo nome di dominio effettivo.

Dobbiamo lavorare un po' adesso. La riga seguente ci consente di proteggere il nostro accesso SSH basato sul Web con un nome utente e una password. Abbiamo scelto "bobby" come nome utente e la password è in formato sicuro e con hash.

caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH

 Ecco un modo semplice per impostare la password, ad esempio "la mia password". Basta eseguire il comando seguente. Scaricherà ed eseguirà un contenitore Caddy temporaneo. Quindi, il comando hash-password eseguirà l'hashing della stringa fornita dopo l'opzione “–plaintext”.

docker run --rm caddy caddy hash-password --plaintext mypassword

Infine, prendi l'output e decodificalo nella codifica base64 bit.

echo -n '$2a$14$OkAZQQXYqWyH4QXeyScoi.XVOsyGgNAwlf7rC3OgtxkVvWGzS4rde' | base64

La stringa finale che contiene la versione con hash di "mypassword" è ora pronta per essere utilizzata. Per la parte utente, puoi scegliere il nome che preferisci, ad esempio "john". Ecco come sarebbe la versione finale:

caddy.basicauth.john: JDJhJDE0JE9rQVpRUVhZcVd5SDRRWGV5U2NvaS5YVk9zeUdnTkF3bGY3ckMzT2d0eGtWdldHelM0cmRl

Il resto dello snippet WeTTY specifica la porta predefinita 3000 su cui viene eseguito WeTTY e alla quale il Caddy dovrebbe connettersi. Nella parte “ambiente”, utilizzando le direttive “SSHHOST” e “SSHPORT”, specifichiamo il nome del servizio, “ssh-server", e la porta "2222" su cui è in esecuzione il contenitore del server SSH, descritto di seguito.

Inoltre, "SSHUSER" specifica l'utente predefinito, "term", che il contenitore WeTTY utilizzerà per connettersi a quello SSH.

Server SSH

Siamo arrivati all'ultimo contenitore della nostra distribuzione SSH basata sul Web, il server SSH.

ssh-server:
    image: lscr.io/linuxserver/openssh-server
    container_name: ssh-server
    hostname: ssh-server
    environment:
      - PUID=1000
      - PGID=1000
      - PASSWORD_ACCESS=true
      - USER_NAME=term
      - USER_PASSWORD=term
    networks:
      - webssh_network
    volumes:
      - ./config:/config
    restart: unless-stopped

Le cose a cui prestare attenzione qui sono il nome utente ("term ") e la password ("term ") impostati tramite "USER_NAME" e Opzioni "USER_PASSWORD". In altre parole, il contenitore SSH creerà questo utente al momento dell'inizializzazione assegnando la password specificata.

Inoltre, colleghiamo la directory “config” del contenitore a quella “config” sul nostro sistema host, che verrà creata automaticamente all'interno del modulo di directory in cui eseguiremo il docker-compose la prima volta che viene eseguito il contenitore, garantendo la persistenza dei dati come file di registro, chiavi SSH, ecc.

Docker Componi file

Ora assembliamo tutti i pezzi precedenti in una versione finale della nostra app dockerizzata SSH basata sul web. Innanzitutto, crea un file "docker-compose.yaml" e incolla il seguente contenuto.

nano docker-compose.yaml
version:  "3.8"
services:

  caddy:
    image: lucaslorentz/caddy-docker-proxy:ci-alpine
    container_name: reverse-proxy
    ports:
      - 80:80
      - 443:443
    environment:
      - CADDY_INGRESS_NETWORKS=webssh_network
    networks:
      - webssh_network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - caddy_data:/data
    restart: unless-stopped

  wetty:
    image: wettyoss/wetty
    container_name: wetty
    labels:
      caddy: ssh.tmplinux.com
      caddy.basicauth: /*
      caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH
      caddy.reverse_proxy: "{{upstreams 3000}}"
    environment:
      - SSHHOST=ssh-server
      - SSHPORT=2222
      - SSHUSER=term
    networks:
      - webssh_network
    restart: unless-stopped
    depends_on:
      - ssh-server

  ssh-server:
    image: lscr.io/linuxserver/openssh-server
    container_name: ssh-server
    hostname: ssh-server
    environment:
      - PUID=1000
      - PGID=1000
      - PASSWORD_ACCESS=true
      - USER_NAME=term
      - USER_PASSWORD=term
    networks:
      - webssh_network
    volumes:
      - ./config:/config
    restart: unless-stopped

volumes:
  caddy_data: {}

networks:
  webssh_network:
    external: true

Ricordarsi di modificare quanto segue nella distribuzione di cui sopra:

  • wetty > label > caddy: sostituisci "ssh.tmplinux.com" con il dominio che stai utilizzando.
  • wetty > label > caddy.basicauth.bobby: cambia "bobby" con qualsiasi nome utente che preferisci e utilizza la password che hai creato, come descritto in precedenza nel manuale.

Inoltre, consigliamo anche nella parte “ssh-server” di sostituire il nome utente e la password predefiniti nelle impostazioni “USER_NAME” e “USER_PASSWORD” , che attualmente sono "term" e "term", con i diversi che preferisci. Inoltre, ricorda di utilizzare il nome utente che hai scelto per "SSHUSER" nella sezione "wetty" del servizio.

Distribuzione di SSH basato sul Web con Docker Compose

Infine, possiamo eseguire il nostro stack SSH basato sul Web dockerizzato utilizzando Docker Compose. Per fare ciò, esegui il comando seguente dalla directory "webssh" in cui abbiamo creato il nostro file "docker-compose.yaml".

Distribuisci ed esegui i contenitori in background:

docker-compose up -d

Verrà avviato il download delle immagini Docker. L'intera procedura può richiedere da pochi secondi ad alcuni minuti, a seconda della velocità della connessione Internet.

Alla fine, dovresti vedere una schermata simile a quella qui sotto, che ti informa che la tua installazione SSH basata sul web dockerizzata è stata distribuita con successo ed è attiva e funzionante.

Il ritardo iniziale nell’avvio dei container sarà solo la prima volta perché Docker deve scaricare immagini da Internet. Successivamente, tutte le esecuzioni successive richiederanno pochi secondi poiché saranno già disponibili localmente sul tuo sistema Linux.

Accedere a SSH basato sul Web tramite browser Web

Apri un browser web e puntalo all'indirizzo "https://nome-dominio/wetty", che, nel nostro caso, è un " https://ssh.tmplinux.com/wetty. "Apparirà una finestra che richiede il nome utente e la password. Utilizza quelli configurati nel file "docker-compose.yaml".

Una volta effettuato l'accesso con successo, WeTTY ti chiederà di digitare la password per l'utente predefinito impostato nel contenitore OpenSSH ("ssh-server"). Basta inserire la password e sei a posto!

Ora il tuo browser diventa una console SSH, permettendoti di connetterti ad altri server SSH in remoto. Con questa configurazione, hai solo bisogno di una connessione Internet e di un browser web per gestire i tuoi server da qualsiasi luogo.

Conclusione

La configurazione di SSH basato sul Web con Docker Compose trasforma in modo efficiente il tuo browser in una console terminale. Seguendo i passaggi descritti nel nostro articolo, puoi accedere in modo rapido e sicuro ai server remoti direttamente dal tuo browser web.

Quindi vai avanti, provalo e goditi la comodità e l'efficienza che apporta alla tua vita digitale. Grazie per il tuo tempo! Sentiti libero di condividere le tue esperienze o porre domande nei commenti qui sotto.

Articoli correlati: