方法一
获取镜像并配置软件源
ubuntu@ubuntu18:/home/dockertmp$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
423ae2b273f4: Pull complete
de83a2304fa1: Pull complete
f9a83bce3af0: Pull complete
b6b53be908de: Pull complete
Digest: sha256:04d48df82c938587820d7b6006f5071dbbffceb7ca01d2814f81857c631d44df
Status: Downloaded newer image for ubuntu:18.04
ubuntu@ubuntu18:/home/dockertmp$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
negoowen/ghostcat 1.0 d8baa8c78317 2 hours ago 463MB
ubuntu 18.04 72300a873c2c 2 days ago 64.2MB
test4 0.1 ece6e7bf2d44 4 days ago 64.2MB
root@2b571484c05e:/# apt-get update
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [835 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
需要换源的话可以进行替换,Ubuntu 的软件源配置文件是/etc/apt/sources.list
。
清华源:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
安装和配置SSH服务
# 镜像里运行
root@2b571484c05e:/# apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
...
Processing triggers for ca-certificates (20180409) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
root@2b571484c05e:/# mkdir -p /var/run/sshd
root@2b571484c05e:/# /usr/sbin/sshd -D &
[1] 3836
root@2b571484c05e:/# netstat -an | grep 22
bash: netstat: command not found
root@2b571484c05e:/# apt-get install net-tools
Reading package lists... Done
# 22端口已经处于监听状态
root@2b571484c05e:/# netstat -an | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
root@2b571484c05e:/#
root@2b571484c05e:/# sed -ri 's#session required pam_loginuid.so#session required pam_loginuid.so#g' /etc/pam.d/sshd
root@2b571484c05e:/#
本机创建公钥并复制到容器内(免密码登录)
如果不需要免密码登录的话可以跳过
ubuntu@ubuntu18:/home/dockertmp$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ubuntu/.ssh/id_rsa.
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AYQAHbqVUjIzu/qD14m7h1gEvni9gKP8cozUcLGoUr0 ubuntu@ubuntu18
The key's randomart image is:
+---[RSA 2048]----+
|*o+o oo |
|.O.o. . |
|=.+.o . |
| Ooo. . |
|=+=. . S |
|Bo+.E |
|**o= o |
|+==o= |
| .B* |
+----[SHA256]-----+
ubuntu@ubuntu18:/home/dockertmp$ cd ~/.ssh/
ubuntu@ubuntu18:~/.ssh$ ls
id_rsa id_rsa.pub
ubuntu@ubuntu18:~/.ssh$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJkIPpIwbjLqiHj0iltCaNn8tOqSvKcWE5nqAU1qYtbLzNUP8ercKa7ocbUGt/qdJiVafTlxnBEC5xhgPcQI9a29JztFNiA3i2JVXDaVI9NEmuspMYnuQDd+V1JRDtc6I5gQkYVziqyNfrV0MCj/ng5m8dFyvU8j4Rw3zN8o9r4Z3GQJxvZNYk+ouI69BdSgfl/zIDMHjHW5H/0WF8Xwa2VG5ALcwJQrmelsPnUlaIrEmwewTDYDoS9NnG/J0NDL+/33+iXvzOLXEylH9+IeV1VymLI4DDm4OoEFFGAjRqXMoUa83WK2HQxLIgWAxPVEwPD7lU07JGvmKL7Xo8DhX3 ubuntu@ubuntu18
ubuntu@ubuntu18:~/.ssh$
ubuntu@ubuntu18:~/.ssh$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
root@2b571484c05e:~/.ssh# echo -e "\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJkIPpIwbjLqiHj0iltCaNn8tOqSvKcWE5nqAU1qYtbLzNUP8ercKa7ocbUGt/qdJiVafTlxnBEC5xhgPcQI9a29JztFNiA3i2JVXDaVI9NEmuspMYnuQDd+V1JRDtc6I5gQkYVziqyNfrV0MCj/ng5m8dFyvU8j4Rw3zN8o9r4Z3GQJxvZNYk+ouI69BdSgfl/zIDMHjHW5H/0WF8Xwa2VG5ALcwJQrmelsPnUlaIrEmwewTDYDoS9NnG/J0NDL+/33+iXvzOLXEylH9+IeV1VymLI4DDm4OoEFFGAjRqXMoUa83WK2HQxLIgWAxPVEwPD7lU07JGvmKL7Xo8DhX3 ubuntu@ubuntu18\n\n" > authorized_keys
root@2b571484c05e:~/.ssh# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJkIPpIwbjLqiHj0iltCaNn8tOqSvKcWE5nqAU1qYtbLzNUP8ercKa7ocbUGt/qdJiVafTlxnBEC5xhgPcQI9a29JztFNiA3i2JVXDaVI9NEmuspMYnuQDd+V1JRDtc6I5gQkYVziqyNfrV0MCj/ng5m8dFyvU8j4Rw3zN8o9r4Z3GQJxvZNYk+ouI69BdSgfl/zIDMHjHW5H/0WF8Xwa2VG5ALcwJQrmelsPnUlaIrEmwewTDYDoS9NnG/J0NDL+/33+iXvzOLXEylH9+IeV1VymLI4DDm4OoEFFGAjRqXMoUa83WK2HQxLIgWAxPVEwPD7lU07JGvmKL7Xo8DhX3 ubuntu@ubuntu18
root@2b571484c05e:~/.ssh#
root@2b571484c05e:/# vi run.sh
root@2b571484c05e:/# cat run.sh
#!/bin/bash
/usr/sbin/sshd -D
root@2b571484c05e:/#
保存镜像
ubuntu@ubuntu18:/home/dockertmp$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b571484c05e ubuntu:18.04 "bash" 45 minutes ago Exited (0) 50 seconds ago ubuntu@ubuntu18:/home/dockertmp$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b571484c05e ubuntu:18.04 "bash" About an hour ago Up 56 seconds distracted_aryabhata
4cfc4a0aaa1a negoowen/ghostcat:1.0 "catalina.sh run" 2 hours ago Up 2 hours 0.0.0.0:8009->8009/tcp, 0.0.0.0:8080->8080/tcp ghostcat
ubuntu@ubuntu18:/home/dockertmp$ docker exec -it 2b571484c05e bash
root@2b571484c05e:/# ls
bin dev home lib64 mnt proc run sbin sys usr
boot etc lib media opt root run.sh srv tmp var
root@2b571484c05e:/# exit
exit
ubuntu@ubuntu18:/home/dockertmp$ docker commit 2b5 ssh1
sha256:1f72a3bd66509d457e22f69c70796b9496e7dcaad7f548244f39ac76b4d2af74
ubuntu@ubuntu18:/home/dockertmp$ docker run -p 8022:22 -d ssh1 /run.sh
87f0c4213600e106db3f2f64276cce2670c46348a0cca7c31174c4e33feb257a
ubuntu@ubuntu18:/home/dockertmp$
ubuntu@ubuntu18:~/.ssh$ ssh 192.168.195.133 -p 8022
登录即可
方法二
使用dockerfile
ubuntu@ubuntu18:/home/dockertmp$ cat Dockerfile
# 基础镜像信息
FROM ubuntu:18.04
# 维护者信息
MAINTAINER xxx xxx@163.com
# 更新apt缓存、安装ssh服务
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd /root/.ssh
RUN sed -ri 's#session required pam_loginuid.so#session required pam_loginuid.so#g' /etc/pam.d/sshd
# 配置免密要和自启动脚本
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh
# 暴露22端口
EXPOSE 22
# 设置脚本自启动
CMD ["/run.sh"]
ubuntu@ubuntu18:/home/dockertmp$ docker build -t sshd:ubuntu2 .
ubuntu@ubuntu18:/home/dockertmp$ docker run -it --name ssh_test -p 10122:22 sshd:ubuntu2 bash
ubuntu@ubuntu18:/home/dockertmp$ ssh 10.0.0.31 -p 10122