创建支持SSH服务的Docker镜像的方法

摘要:通常Linux系统管理员通过SSH服务来管理OS,但Docker的很多镜像是不带SSH服务的,可以通过attach(遇到假死的现象)或者exec(目前测试ok)的方法进入容器来管理,但是这些命令都无法解决远程管理容器的问题,因此,当需要远程登陆到容器内进行一些操作的时候,就需要SSH的支持了。本文记录如何使用docker commit创建一个带有SSH服务的ubuntu镜像。

(1) 首先以交互的方式运行我们本地的ubuntu容器

docker run -it ubuntu:14.04 /bin/bash

(2) 尝试使用sshd命令,会发现容器中没有安装该服务。

sshd

bash: sshd: command not found

(3) 使用apt包管理器安装openssh-server

apt-get update

apt-get install openssh-server

(4) 安装和配置SSH服务

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

mkdir -p /var/run/sshd

/usr/sbin/sshd -D &

此时查看容器的22端口(SSH服务器默认监听的端口),已经处于监听状态:

(5) 修改SSH服务的安全登陆配置

在远端客户端机器(即,非容器机器)执行命令 ssh-keygen -t rsa 生成rsa的公私密钥对,然后把公钥的信息拷贝到运行ubuntu容器机器的授权文件中:

mkdir /root/.ssh

vi /root/.ssh/authorized_keys # 粘贴客户端的公钥信息

(6) 创建自启动SSH服务的可执行文件run.sh

vi /run.sh

chmod +x /run.sh

脚本内容如下:

#!/bin/bash

/usr/sbin/sshd -D

(7) 最后退出容器,并将当前修改后的容器保存为一个新的镜像

在宿主主机执行命令 docker ps -a 查看容器的运行状态,可以得到刚才退出容器的container id,记住id前三位。

然后执行提交命令,保存新的镜像:

docker commit $(container id前三位) ubuntu_sshd_gerry:14.04

此命令提交后,会生成一个新的镜像id*(image id)和新的镜像 ubuntu_sshd_gerry:14.04(支持ssh服务的ubuntu镜像)

最后,可以使用 docker images 查看本地的镜像是否已经包含我们新创建的镜像 ubuntu_sshd_gerry:14.04。

(8) 使用新镜像和配置端口映射

启动容器,并添加端口映射 10022(宿主主机端口)---> 22(容器内部SSH服务监听端口):

docker run -p 10022:22 -d ubuntu_sshd_gerry:14.04 /run.sh

启动后,可以在宿主主机上看到容器运行的详细信息:

(9) 在宿主主机,或者其他远程主机,使用SSH访问10022端口来登陆容器,测试OK

补充说明:

对一个镜像打一个新的tag的方法(只是tag不一样,实际是同一个image,因为image id是一样的):

docker tag $(image id) ubuntu_sshd_gerry:14.04

然后将老的tag删除掉:

docker rm $(container id)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 用Go写一个轻量级的ssh批量操作工具的方法

    前言 这是一个轮子. 大家都知道 Ansible是功能超级强大的自动化运维工具,十分的高大上.太高大上了以至于在低端运维有点水土不服,在于三点: Ansible 是基于 Python 的,而 Python 下的安装是有一堆依赖的...不要笑!对于很多使用 Win 的用户而言,光是装 Python, 装 pip 就够喝一壶的了. Ansible 的 paybook 所使用的 yaml 语法当然非常强大了.然而对于新人而言,刚入手是玩不转的,需要学习.虽然 Ansible 相比其他的自动化运维工具,

  • rsync指定ssh端口进行文件同步的方法

    有台服务器因为安全性需要,修改了默认的ssh端口为34778端口. 因此rsync使用ssh同步的时候需要指定ssh的端口 rsync提供了一个-e参数 -e参数的作用是可以使用户自由选择想使用的shell程序来连接远端服务器,因此也可以设置成使用默认的ssh来连接,这样我们就可以加入ssh的参数了 具体语句写法如下: rsync -e 'ssh -p 34778' username@hostname:SourceFile DestFile 单引号,目的是为了使引号内的参数为引号内的命令所用 实

  • Spring+Hibernate+Struts(SSH)框架整合实战

    SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成主流框架,需要成本.再说比如金融IT这一块,数据库dao层还是推荐使用的是hibernate,因为能够快速开发上手,除非是互联网,因涉及到高并发,dao层用的是mybatis,数据交互效率较快.所以,SSH不容忽略. 一.什么是SSH SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架. 集

  • windows安装openssh并通过生成SSH密钥登录Linux服务器

    SSH的英文全称是Secure SHell.通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗.还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度.SSH有很多功能,它既可以代替telnet,又可以为ftp.pop.甚至ppp提供一个安全的"通道" 最初SSH是由芬兰的一家公司开发的.但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH OpenSSH是SSH协议的

  • SSH原理及两种登录方法图文详解

    SSH(Secure Shell)是一套协议标准,可以用来实现两台机器之间的安全登录以及安全的数据传送,其保证数据安全的原理是非对称加密. 传统的对称加密使用的是一套秘钥,数据的加密以及解密用的都是这一套秘钥,可想而知所有的客户端以及服务端都需要保存这套秘钥,泄露的风险很高,而一旦秘钥便泄露便保证不了数据安全. 非对称加密解决的就是这个问题,它包含两套秘钥 - 公钥以及私钥,其中公钥用来加密,私钥用来解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险.

  • SSH端口转发,本地端口转发,远程端口转发,动态端口转发详解

    第一部分 SSH端口转发概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧! SSH端口转发概述 让我们先来了解一下端口转发的概念吧.我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发. 它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自

  • SSH的ssh-keygen命令基本用法详解

    ssh 公钥认证是ssh认证的方式之一.通过公钥认证可实现ssh免密码登陆,git的ssh方式也是通过公钥进行认证的. 在用户目录的home目录下,有一个.ssh的目录,和当前用户ssh配置认证相关的文件,几乎都在这个目录下. ssh-keygen 可用来生成ssh公钥认证所需的公钥和私钥文件. 使用 ssh-keygen 时,请先进入到 ~/.ssh 目录,不存在的话,请先创建.并且保证 ~/.ssh 以及所有父目录的权限不能大于 711 生成的文件名和文件位置 使用 ssh-kengen 会

  • PyCharm设置SSH远程调试的方法

    一.环境 系统环境:windows10 64位 软件:PyCharm2017.3 本地Python环境:Python2.7 二.配置 2.1配置远程调试 第一步:运行PyCharm,然后点击设置如下图 第二步:添加远程的调试环境(选择SSH远程) 然后进入下面界面添加: 第三步:配置本地到远程主机的同步 然后进入下面页面具体配置同步信息,配置完成以后点击OK即可: 2.2配置编码(解决远程start ssh session乱码问题) 第一步: ----> File --> settings -

  • 详解基于django实现的webssh简单例子

    本文介绍了详解基于django实现的webssh简单例子,分享给大家,具体如下: 说明 新建一个 django 程序,本文为 chain. 以下仅为简单例子,实际应用 可根据自己平台情况 进行修改. 打开首页后,需要输入1,后台去登录主机,然后返回登录结果. 正常项目 可以post 主机和登录账户,进行权限判断,然后去后台读取账户密码,进行登录. djang后台 需要安装以下模块 安装后会有一个版本号报错,不影响 channels==2.0.2 channels-redis==2.1.0 amq

  • SSH远程登录和端口转发详解

    介绍 SSH 是创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境. SSH 只是协议,有多种实现方式,本文基于其开源实现 OpenSSH 远程登录 SSH主要用于远程登录: $ ssh user@host 当本地用户名和远程用户名一致时,可省略用户名: $ ssh host SSH 协议默认端口是22,指定端口可使用 -p 参数 $ ssh -p 2222 user@host MITM SSH 采用公钥加密的方式来保证传输安全.过程如下: 客户端发起

  • Redis未授权访问配合SSH key文件利用详解

    前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis 未授权访问的问题是一直存在的问题,知道创宇安全研究团队历史上也做过相关的应急,今日,又出现 Redis 未授权访问配合 SSH key 文件被利用的情况,导致一大批 Redis 服务器被黑,今天我们来简要的分析下. 一.漏洞概述 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有

  • CentOS6.5与CentOS7 ssh修改默认端口号的方法

    本文实例讲述了CentOS6.5与CentOS7 ssh修改默认端口号的方法.分享给大家供大家参考,具体如下: CentOS6.5ssh修改默认端口号 先查看下服务器端口号范围: # sysctl -a|grep ip_local_port_range net.ipv4.ip_local_port_range = 32768 61000 新ssh端口号在这个范围内即可,如41134 第一步: vi /etc/sysconfig/iptables 找到现有的ssh那行,把22修改为新的SSH端口号

  • 深入浅析SSH的三个组件ssh、sftp、scp

    SSH  包含3个组件 (1) ssh 远程登录节点 : ssh 用户名@IP地址 ① 不允许空密码或错误密码认证登录 ② 不允许root用户登录 ③ 有两个版本 ssh,ssh2安全性更高 (2) sftp 文件共享连接 , xftp连接就是 sftp实现的 (3)scp  文件拷贝共享 scp命令 :两节点文件的拷贝传输 (1)向目标节点传文件 : scp  路径/文件名 用户名@IP地址:目录 如:向127.0.0.1节点的root用户/tmp 下传文件 scp 路径/文件名 root@1

  • ubuntu16.04安装ssh服务并实现远程访问的方法

    一.查看是否安装了ssh服务 apt-cache policy openssh-client openssh-server ubuntu默认安装了openssh-client,openssh-server需要手动安装 二.安装ssh服务 apt-get install openssh-server 三.查看ssh服务的开启状况 ps -e|grep ssh 如果出现sshd,则ssh服务已开启.如果只有agent,则尚未开启成功 四.开启ssh服务 /etc/init.d/ssh start 五

  • 实现一台或者多台Linux实例解绑SSH密钥对

    DetachKeyPair 为一台或者多台 Linux 实例解绑 SSH 密钥对. 描述 使用该接口时,请注意: 解绑 SSH 密钥对后,您需要重启实例(RebootInstance)使更改生效. 解绑 SSH 密钥对后,实例默认使用用户名和密码的验证方式. 请求参数 返回参数 全是公共返回参数.参阅 公共参数. 示例 请求示例 https://ecs.aliyuncs.com/?Action=DetachKeyPair &RegionId=cn-qingdao &InstanceIds=

  • 利用python 更新ssh 远程代码 操作远程服务器的实现代码

    用python paramiko ssh 服务器,并pull对应目录代码的脚本 pull.py import paramiko import sys def sshclient_execmd(hostname, port, username, password, execmd): paramiko.util.log_to_file("paramiko.log") s = paramiko.SSHClient() s.set_missing_host_key_policy(paramik

  • SSH 上传文件及文件夹到linux服务器的方法

    现在服务器linux很多.是不是不会传文件?别急 下面就是方法: 一.上传文件到linux服务器 首先从你本地切换到你要上传文件的目录,接下来: scp 文件名字 服务器用户名字@服务器ip:目录 例子: scp index.html root@58.87.124.110:/home/service-tomcat/webapps/ 二.上传文件夹到linux服务器 同文件上传只是在文件名字前面加上-r 例子: scp static/ root@58.87.124.110:/home/servic

  • 使用PSSH批量管理Linux服务器

    pssh是一款开源的软件,使用python实现,用于批量ssh操作大批量机器:pssh是一个可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的:比起for循环的做法,我更推荐使用pssh!使用pssh的前提是:必须在本机与其他服务器上配置好密钥认证访问(即ssh信任关系). 下面就说下使用pssh进行批量操作的记录: 1)安装pssh 可以yum直接安装: [root@bastion-IDC ~]# yum install -y pssh 2)pssh用法 [root@ba

  • CentOS7增加或修改SSH端口号的方法

    前言:开启某服务或软件的端口,要从该服务或软件监听的端口(多以修改配置文件为主),SeLinux和防火墙(FireWall)的安全策略下手.如果使用阿里云,腾讯等第三方服务器还需要对管理控制台的安全组下手. 下面进入主题,如果有什么问题请查看下面的补充栏: 第一步:修改SSH配置文件(注意是sshd_config而不是ssh_config,多了个d) vim /etc/ssh/sshd_config 找到"#Port 22",这一行直接键入"yyp"复制该行到下一行

随机推荐