logo
Published on

LinuxコマンドラインからDockerコンテナにSSH接続

Authors

この記事では、LinuxコマンドラインのBash言語を使用して、DockerコンテナにSSH接続する方法について紹介します。

Dockerfile

まず、Dockerコンテナ内でSSH接続を設定するためのDockerfileを作成します。以下がその内容です。

# Dockerfile
FROM ubuntu:18.04

# SSHサーバーのインストールと設定
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:pw' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

# SSHのポートを公開
EXPOSE 22

# SSHサーバーを起動
CMD ["/usr/sbin/sshd", "-D"]

このDockerfileは、Ubuntu 18.04ベースのDockerイメージを使用し、SSHサーバーをインストールして設定します。SSHポートを22番に公開し、ルートユーザーのパスワードをpwに設定します。また、SSH接続を許可する設定も行います。

次に、このDockerfileを使用してDockerイメージをビルドし、コンテナを起動します。

docker image build . -t ssh_server:1.1
docker run -d -p 56022:22 ssh_server:1.1
ssh root@127.0.0.1 -p 56022 # パスワードはpw(異なるIPを使用する場合は、`ip addr`コマンドでローカルIPを確認してください)

直接環境を作る場合(ubuntu)

Dockerコンテナ内で直接SSH接続を設定する場合、以下の手順に従います。

: <<'NOTE'
通常、通常のUbuntu(VirtualBoxなどからインストールした場合)では、`openssh-server`を単にインストールするだけでSSH接続が可能です。ただし、Dockerイメージはできるだけ最小限の構成を持つことが理念であり、通常のUbuntuデスクトップバージョンとは異なる点がある可能性があります。一般的な用途には問題ありませんが、確認しておく価値はあります。

したがって、`apt install openssh-server`だけでSSH接続しようとすると、次のようなエラーが発生する可能性があります。

root@conoha:~# ssh root@127.0.0.1 -p 57022
ssh_exchange_identification: Connection closed by remote host
NOTE

# コンテナに入り、必要なパッケージをインストールしてSSHサーバーを起動します
docker run -p 57022:22 -it -v /media/ownCloud/pg/docker/mnt/:/docker yuis/env:1.2
apt-get update && apt-get install -y openssh-server
echo 'root:pw' | chpasswd
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
service ssh restart # または `/usr/sbin/sshd -D` など
# コンテナを終了

ssh root@127.0.0.1 -p 57022 # IPアドレスはおそらく127.0.0.1で固定ですが、確認するために `ip addr`コマンドを実行できます

リモートからSSH接続

SSH接続をトンネリングして使用する場合、以下の方法があります。

ssh -t yuis@150.95.0.0 ssh -p 55022 root@127.0.0.1

また、ポートフォワーディングをトンネリングして行うこともできます。

ssh -t -R 52698:localhost:52698 -L 4567:localhost:4567 yuis@150.95.0.0 ssh -p 55022 -L 4567:localhost:4567 -R 52698:localhost:52698 root@127.0.0.1

# 例:
ASUS:/mnt/c/pg$ ssh -t -R 52698:localhost:52698 -L 4567:localhost:4567 yuis@150.95.0.0 ssh -p 55022 -L 4567:localhost:4567 -R 52698:localhost:52698 root@127.0.0.1

root@541e5aed5dcf:~# ruby - <<EOS -o 0.0.0.0
require 'sinatra'

get '/' do
'Hello docker!'
end
EOS

ASUS:/mnt/c/pg$ curl localhost:4567
Hello docker!

今回はDockerコンテナへのSSH接続とトンネリングに関する基本的な手順と説明についてでした。 Dockerに関する理解が不足している場合は、VirtualBoxの使用も検討してみるとよいかもしれません。

各ツール価格:1万円~

サポート:6千円/1時間*

見積もり:無料


*一律・1時間未満切上

👉 詳細はこちらから。📧 お問い合わせ

ご覧いただき、ありがとうございます。本サイトの運営コストは広告をご覧いただくことで賄われています。様々な有名サービスが本サイト経由限定・期間限定で無料・割引・キャッシュバックになる、お得なプロモーションをご利用いただくことで、本サイトの運営をご支援いただけます。