如何在centos7中使用docker创建一个支持ssh连接的容器

1.拉取centos7.4镜像(由于7.4目前是最稳定的版本,所以推荐使用centos7.4)

docker pull centos:7.4.1708

2.执行以下命令查看已有的镜像

docker images

3、基于centos镜像,创建一个名为centos7ssh的容器并进入容器(这里名称可以自定义)

docker run -it --name centos7ssh centos:7.4.1708 /bin/bash

4、进入容器后,安装ssh服务端和客户端,服务端能让其他主机远程登录本机,客户端能让本机远程登录其他主机

yum -y install passwd openssl openssh-server openssh-clients

5.创建 /var/run/sshd/目录,要不然sshd服务启动会报错

mkdir /var/run/sshd/

6.编辑sshd的配置文件/etc/ssh/sshd_config,将其中的UsePAM yes改为UsePAM no

可以进入sshd_config文件中去修改,也可以使用命令:

sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config

7.创建公私密钥,输入命令后,直接按两次enter键确认就行了

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

8.完成上述几步后,可以开启ssh服务了(&表示后台启动)

/usr/sbin/sshd -D &

9.此时使用命令ps -ef | grep sshd  便可以看到

10.查询22端口是否处于监听状态

yum -y install lsof
lsof -i:22

11.修改root密码

passwd

12.测试

输入命令ssh localhost,然后输入之前设置的root密码

上图中可以看到已经登录到本机了,也就说容器中的主机拥有了ssh远程登录其它主机的能力,当然你也可以登录其他主机。

要退出的话,输入命令exit即可

13.如何配置外部客户端访问docker里的centos7.4容器

获取容器的ID等端口映射信息

docker ps -a

提交容器成为新的镜像,例如叫做sshd_centos7.4,输入

docker commit 容器ID sshd_centos7.4

启动这个镜像的容器,并映射本地的一个闲置的端口(例如15000)到容器的22端口,并启动容器的sshd(只要端口不冲突可以同时启动多个容器,如下图)

docker run -d -p 15000:22 sshd_centos7.4 /usr/sbin/sshd -D

现在打开新的终端,输入ssh root@宿主机IP地址 -p 15000,如果能连接成功,会要求输入密码的,输入刚才passwd命令设置的root账户密码就可以进入容器的终端了

如果连接失败,请检查防火墙是否未开放该端口。

参考文档:https://www.cnblogs.com/whutxldwhj/p/6427530.html

https://blog.csdn.net/u013140345/article/details/79777311

https://blog.csdn.net/weipeng19861130/article/details/79006555

以下为网友提供的方法还未验证是否可用,可自行验证

docker pull centos:7.2.1511    //也可以不指定版本,默认最新latest
docker run -t -i centos:7.2.1511 /bin/bash //启动并进入docker 容器 yum install wget                
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum cleal all
yum install passwd
yum install openssh-server #安装ssh服务端
echo 'passw0rd' | passwd root //修改root密码 docker commit [容器ID] [新镜像名] //使用commit 提交,简单的配置可以使用dockerfile创建镜像,但是要配置环境比较复杂,还是需要用到commit
docker run -d -p 220:22 c7ssh /usr/sbin/sshd -D      //启动容器,并绑定容器端口22到宿主主机, 可以有多个-p 绑定多个端口,例如22端口让远程客户端连接,8080 可以访问容器内tomcat

Centos7创建支持ssh服务的docker镜像的更多相关文章

  1. 两种方式创建支持SSH服务的docker镜像

    方法一:基于commit命令创建 1.首先,从docker的源中查看我们需要的镜像,本案例中使用Ubuntu作为基础镜像. # federico @ linux in ~ [16:57:38] $ s ...

  2. 创建支持ssh服务的docker容器和镜像

    http://www.kongxx.info/blog/?p=57 1. 这里使用的centos作为容器,所以首先下载centos的imagessudo docker pull centos 2. 下 ...

  3. Docker创建支持ssh服务的容器和镜像

    原文链接:Docker创建支持ssh服务的容器和镜像 1. 这里使用的centos作为容器,所以首先下载centos的images # sudo docker pull centos 2. 下载后执行 ...

  4. Docker使用Dockerfile创建支持ssh服务自启动的容器镜像

    原文链接:Docker使用Dockerfile创建支持ssh服务自启动的容器镜像 1. 首先创建一个Dockerfile文件.文件内容例如以下 # 选择一个已有的os镜像作为基础 FROM cento ...

  5. 使用Dockerfile创建支持SSH服务的镜像

    1.前面我们学习了使用Dockerfile,那接下来我们就用Dockerfile创建一个支持SSH服务的镜像. 2.首先创建一个目录ssh_centos [root@rocketmq-nameserv ...

  6. docker如何创建支持SSH服务的镜像

    一般情况下,Linux系统管理员通过SSH服务来管理操作系统,但Docker的很多镜像是不带SSH服务的,那么我们怎样才能管理操作系统呢?在第一部分中我们介绍了一些进入容器的办法,比如用attach. ...

  7. docker基于commit命令创建支持ssh服务的镜像

    以centos为基础,目的使用ssh服务远程连接docker容器. 环境:宿主机centos7(宿主机ip地址为192.168.164.130),直接搜索docker的centos镜像,下载最新版本. ...

  8. Docker(2):使用Dockerfile创建支持SSH服务的镜像

    1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...

  9. ubuntu-docker入门到放弃(八)创建支持SSH服务的镜像

    我们知道进入docker容器可以使用attach.exec等命令来操作和管理,但是如果需要远程登录并管理容器,就需要ssh服务的支持了. 1.基于commit命令创建 docker提供了commit命 ...

随机推荐

  1. python format() 函数

    转载 https://www.cnblogs.com/wushuaishuai/p/7687728.html 正文 Python2.6 开始,新增了一种格式化字符串的函数 format() ,它增强了 ...

  2. 轻松理解 Spark 的 aggregate 方法

    2019-04-20 关键字: Spark 的 agrregate 作用.Scala 的 aggregate 是什么 Spark 编程中的 aggregate 方法还是比较常用的.本篇文章站在初学者的 ...

  3. mobilebone与weiui_example.css 使用问题

    weiui_example.css 原page样式属性opacity设置为0 ... 由于我采取的是使用mobilebone,没按照weui官网的来搞这种效果,所以这里会有冲突,设置为默认即可,即op ...

  4. python第十天

    函数 1.函数:完成特定功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数 在现实中,很多问题要通过一些工具进行处理==>可以将工具提前生产出来,并命名==>通过名字就可以找 ...

  5. ASP.NET MVC 企业级实战

    1.泛型 public class List<T>{ } 当定义泛型类的实例时,必须指定这个实例所存储的实际类型,泛型允许程序员将一个实际的数据类型规约延迟至泛型的实例被创建时才确定,泛型 ...

  6. Django web编程3 -- 创建用户账户

    我们将建立一个用户注册和身份验证系统,让用户能够注册账户,进而登录和注销.我们将创建一个新的应用程序,其中包含与处理用户账户相关的所有功能.我们还将对模型Topic 稍做修改,让每个主题都归属于特定用 ...

  7. 分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

    分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的J ...

  8. 数据结构与算法之美学习笔记:B+树(第48讲)

    一.解决问题的前提是定义清楚问题 通过对一些模糊需求进行假设,来限定要解决问题的范围 根据某个值查找数据,比如 select * from use where id=1234: 根据区间值来查询某些数 ...

  9. java 多线程 synchronized与lock的通信机制等问题,结合相应实例说明

    1. 利用多线程实现如下需求: 写两个线程,一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B...5152Z: 2. 使用synchronized 实现 public class T ...

  10. 11GR2 Oracle数据库的远程投毒VNCR方式修复

    [环境介绍] 系统环境:Solaris + Oracle 11GR2 + 单机/RAC   [背景描述] 基于集团数据库安全检查项,需要数据库的远程投毒漏洞进行修复. 根据Oracle官方提供的修复文 ...