LoginSignup
137
136

More than 5 years have passed since last update.

Docker で SSH 接続可能なコンテナ (CentOS) を作成する

Last updated at Posted at 2014-06-21

Docker で SSH 接続可能なコンテナを作成する方法のメモ。コンテナの OS は CentOS です。

packer を使った方法は すでに先に書かれて いましたが、ここでは Dockerfile を使って作る方法を書きます。

ssh-ignorekey エイリアス

コンテナを作り直しても、 known_hosts ファイルによって接続エラーにならないように以下のエイリアスを定義しています

alias ssh-ignorekey='ssh -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no'

空パスワードまたは指定したパスワードで root ログインできるコンテナを作りログインする方法

  1. Dockerfile

    FROM centos
    
    RUN yum -y install initscripts MAKEDEV
    
    RUN yum check
    
    RUN yum -y update
    
    RUN yum -y install openssh-server
    
    # 空パスワードの場合は以下をコメントアウト
    # RUN sed -ri 's/^#PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config
    
    RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
    RUN sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
    
    RUN /etc/init.d/sshd start
    
    # 空パスワードの場合は以下をコメントアウト
    # RUN passwd -d root
    
    # 任意のパスワードの場合は以下をコメントアウト & パスワードを書き換える
    # RUN echo 'root:root' | chpasswd
    
    EXPOSE 22
    
    CMD /sbin/init
    
  2. コンテナイメージ作成

    docker build -t ssh-enabled .

  3. コンテナ起動

    CONTAINER_ID=$(docker run -P -d ssh-enabled) && SSH_PORT=$(docker port $CONTAINER_ID 22 | cut -d: -f2) && SSH_HOST=$(docker port $CONTAINER_ID 22 | cut -d: -f1);
    
  4. SSH ログイン

    ssh-ignorekey -p $SSH_PORT root@$SSH_HOST
    

鍵認証で root ログインできるコンテナを作りログインする方法

  1. Dockerfile

    FROM centos
    
    RUN yum -y install initscripts MAKEDEV
    
    RUN yum check
    
    RUN yum -y update
    
    RUN yum -y install openssh-server
    
    RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
    RUN sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
    
    RUN /etc/init.d/sshd start
    
    RUN sed -ri 's/^(root):[^:]*:(.*)$/\1:*:\2/' /etc/shadow
    
    RUN ssh-keygen -f ~root/.ssh/id_rsa -t rsa -b 2048 -N ''
    RUN cp ~root/.ssh/id_rsa.pub ~root/.ssh/authorized_keys
    RUN chmod 0600 ~root/.ssh/authorized_keys
    
    EXPOSE 22
    
    CMD /sbin/init
    
  2. コンテナイメージ作成

    docker build -t ssh-enabled .

  3. コンテナ起動

    CONTAINER_ID=$(docker run -P -d ssh-enabled) && SSH_PORT=$(docker port $CONTAINER_ID 22 | cut -d: -f2) && SSH_HOST=$(docker port $CONTAINER_ID 22 | cut -d: -f1);
    
  4. 鍵コピー

    docker cp $CONTAINER_ID:/root/.ssh/id_rsa $CONTAINER_ID
    
  5. SSH ログイン

    ssh-ignorekey -i $CONTAINER_ID/id_rsa -p $SSH_PORT root@$SSH_HOST
    
137
136
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
137
136