Grow up

生活とプログラミング

Ubuntu 20.04 SSHサーバをDockerで起動する

f:id:knkomko:20210605222454p:plain

はじめに

WindowsUbuntuを使う方法にWindows Subsystem for Linux がありますが、他の開発者も使う事や再構築のし易さを考えて今回はDockerを使いました。

使用するファイル
C:\
│  docker-compose.yml
│
├─home\
└─ubuntu\
        Dockerfile
docker-compose.yml
version: '3'

services:
   app:
     build: 
      context: ./ubuntu/
      dockerfile: ./Dockerfile
     ports:
      - '2222:22'
     tty: true
     container_name: ubuntu20.04
     volumes:
      - ./home:/home
Dockerfile
FROM ubuntu:20.04

RUN apt update
RUN apt install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -ri 's/^#?PermitRootLogin\s+.*/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

EXPOSE 22
ENTRYPOINT [ "/usr/sbin/sshd", "-D" ]
ssh接続の確認

ssh接続はUbuntuの22番ポートにポートフォワーディングしている2222番ポートを指定します。今回ssh接続のパスワードはpasswordとしています。

ssh -p 2222 root@localhost
コンテナを作り直してssh接続する場合

コンテナを作り直すとssh接続が失敗します。

PS C:\docker\ubuntu20_04> ssh -p 2222 root@localhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:*********************************************************.
Please contact your system administrator.
Add correct host key in C:\\Users\\<User name>/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\<User name>/.ssh/known_hosts:2
ECDSA host key for [localhost]:2222 has changed and you have requested strict checking.
Host key verification failed.

SSHでは初回接続時に接続先ホストの公開鍵を保存しておき、次回接続時にホスト鍵を比較して前回と同じホストに接続したかを確認するような仕組みになっています。
「SSHホスト鍵が変わってるよ!」と怒られたときの対処 - Qiita

known_hostsファイルからssh鍵を削除する事でssh接続が行えました。

$ ssh-keygen -R '[localhost]:2222'