docker随笔3--ssh服务
docker镜像搭建以后很多时候并不是本机操作而是直接链接docke,所以需要ssh服务。
下面是基于ubuntu的操作。
1. 拉取镜像并进入容器
docker pull ubuntu:16.04 docker run -it ubuntu /bin/bash
2.检测是否有ssh服务
sshd #提示没有sshd服务
apt-get update #第一次进入拉取的容器需要update,因为源默认是关闭的 apt-get install openssh-server #安装ssh服务
如果嫌下载的速度慢可以配置镜像的软件源。
sshd #再次执行ssh命令
提示:sshd re-exec requires execution with an absolute path
正常启动ssh服务,需要目录/var/run/sshd
mkdir -p /var/run/sshd /usr/sbin/sshd -D &
检测ssh的22端口是否被监听
netstat -tunlp
#提示bash: netstat: command not found
#安装: apt-get install net-tools
3.修改ssh登录限制,取消pam限制:
注释:session required pam_loginuid.so
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
4.创建公钥:
ssh-keygen -t rsa #在宿主机创建公钥,将其复制
在容器中创建:
vim /root/.ssh/authorized_keys
并将复制好的宿主公钥传入其中。
5.创建开机自动启动的脚本。
vim /run.sh
chmod +x run.sh
run.sh里面的内容是:
#!/bin/bash /usr/sbin/sshd -D
保存后执行:exit
生成新的镜像:
docker commit 9145 sshd/ubuntu ubuntu
开放端口给外部访问
docker run -p 100081:22 -d sshd/ubuntu /run.sh
检测是否成功:
docker ps
如果没有的话查看日志:
docker logs -f container_id(容器的id)