ホストOSからコンテナ内のUbuntuにSSH接続できるようにするための手順です。
1. Ubuntuコンテナの作成
まず、DockerでUbuntuコンテナを作成し、ホストのポート1022をコンテナの22番ポートにフォワーディングして、SSH接続できるようにします。
コマンド
docker run -d -p 1022:22 --name ubuntu-ssh ubuntu:latest bash -c "apt update && apt install -y openssh-server && service ssh start && /usr/sbin/sshd -D"
※sudo docker run -d -p 1022:22 --name ubuntu-ssh ubuntu:latest tail -f /dev/null
sudo docker exec -it ubuntu-ssh bash
apt-get update
apt-get install -y openssh-server
#apt-get install sudo
#usermod -aG sudo <username>
service ssh start
こちのほうがうまくいく
-
docker run -d
: バックグラウンドでコンテナを起動します。 -
-p 1022:22
: ホストのポート1022をコンテナの22番ポートにフォワーディングします(SSH接続用)。 -
--name ubuntu-ssh
: コンテナにubuntu-ssh
という名前を付けます。 -
bash -c
: コンテナ起動時に以下のコマンドを順番に実行します:-
apt update
: パッケージリストを更新 -
apt install -y openssh-server
: OpenSSHサーバーをインストール -
service ssh start
: SSHサーバーを起動 -
/usr/sbin/sshd -D
: SSHデーモンをフォアグラウンドで起動し続ける(これによりコンテナが停止しません)
-
2. ユーザーの作成とパスワード設定
SSHで接続するために、新しいユーザーを作成し、パスワードを設定します。
2.1 コンテナ内に入る
まず、コンテナ内にアクセスします。
docker exec -it ubuntu-ssh bash
※ sshサービスが起動されない場合は、次のコマンドで起動する。
service ssh start
2.2 ユーザーの作成
次に、SSH接続用のユーザーを作成します。
adduser yourusername
ここで、yourusername
を好きなユーザー名に置き換えてください。パスワードを設定するように求められます。
3. ホストからコンテナにSSH接続
ホストマシンからSSHクライアントを使用して、コンテナに接続します。ポート1022を指定して接続します。
SSH接続コマンド
ssh -p 1022 yourusername@localhost
-
-p 1022
: ホストのポート1022を指定します(コンテナの22番ポートにフォワードされています)。 -
yourusername
: 先ほど作成したユーザー名です。
接続すると、先ほど設定したパスワードを求められるので、入力してログインします。
4. コンテナ再起動時に自動でSSHサーバーを起動する
コンテナを再起動しても、SSHサーバーが自動的に起動するように設定します。
再起動ポリシーの設定
コンテナを再起動してもSSHサーバーが起動するようにするため、--restart
オプションを追加します。例えば、次のようにコンテナを起動します。
docker run -d -p 1022:22 --name ubuntu-ssh --restart unless-stopped ubuntu:latest bash -c "apt update && apt install -y openssh-server && service ssh start && /usr/sbin/sshd -D"
-
--restart unless-stopped
: コンテナが手動で停止されない限り、自動的に再起動します。
これにより、ホストマシンの再起動後でも、コンテナは自動的に再起動し、SSHサーバーが動作するようになります。
5. 動作確認とトラブルシューティング
5.1 コンテナのステータス確認
コンテナが正常に動作しているか確認するには、以下のコマンドを使用します。
docker ps
ubuntu-ssh
が一覧に表示されていれば、コンテナは正常に動作しています。
5.2 SSH接続テスト
ホストから再度SSH接続を試して、問題がないか確認します。
ssh -p 1022 yourusername@localhost
もし接続できない場合、以下を確認してください。
- ポートフォワーディングの設定が正しいか (
1022:22
) - コンテナ内でSSHサーバーが正しく起動しているか (
service ssh status
) - 作成したユーザーのパスワードが正しく設定されているか
まとめ
-
Ubuntuコンテナの作成とSSHサーバーのインストール:
-
docker run
でコンテナを作成し、SSHサーバーをインストールして起動。 - フォアグラウンドで
sshd
を起動し、コンテナが停止しないように設定。
-
-
ユーザー作成とパスワード設定:
-
adduser
コマンドでSSH接続用のユーザーを作成し、パスワードを設定。
-
-
ホストからSSH接続:
- ホストのポート1022経由で、SSHクライアントを使って接続。
-
自動再起動設定:
- コンテナを再起動した際にSSHサーバーが自動的に再起動するように設定。
これで、ホストOSからSSHでUbuntuコンテナに接続できる環境が整い、コンテナが停止することなく常に動作する状態になります。
追伸:再起動ポリシーの設定は以下で良かったかも。
docker run -d -p 1022:22 --name ubuntu-ssh --restart unless-stopped ubuntu:latest bash