docker基于centos的ssh镜像
docker rm -f $(docker ps -aq)删除所有容器
1:拉取centos镜像 docker pull centos
2:创建容器docker run -itd –name test docker.io/centos /usr/sbin/init
3:进入容器docker exec -ti test /bin/bash
4:yum -y update
5:yum install -y openssh-server
6:修改config文件
cd /etc/ssh vi sshd_config
Port 22
ListenAddress 0.0.0.0
ListenAddress ::
PermitRootLogin yes
开放这四个选项
7:在宿主机生成密钥
ssh-keygen -t rsa
cat /root/.ssh/id_rsa.pub
将生成的密钥copy到容器中的authorized_keys文件中
mkdir /root/.ssh
vi authorized_keys
8:pam问题
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
9:设置启动脚本
vi run.sh
#!/bin/bash
/usr/sbin/sshd -D
授权chmod +x run.sh
启动sh run.sh
这里遇到问题,在容器内启动有时会不好使
这时我们启用systemctl start sshd.service来启动服务
ps -ef|grep sshd来观察服务是否启动成功
exit退出容器
10:docker commit test testssh 将容器提交成镜像
11:
docker run -itd -p 10000:22 testssh:latest /run.sh
docker run -itd -p 10001:22 testssh:latest /usr/sbin/init
docker run -itd -p 10002:22 testssh:latest /bin/bash
这三条命令在你生成镜像服务为开启状态时都是可用的
但如果你的生成的镜像服务没有走第9步中的启动命令就提交了镜像
那么你只能使用后两条命令来达到启动sshd服务的效果。
12:ssh 192.168.66.136 -p 10001
过程中可能遇到的错误
a)主机公钥不符,认证失败
如图,当你出现这种情况
可能性1:你的主机识别的从机信息不符
请执行以下命令
cd /root/.ssh
vi known_hosts
删除你对应的子机ip的 ssh-rsa 即可。
可能性2:ssh目录或者 .ssh/known_hosts 对当前用户的权限设置不正确。这种情况比较少,一般正确设置读写权限以后也能恢复正常。
可能性3: /dev/tty 对 other 用户没有放开读写权限。这种情况极为罕见。出现的现象是,只有 root 用户能够使用 ssh client,而所有其他的普通用户都会出现错误。