红联Linux门户
Linux帮助

创建基于ssh的可以免密码登录的docker镜像

发布时间:2016-06-19 16:04:35来源:linux网站作者:双月通天

一般情况下,linux系统管理员通过ssh服务来管理操作系统,但是docker的很多镜像是不带ssh服务的,那么我们怎么样才能管理操作系统呢?

我们学过attach ,exec的命令进入容器的方法,但是都无法解决远程管理容器的问题,因此,我们需要远程登录到容器内进行一些操作的时候,就需要ssh的支持了。

以下的镜像基于docker commit命令创建。


1.首先使用ubuntu:14.04创建一个一个容器

docker run -it  -v /opt/ssh:/opt/ssh ubuntu:14.04 /bin/bash

解释一下:

基于ubuntu的14.04版本的镜像启动一个容器

-it是为了让docker分配一个伪终端,并绑定到标准输入上,且让容器的标准输入保持打开。

-v 后面的是将本地的/opt/ssh目录挂到容器的/opt/ssh上面去,是为了将宿主机上面的文件拷贝到容器里面去。(主要是为了将authorized_keys文件从宿主机拷贝到容器中的去)


2.默认没有sshd服务,安装sshd服务

apt-get install  openssh-server

一般会失败,这是因为ubuntu官方镜像中并没有包含软件包的缓存文件,使用如下命令来更新软件源信息:

apt-get update

再使用

apt-get install  openssh-server

完成安装ssh服务了。


3.启动ssh服务

要正常启动ssh服务,需要目录/var/run/sshd存在,手动创建它,并启动服务:

mkdir -p  /var/run/sshd

/usr/sbin/sshd -D &

此时查看容器的22端口,已经处于监听状态:

netstat -untlp


4.配置ssh服务

修改ssh服务的安全登录配置,取消pam登录限制:

sed  -ri 's/session  required  pam_loginuid.so/#session  required  pam_loginuid.so/g' /etc/pam.d/sshd

将宿主机上面的authorized_keys拷贝到容器的/root/.ssh下面。

创建基于ssh的可以免密码登录的docker镜像

因为容器里面的/opt/ssh映射到了宿主机的/opt/ssh文件夹,所以宿主机的/opt/ssh里面的东西,都会在容器的/opt/ssh下面。

所以可以将该文件拷贝过去。

然后创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限:

run.sh

#!/bin/bash

/usr/sbin/sshd -D

最后,退出容器

exit


5.保存镜像

将所退出的容器用docker commit命令保存为一个新的sshd:ubuntu镜像(我的例子中成功了ssh免密码登录的是sshd3:ubuntu):

docker  docker commit  容器id  sshd:ubuntu

然后就可以使用docker images查看本地生成的新镜像sshd:ubuntu.


6.使用镜像

启动容器,并添加端口映射10022 ---》22。其中10022是宿主机的端口,22是容器的ssh服务监听端口:

docker run  -p  10022:22  -d  sshd:ubuntu  /run.sh

创建基于ssh的可以免密码登录的docker镜像


7.远程连接容器,来管理容器

可以在宿主机和其他远程主机上,可以通过ssh访问10022端口来登录容器:

我是在其他的远程主机上面来登录的

容器的宿主机是172.16.81.99

而想要ssh登录的主机是172.16.81.104

创建基于ssh的可以免密码登录的docker镜像

可以看得到我们成功从172.16.81.104免密码登录到172.16.81.99的ubuntu容器里面去了。可以管理这个容器了。


本文永久更新地址:http://www.linuxdiyf.com/linux/21665.html