たまにsshが必要なツールを使うときにコンテナに繋ぎたいということありますね
それ用のdockerイメージと接続までの流れのメモ
dockerイメージの作成
CentOS7でやる
FROM centos:centos7
RUN yum -y update && yum clean all
RUN yum install -y which
RUN yum install -y wget
RUN yum install -y tar
RUN yum install -y vim
RUN yum install -y git
RUN yum -y install openssh-server openssh-clients
RUN mkdir ~/.ssh \
touch ~/.ssh/authorized_keys \
chmod 600 ~/.ssh/authorized_keys
CMD /bin/bash
vimとかgitとか入れてるのは趣味、build遅くなるので無くても大丈夫
イメージのビルド
docker build -t centos7ssh ./
docker runからssh設定まで
まずはssh接続先のコンテナを起動
docker run --privileged --rm -d -p 2222:22 -p 5000:80 --name centos7sshcontainer centos7ssh /sbin/init
次にMacやWinなどのローカルマシン上でsshキー作成
キーの名前とかは好きに付けてください
ssh試したい度に何回も作るのは面倒なので~/.ssh/local_container_id_rsa
とか作っといて使い回すといいんじゃないでしょうか
ssh-keygen -t rsa -b 4096
生成されたlocal_container_id_rsa.pub
の中身をコピーしてコンテナ内の~/.ssh/authorized_keys
にペーストします
コンテナ接続コマンド
docker exec -it centos7sshcontainer bash
ローカルマシンのssh configを編集してコンテナへの接続情報を追記
vim ~/.ssh/config
Host centos7ssh
HostName 0.0.0.0
User root
Port 2222
IdentityFile ~/.ssh/local_container_id_rsa
ローカルマシンからssh接続
ssh centos7ssh
入れるはず
不要になったらコンテナをstopしておく(削除も同時に行われる)
docker stop centos7sshcontainer
注意
sshした後1度コンテナを破棄して同じようにコンテナを作成して接続しようとするとknown_hostsに同じのあるぞと言われるので~/.ssh/known_hosts
の[0.0.0.0]:2222
から始まる行を削除してからsshログインを実行すると入れる
参照