skydum

個人的な作業記録とか備忘録代わりのメモ

dockerのCentOS7でtelnetdを使えるようにする

dockerでCentOS7 +telnetdを起動してホストから接続する

  • 検証用にdockerで起動したCentOS7にホストからtelnetdで接続したいので作った
  • 検証用なのでコンテナイメージをなるべく小さくするなどの対処は行わない

事前準備

  • CentOS7のdockerイメージそのままではtelnetdは使えないのでDockerfileを作ってイメージを作成する
  • 任意の場所に以下のDockerfileを作る
  • 作成するコンテナイメージでtelnetで接続するユーザー
    • ID: root, password: rootとする
    • ID: user, password: userとする
# syntax=docker/dockerfile:1-labs
FROM centos:7

RUN yum update -y
RUN yum install -y xinetd
RUN yum install -y telnet-server

# rootで同時に接続したいユーサー数の数だけ書く
# 一般ユーザーの場合は記載する必要なし
RUN echo "pts/0" >> /etc/securetty
RUN echo "pts/1" >> /etc/securetty
RUN echo "pts/2" >> /etc/securetty

RUN echo "root:root" | chpasswd

RUN adduser user
RUN echo "user:user" | chpasswd

COPY <<EOF /etc/xinetd.d/telnet
service telnet
{
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure += USERID
    disable = no
}
EOF

COPY <<EOF /docker-entrypoint.sh
#!/bin/bash
xinetd -dontfork -stayalive
EOF

RUN chmod 777 docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

※ Dockerfile中にヒアドキュメントがつかえるようになっていたので使ってみた
ヒアドキュメントを使うとホスト側にファイルを用意してdocker内へファイルをコピーするという手間が減るので便利

telnetdが使える様にしたイメージの作成

  • 以下のコマンドでssh-serverの名称でイメージを作成する
  • 作成するコンテナイメージの名前はcentos7-sshd:latest
# ヒアドキュメントを使う場合はdocker buildではなくて、docker buildxを利用する
# コンテナをビルドしているときの表示も少し変わる
$ docker buildx build --tag centos-telnetd .

$ docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
centos-telnetd   latest    fd4dfbbb65ad   27 minutes ago   796MB

centos-telnetdのイメージを起動する

  • 起動するサーバのホスト名: telned
  • 起動するサーバのコンテナ名: telnet-server
  • 起動するサーバのポート番号: 10023
$ docker run -it --hostname telentd --name telnet-server -p 10023:23/tcp -d centos-telnetd

# 以下のように--rmをつけてイメージを起動するとコンテナが停止した時に自動的にコンテナが削除される
# $ docker run --rm -it --hostname telentd --name telnet-server -p 10023:23/tcp -d centos-telnetd


$ $ docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS                                     NAMES
a663e68cffa3   centos-telnetd   "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   0.0.0.0:10023->23/tcp, :::10023->23/tcp   telnet-server

起動したtelnet-serverにtelnetでホストから接続する

$ telnet localhost 10023
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Kernel 5.4.0-109-generic on an x86_64
telentd login: root
Password: 
[root@telentd ~]# 

telnet-serverを停止してイメージを削除

$ docker ps -a    # 停止しているコンテナも含めて表示する
CONTAINER ID   IMAGE            COMMAND                  CREATED              STATUS              PORTS                                     NAMES
a663e68cffa3   centos-telnetd   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:10023->23/tcp, :::10023->23/tcp   telnet-server

$ docker stop telnet-server
$ docker rm a663e68cffa3    # docker rm telnet-serverでも可

$ docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
centos-telnetd   latest    fd4dfbbb65ad   33 minutes ago   796MB

$ docker rmi fd4dfbbb65ad    # docker rmi centos7-telnetd:latestでも可

$ docker ps -a    # 停止しているコンテナも含めて表示する
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE