Docker实现CentOS容器SSH远程登录

https://blog.csdn.net/A632189007/article/details/78625378

这里根据Dockerfile方式构建一个CentOS的可远程SSH的镜像。

Dockerfile文件

在/data/test/sshd_centos/目录下新建Dockerfile文件。注意:目录可以自行设定,但目录下除了Dockerfile文件外建议不要放置别的文件和目录。

vim Dockerfile

1

生成的新镜像以centos镜像为基础

FROM centos

指定作者信息

MAINTAINER by Test

安装openssh-server

RUN yum -y install openssh-server

RUN mkdir /var/run/sshd

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

指定root密码

RUN /bin/echo 'root:123456'|chpasswd

RUN /bin/sed -i 's/.session.required.pam_loginuid.so./session optional pam_loginuid.so/g' /etc/pam.d/sshd

RUN /bin/echo -e "LANG="en_US.UTF-8"" > /etc/default/local

EXPOSE 22

CMD /usr/sbin/sshd -D

build镜像

在Dockerfile当前目录执行下面语句,开始构建镜像。注意最后面的点不要忘了,表明是读取当前目录的Dockerfile文件。

docker build -t bigdata/centos-ssh:v1.0.0 .

bigdata/centos-ssh:v1.0.0:新生成的镜像名称及版本号

打包成功的话会出现下面的提示,可能时间会有点长,耐心等待。

Successfully built 2d548392b205

查看镜像

docker images

这里写图片描述

启动容器

docker run -itd -p 10022:22 --name test_centos_1 sshd/centos:v1.0

后台启动一个容器,将该容器名称设置为:test_centos_1,将容器端口22映射到宿主机端口10022。

远程访问

远程通过 宿主机IP、映射端口10022进行访问容器。

ssh远程连接docker中的container

由于工作需要,要远程连接container,本地机器是windows,以下为解决步骤:

  1. 环境

    本地:Windows


    docker版本1.12


    远程:docker中的Container(Ubuntu)

  2. Container安装ssh服务

首先进入Container,进行以下步骤:

① 安装ssh

sudo apt-get install openssh-server #安装ssh服务器

service ssh status # 查看ssh服务启动情况

service ssh start # 启动ssh服务

② 配置ssh,允许root登陆

vi /etc/ssh/sshd_config

将PermitRootLogin的值从withoutPassword改为yes

③ 重启ssh服务

service ssh restart # 重启动ssh服务

  1. 保存Container镜像

    另外开启Docker Quickstart Terminal,保存镜像

docker ps #查看正在运行的container

找到所要保存的container的container id,假设为xxxxxx

docker commit xxxxxxxx tomjerry/foobar

(注:tomjerry/foobar为要保存的新镜像的名字,可任意写)

  1. 重新运行Container

docker run -it -p 50001:22 tomjerry/foobar /bin/bash

service ssh start

注意-p 50001:22这句,意思是将docker的50001端口和container的22端口绑定,这样访问docker的50001等价于访问container的22端口

  1. ssh连接container

    你可以用xshell或putty等ssh客户端工具连接container

首先假设各方的ip如下:

本地windows ip: 192.168.99.1

docker ip:192.168.99.100

container ip:172.17.0.3

那么,你要远程container,则要访问以下地址:

ssh 192.168.99.100:50001

这样通过访问docker的50001端口,就神奇的间接连通到container的22端口了,从而达到ssh连接container的目的,至此。

用户密码验证方式登录:

1、查看 镜像列表:$ sudo docker images

2、开启容器:$ sudo docker run -tid -p 22 -P 镜像名

3、进入容器:$ sudo docker exec -it 容器名 /bin/bash

4、进入容器之后进行编辑ssh文件,如果没有ssh,需要先安装:

安装ssh-client命令:sudo apt-get install openssh-client

安装ssh-server命令:sudo apt-get install openssh-server

安装完成以后,先启动服务:sudo /etc/init.d/ssh start

启动后,可以通过“ps -e|grep ssh”查看是否正确启动。

5、编辑ssh配置文件:$sudo vim/etc/ssh/sshd_config

PermitRootLogin without-password 改为 PermitRootLogin yes`

PasswordAuthentication yes 改为 PasswordAuthentication no

6、重启服务:$ sudo service ssh restart

7、设置ssh密码:$ passwd root

  Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

8、查看容器ip:$ ifconfig

9、可以在主服务器中链接docker:$ ssh -p 50001 root@172.17.0.2

Docker实现CentOS容器SSH远程登录的更多相关文章

  1. centos 配置ssh远程登录

    参考博客: http://blog.csdn.net/sangjian1006/article/details/51603236 1.修改SSH配置文件/etc/ssh/sshd_config 2.在 ...

  2. 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等

    一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...

  3. Docker容器配置远程登录

    Docker容器配置远程登录 前言 docker 的网络模式主要有三种,bridge.host.none: pridge是docker安装后自动创建的虚拟网卡,创建容器时默认使用此模式. host是指 ...

  4. SSH远程登录CentOS服务器

    1.把ssh默认远程连接端口修改为2200编辑防火墙配置:vi /etc/sysconfig/iptables防火墙增加新端口2222 -A INPUT -m state --state NEW -m ...

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

     SSH远程登录和端口转发详解   介绍 SSH 是创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境. SSH 只是协议,有多种实现方式,本文基于其开源实 ...

  6. 【浅层优化实战】ssh远程登录Linux卡慢的全过程排查及解决方案

    ssh远程登录Linux卡慢的全过程排查及解决方案 前言: 在linux操作系统使用过程中偶然一次感到使用ssh远程连接软件连接操作系统需要等待许久,第一次没在意,第二次也没在意,第三次有点忍受不住了 ...

  7. SSH客户端(如PuTTY)ssh远程登录Linux非常慢的解决方法

    转:http://blog.useasp.net/archive/2014/05/19/solved-the-problem-of-ssh-client-such-as-putty-remote-lo ...

  8. Firefly安装ROS及ssh远程登录配置

    一.在Linux firefly 3.10.0 上安装ROS-indigo 快捷键 CTRL + ALT  + T 打开终端并安装ROS-indigo sudo sh -c 'echo "d ...

  9. CentOS配置ssh无密码登录

      CentOS配置ssh无密码登录的注意点   前提配置:使用root登录修改配置文件:/etc/ssh/sshd_config,将其中三行的注释去掉,如下: 然后重启ssh服务:service s ...

随机推荐

  1. 将登录等信息保存到session中和退出session

    JShop简介:jshop是一套使用Java语言开发的B2C网店系统,致力于为个人和中小企业提供免费.好用的网店系统. 项目主页:http://git.oschina.net/dinguangx/js ...

  2. 路线统计(codevs 1482)

    题目描述 Description N个节点的有向图, 求从start到finish刚好经过时间time的总方案数 mod 502630. 输入描述 Input Description 第一行包含一个整 ...

  3. 汕头市赛srm8 C-3

    n<=100000个点m<=300000条边有权无向联通图,给出K<=10000个特殊点求K个点中任意两点最短路的最小值. 方法一:K小,随便搞.先构造最短路树,在最短路树上Dijk ...

  4. 通过分析exevc系统调用处理过程来理解Linux内核如何装载和启动一个可执行程序

    前言说明 本篇为网易云课堂Linux内核分析课程的第七周作业,本次作业我们将具体来分析exec*函数对应的系统调用处理过程,来分析Linux内核如何来执行一个可执行程序,由于有一个在网易云课堂共同学习 ...

  5. Flex使用cookie保存登状态

    flex系统要实现普通html系统刷新页面保留登录信息,一个方法是借用js来操作cookie来实现,下边是一个实现的例子: 第一步:在主index.html里边加上两个js方法 //获取cookie内 ...

  6. webstorm初始化

    1.皮肤设置,重启后Terminal皮肤生效 2.排除目录 2.1全局排除 2.2局部排除 选中文件夹 右击Make Directroy As 选择 Excluded 3.代码自定义 3.1 cons ...

  7. git修改commit message及vi编辑器的简单使用

    1.修改commit信息 git commit --amend 2.进入vi编辑器修改 ‘i’进入insert模式,输入文字: ‘esc’回到命令模式,删除文字,移动光标: ‘:’进入底行模式,‘wq ...

  8. Codechef-CHEFPRAD(找事件点+贪心)

    题意: 定义一个函数maxMatching(A,B,y),其输入包含两个整数数组 A 和 B 以及一个整数 y,返回一个整数. 记数组 A 的大小为 N,数组 B 的大小为 M.考虑一个由 {a1, ...

  9. try catch finally执行顺序 (return / 变量覆盖)

    finally有return 始终返回finally中的return 抛弃 try 与catch中的return 情况1:try{} catch(){}finally{} return x; try{ ...

  10. Spring中实现自定义事件

    原理: 通过扩展ApplicationEvent,创建一个事件类CustomEvent.这个类必须定义一个默认的构造函数,它应该从ApplicationEvent类中继承的构造函数. 一旦定义事件类, ...