DockerコンテナにSSH接続

    >




Dockerfile

# FROM yuis/env:1.2
FROM ubuntu:18.04

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

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
CMD ["/usr/sbin/sshd", "-D"]

docker image build . -t ssh_server:1.1
docker run -d -p 56022:22 ssh_server:1.1
ssh root@127.0.0.1 -p 56022 # password=pw / if different IP, `ip addr` to check the local IP

直接環境を作る場合(ubuntu)

: <<'NOTE'
普通のubuntu(Vboxとかisoからインストした場合のやつ)だと`openssh-server`入れるだけでsshできるんだけど
dockerImageは極力最小単位でみたいな理念があるからかそれとは違うところがある。のだと思う。(desktopバージョンかコマンドラインバージョンかサーバーバージョンかの違いなのかもしれない。一般用途のOSしか入れたことなので真偽は不明)

よって、`apt install openssh-server`しただけでsshしようとするとこういうエラーになる

root@conoha:~# ssh root@127.0.0.1 -p 57022
ssh_exchange_identification: Connection closed by remote host
NOTE

# Enter into the container and install requirements then start server
docker run -p 57022:22 -it -v /media/ownCloud/pg/docker/mnt/:/docker yuis/env:1.2
apt-get update && apt-get install -y openssh-server
echo 'root:pw' | chpasswd
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
service ssh restart # or `/usr/sbin/sshd -D` etc
: quit the container

ssh root@127.0.0.1 -p 57022 # IPはたぶん127.0.0.1で固定なんだと思うけど一応`ip addr`する手段も知っておく

リモートからSSH接続

トンネリングして接続するのがベターかなと。

ssh -t yuis@150.95.0.0 ssh -p 55022 root@127.0.0.1

ポートフォワーディングをトンネリングしてやることもできる。

ssh -t -R 52698:localhost:52698 -L 4567:localhost:4567 yuis@150.95.0.0 ssh -p 55022 -L 4567:localhost:4567 -R 52698:localhost:52698 root@127.0.0.1

# e.g.
fumiya.org✜ASUS:/mnt/c/pg$ ssh -t -R 52698:localhost:52698 -L 4567:localhost:4567 yuis@150.95.0.0 ssh -p 55022 -L 4567:localhost:4567 -R 52698:localhost:52698 root@127.0.0.1

root@541e5aed5dcf:~# ruby - <<EOS -o 0.0.0.0
require 'sinatra'

get '/' do
'Hello docker!'
end
EOS

fumiya.org✜ASUS:/mnt/c/pg$ curl localhost:4567
Hello docker!

いまいちdockerわからない。Vboxの方がすき(使えなくなってしまったのでdockerしてます)




お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


Close Menu