ウェブサイト検索

Web ベースの SSH をセットアップする方法: ステップバイステップ ガイド


Docker を使用して Web ベースの SSH を設定する方法は次のとおりです。この記事では、ブラウザをターミナル コンソールに簡単に変える手順を詳しく説明します。

サーバーへのリモートアクセスと管理は単に便利なだけではありません。それは必需品です。 Docker のようなコンテナ化テクノロジーにより、このプロセスはより合理化され、アクセスしやすくなりました。

私たちの包括的なガイドでは、Docker の機能を活用して Web ベースの Secure Shell (SSH) アクセスをセットアップする方法を説明します。段階的な手順に従って、標準の Web ブラウザを完全に機能するターミナル コンソールに変換する方法を学びます。

このガイドを終えると、堅牢な Web ベースのターミナルがすぐに使えるようになり、コマンドの実行、ファイルの管理、サーバーの保守をすべてブラウザーから快適に行うことができるようになります。それでは、Web ベースの SSH の可能性を解き放ってみましょう。

前提条件

コンテナ化された Web ベースの SSH をデプロイするには、Docker と Docker Compose がインストールされている必要があります。したがって、Docker をまだインストールしていない場合は、次のガイドのいずれかが役立ちます。

  • Ubuntu 22.04 に Docker をインストールする方法
  • Debian 12 に Docker をインストールする方法 (Bullseye)
  • AlmaLinux/Rocky Linux に Docker をインストールする方法
  • Fedora に Docker をインストールする方法
  • Linux Mint 21 に Docker をインストールする方法
  • Raspberry Pi に Docker をインストールする方法

もう 1 つの重要なコンポーネントは Docker Compose です。 Docker とは別に提供されることに注意してください。したがって、Docker Compose を使用するには、Docker をインストールする必要があります。そうしないと、Compose が機能しません。

幸いなことに、Linux システムにまだインストールされていない場合でも、インストールは非常に簡単です。 Docker Compose をインストールするには、次の 2 つのコマンドを入力します。

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

Docker化されたスタックには何が含まれますか?

Web ベースの SSH をインストールして、ブラウザを SSH ターミナルとして使用できるようにするには、Caddy、Wetty、OpenSSH の 3 つの個別のコンテナを使用します。これらのコンテナは、Docker Compose を使用して一緒にデプロイします。

以下は、Docker 化された Web ベースの SSH スタック内のさまざまなコンポーネントがどのように相互作用するかを図示したものです。

キャディ: リバース プロキシ

Caddy は、Let’s Encrypt SSL 証明書を自動的に取得および更新できる機能でよく知られている、多用途でシンプルかつ超高速な Web サーバーであり、Web ベースの SSH 導入の理想的な候補となっています。

私たちの場合、Caddy はリバース プロキシ サーバーとして機能し、Wetty コンテナの前に座ってリクエストを転送し、クライアントの応答を配信します。さらに、安全な HTTPS 接続と、Web ベースの SSH 実装へのユーザー名とパスワードで保護されたアクセスが提供されます。

WeTTY: HTTP および HTTPS 経由のターミナル

WeTTY (Web + TTY の略) は、HTTP および HTTPS 上で実行されるターミナル エミュレーター ソフトウェアです。これは本質的に、ユーザーが Web ブラウザーを通じてコマンドライン インターフェースにアクセスできるようにする Web ベースのインターフェースです。

言い換えれば、Web ブラウザ内にターミナルが提供され、追加のソフトウェアをインストールすることなく、インターネットにアクセスできる任意のマシンから簡単にアクセスできるようになります。

OpenSSH: SSH サーバー

ここで説明している SSH サーバーは、WeTTY コンテナが接続するサーバーです。しかし、ここで理解すべき重要な点があります。 WeTTY も OpenSSH コンテナも、Web ベースの SSH を設定するホスト サーバーに直接リンクしません。

したがって、これを、インストールされている特定のサーバーへのアクセスのみを許可するソリューションとして考えないことが重要です。

代わりに、ジャンプホストのように考えてください。これは、OpenSSH コンテナが仲介者として機能することを意味します。そこから、ホスト サーバーおよび他のリモート SSH サーバーへの SSH 接続を確立できます。

Docker Compose を使用した Web ベースの SSH

最初のステップは、Docker Compose デプロイメント ファイルを配置するフォルダーを作成することです。次に、それに切り替えます。ここからは、このガイドのさらに下にあるすべてのコマンドをその場所から実行する必要があります。

mkdir webssh
cd webssh

さらに、最初に、インストールではサービスにアクセスできるドメイン名として「ssh.tmplinux.com」を使用し、Caddy が有効な SSL 証明書を自動的に発行することを明確にしています。 。

もちろん、この名前を自分が所有し、以下の構成で使用する名前に置き換える必要があります。

Dockerネットワークの作成

最初のステップとして、Docker ネットワークを作成し、「webssh_network」という名前を付けましょう。 」

docker network create webssh_network

これにより、デプロイメント内のすべてのコンテナーが相互に直接可視化され、対話できるようになります。同時に、Web ベースの SSH スタックは、ネットワーク内のホスト上の他の Docker コンテナから分離され、セキュリティ層が追加されます。

キャディー

前述したように、Caddy は WeTTY コンテナの前でリバース プロキシとして機能します。 「docker-compose.yaml」 ファイルのサービス セクションを以下に示します。まだコピーしないでください。ファイルの最終かつ完全なバージョンは、このガイドの後半で確認できます。

ここでは、その仕組みを説明するためにこれを示しているだけであり、これは、以下のコンテナ化サービスのすべてのスニペット (WeTTY および OpenSSH) にも当てはまります。

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 は、Docker 化されたデプロイメントでポート (80 および 443) を公開する唯一のコンテナーであり、Web ベースの SSH インストールにブラウザーを介して外部から直接アクセスできるようにします。

スタック内の他のすべてのコンテナはポートを公開しません。代わりに、以前に定義した分離された「webssh_network」Docker ネットワーク内のサービス名を介して相互に通信します。

Caddy は Docker メタデータをスキャンして、特定のコンテナーにサービスを提供する必要があることを示すラベルを探す必要があるため (詳細はこちら)、コンテナーのソケットを使用してホスト上の Docker ソケットをマウントします。

ラベルを見つけた後、DNS 名またはコンテナー IP アドレスによって Docker サービスを指すサイト エントリとプロキシを含むメモリ内「Caddyfile」 (メインの Caddy Web サーバー構成ファイル) を生成します。

最後に、名前付き Docker ボリューム「caddy_data」を作成することで、データの永続性も確保します。これを理解することが重要です。Docker コンテナはデータを永続的に保持するのではなく、本質的に一時的なものです。

そのため、Caddy を起動すると、Let’s Encrypt と通信して、選択したドメインの SSL 証明書を取得します。データの永続性を確保するためのアプローチである名前付き Docker ボリュームを使用すると、Caddy コンテナーを再起動するたびにこの証明書が失われることがなくなります。

ウェッティ

WeTTY は私たちの導入の中心です。これは、Web ブラウザで SSH ターミナルを直接使用できるようにするパズルのピースで、インターネット接続のあるどのコンピュータからでも簡単にアクセスできるようにします。

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

ここでは、以前に説明したすべてのラベルを「ラベル」セクションで設定します。これは、Caddy が WeTTY コンテナーと対話するときにリバース プロキシの役割を効果的に実行するために必要です。

もちろん、「docker-compose.yaml」ファイルの最終バージョン (以下を参照) では、行 (「caddy: ssh.tmplinux.com ”)を実際のドメイン名に置き換えます。

ここで少し作業する必要があります。以下の行により、Web ベースの SSH アクセスをユーザー名とパスワードで保護できます。ユーザー名として「bobby」を選択し、パスワードは安全なハッシュ形式になっています。

caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH

 ここでは、「mypassword」などのパスワードを設定する簡単な方法を示します。以下のコマンドを実行するだけです。一時的な Caddy コンテナーをダウンロードして実行します。次に、hash-password コマンドは、「–plaintext」オプションの後に指定した文字列をハッシュします。

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

最後に、出力を取得し、base64 ビット エンコードにデコードします。

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

これで、「mypassword」のハッシュされたバージョンを含む最後の文字列を使用する準備が整いました。ユーザー部分には、「john」など、好きな名前を選択できます。最終バージョンは次のようになります。

caddy.basicauth.john: JDJhJDE0JE9rQVpRUVhZcVd5SDRRWGV5U2NvaS5YVk9zeUdnTkF3bGY3ckMzT2d0eGtWdldHelM0cmRl

WeTTY スニペットの残りの部分では、WeTTY が実行され、Caddy が接続するデフォルトのポート 3000 を指定します。 「環境」の部分では、「SSHHOST」と「SSHPORT」ディレクティブを使用して、サービスの名前「」を指定します。 >ssh-server」、および SSH サーバーコンテナが実行されているポート「2222」(以下で説明します)。

また、「SSHUSER」は、WeTTY コンテナが SSH コンテナに接続するために使用するデフォルトのユーザー「用語」を指定します。

SSHサーバー

Web ベースの SSH デプロイメントの最後のコンテナである 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

ここで注意すべき点は、「USER_NAME」で設定されるユーザー名(「term」)とパスワード(「term」)です。 「USER_PASSWORD」オプション。つまり、SSH コンテナは、初期化時に指定されたパスワードを割り当ててこのユーザーを作成します。

さらに、コンテナの「config」ディレクトリをホスト システム上の「config」ディレクトリにリンクします。このディレクトリは、< を実行するディレクトリ フォーム内に自動的に作成されます。docker-compose コマンドは、コンテナーが初めて実行されるときに実行され、ログ ファイル、SSH キーなどのデータの永続性を確保します。

Docker Compose ファイル

ここで、これまでのすべての部分を組み立てて、Web ベースの SSH Docker 化アプリの最終バージョンを作成しましょう。まず、「docker-compose.yaml」ファイルを作成し、次の内容を貼り付けます。

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

上記のデプロイメントでは、次の点を忘れずに調整してください。

  • wetty > ラベル > キャディ: 「ssh.tmplinux.com」を使用しているドメインに置き換えます。
  • wetty > ラベル > caddy.basicauth.bobby: マニュアルの前半で説明したように、「bobby」を任意のユーザー名に変更し、作成したパスワードを使用します。

さらに、「ssh-server」部分で「USER_NAME」と「USER_PASSWORD」設定のデフォルトのユーザー名とパスワードを置き換えることをお勧めします。 、現在は「期間」と「期間」ですが、好みに応じて異なります。また、サービスの「wetty」セクションの「SSHUSER」に選択したユーザー名を忘れずに使用してください。

Docker Compose を使用した Web ベースの SSH のデプロイ

最後に、Docker Compose を使用して、Docker 化された Web ベースの SSH スタックを実行できます。これを行うには、「docker-compose.yaml」ファイルを作成した「webssh」ディレクトリから以下のコマンドを実行します。

バックグラウンドでコンテナをデプロイして実行します。

docker-compose up -d

Docker イメージのダウンロードが開始されます。インターネット接続速度に応じて、手順全体に数秒から数分かかる場合があります。

最終的には、以下のような画面が表示され、Docker 化された Web ベースの SSH インストールが正常にデプロイされ、稼働していることが通知されます。

Docker はインターネットからイメージをダウンロードする必要があるため、コンテナーの起動に最初の遅延が発生するのは初めてです。その後、Linux システム上でローカルにすでに使用できるようになるため、後続の実行には数秒かかります。

Web ブラウザ経由で Web ベースの SSH にログインします。

ウェブブラウザを開き、「https://your-domain-name/wetty」アドレスを指定します。この場合、これは「 https://ssh.tmplinux.com/wetty。ユーザー名とパスワードを尋ねるウィンドウが表示されます。 「docker-compose.yaml」 ファイルで設定したものを使用してください。

ログインに成功すると、WeTTY は、OpenSSH (「ssh-server」) コンテナーに設定されたデフォルト ユーザーのパスワードを入力するように求めます。パスワードを入力するだけで準備完了です。

これで、ブラウザが SSH コンソールになり、他の SSH サーバーにリモートで接続できるようになります。この設定を使用すると、インターネット接続と Web ブラウザーだけがあれば、どこからでもサーバーを管理できます。

結論

Docker Compose を使用して Web ベースの SSH をセットアップすると、ブラウザがターミナル コンソールに効率的に変換されます。この記事で説明した手順に従うと、Web ブラウザから直接リモート サーバーに迅速かつ安全にアクセスできます。

ぜひ試してみて、デジタル ライフにもたらす利便性と効率性を満喫してください。お時間をいただきありがとうございました!以下のコメント欄でお気軽にあなたの経験を共有したり、質問したりしてください。

関連記事: