LoginSignup
9
15

More than 5 years have passed since last update.

『一般ユーザーでssh接続できるDocker環境』をDockerファイルで作成する

Posted at

リモートサーバーにssh接続をして作業をするという機会は多いと思います。

Dockerとssh接続できるようになれば、仮想のリモートサーバーとして扱えるためssh接続を利用したテストをローカルで行うことができます。
今回、『一般ユーザーでssh接続できるDocker環境』を作成するDockerファイルを用意したのでその共有をしたいと思います。

公開されている『ssh接続できるDocker環境』を作成するDockerファイル

こちらでssh接続できるDockerファイルが共有されているのでこれを利用します。

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
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

# For executing shellscript
RUN apt-get install -y git less vim sudo
RUN useradd -m isucon
RUN echo 'isucon:isucon' | chpasswd
RUN usermod -aG sudo isucon

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

オリジナルのDockerファイルに一般ユーザーを作成する手順を追加します。
今回はisuconというsudo権限をもつ一般ユーザーを作成しています。

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
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

+ # Create User
+ RUN apt-get install -y git less vim sudo
+ RUN useradd -m isucon
+ RUN echo 'isucon:isucon' | chpasswd
+ RUN usermod -aG sudo isucon
+ RUN chsh -s /bin/bash isucon

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Dockerファイルをビルドして環境を構築する

作成したDockerファイルをビルドしてDockerイメージを作成します。
ここではssh_script_sandboxというイメージ名のDockerイメージを作成しています。

$ docker build -t ssh_script_sandbox .

作成されたssh_script_sandboxというDockerイメージを利用してDockerコンテナを起動します。

ここではssh_script_containerという名前のコンテナをバックグラウンドで実行しています。
なお、ホストの20022番ポートとDockerコンテナの22番ポート(sshで利用されるポート番号)をポートフォワードしています。

$ docker run -d -p 20022:22 --name ssh_script_container ssh_script_sandbox

localhostの20022に対してssh接続することでDockerコンテナにログインできるようになります。

$ ssh isucon@localhost -p 20022

今回の詳細はDockerファイルの使い方は?具体例で学ぶ、他人が作った環境を共有する方法でも解説をしているので、興味のある方はご覧になってください。

by @nishina555

9
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
15