Docker为镜像添加SSH服务

本文详细介绍了如何为不支持SSH服务的Docker镜像添加SSH服务,通过两种方法:基于Commit命令创建和基于Dockerfile创建。文章还提供了使用自定义软件源加速软件包下载、配置SSH服务及创建自动启动SSH的脚本等实用步骤。

很多时候用户希望通过远程登录服务器来进行管理,但是Docker的很多镜像都不支持SSH服务,接下来将会介绍为Docker镜像添加SSH服务的两种方法:

1. 基于Commit命令的创建
通过对容器进行ssh的配置,生成一个新的镜像。
首先获取ubuntu:18.04的镜像,之后创建一个名叫ssh的容器
docker pull Ubuntu:18.04
docker run -it --name ssh ubuntu:18.04 bash
可能会出现如下的错误

Error:WARNING: IPv4 forwarding is disabled. Networking will not work.
解决方法: vim /usr/lib/sysctl.d/00* 添加(本地文件)
net.ipv4.ip_forward=1,删除容器,重启网络(systemctl restart network),
重新创建容器

使用apt-get update更新软件源。

如果觉得官方的软件源下载速度慢的话,可以更换软件源。 vi
/etc/apt/sources.list.d/name,name可以更具软件源的名字命名,我用的163的

deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse

之后选择主流的openssh-server作为服务端。
apt-get install opessh-server
如果需要正常启动ssh,则容器内必须要有/var/run/sshd的目录
mkdir -p /var/run/sshd
/usr/sbin/sshd -D & (启动ssh服务)
ssh默认监听的端口为22,此时使用以下命令查看端口状态
natstat -tunlp
在这里插入图片描述
修改ssh服务的安全登录配置,取消pam

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

在root用户下创建.ssh目录 。在其中创建authorized_keys文件

mkdir -p root/.ssh
vi /root/.ssh/authorized_keys

该文件内容一般为本地主机用户文件夹下的~/.ssh/id_rsa.pub的内容,如果主机中没有这个文件夹,得root命令来生成秘钥,并放至该文件中。在这里插入图片描述
此时配置ssh基本完成,此时需要创建自动启动ssh的文件run.sh,并添加可执行权限
vi /run.sh
chmod +x run.sh
文件内容如下:
#!/bin/bash
/usr/sbin/sshd -D
之后退出容器,提交该容器为镜像即可
docker commit

2.基于Docker命令的创建
首先创建一个工作目录 mkdir sshd_ubuntu
之后在该目录中创建run.sh(与上面run.sh内容一致) , Dockerfile。
ssh-keygen -t rsa生成秘钥,一般生成文件在~/.ssh文件下,
cat ~/.ssh/id_rsa.pub >authorized_keys生成一个authorized_keys文件

Dockerfile:

#继承镜像
FROM ubuntu:18.04


#提供作者信息
MAINTAINER docker_user  (jonty1@docker.com)
#更新软件源
RUN apt-get update

#安装ssh
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh

#取消pam登录
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

#复制  ~/.ssh/authorized_keys,并赋予执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh

#打开ssh端口
EXPOSE 22

#设置自启命令
CMD ["/run.sh"]

最后,使用docker build 命令创建即可。

3.使用镜像
前面教会了你怎样去为镜像配置ssh服务,接下来的内容将会带你去使用带有ssh服务的镜像。
首先使用之前commit的镜像创建一个容器:

 docker run -p 10022:22 -d --name ssh1 /run.sh

-d: 让容器在后台运行
-p:主机与容器端口的映射,ssh的默认端口为22

之后就可以使用在宿主主机访问10022端口来登录该容器,
$ ssh ip -p 10022
在这里插入图片描述

写作不易,关注一下呗xiaolian☺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值