zoukankan      html  css  js  c++  java
  • Docker实现CentOS容器SSH远程登录

    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

  • 相关阅读:
    java.math.BigDecimal
    抽象类和接口的区别:
    idea 快捷键
    java 抽象类
    mongodb3.2系统性学习——5、游标 模糊查询 findAndModify函数
    ZeroClipboard2.0 复制功能
    MySQL在远程访问时非常慢的解决skip-name-resolve 并且出现 Reading from net
    mongodb3.2系统性学习——2、write concern mongodb 写安全机制
    mysql 存储引擎 myisam innodb 区别
    MYSQL 错误 :Out of resources when opening file './datagather/mx_domain#P#p178.MYD' (Errcode: 24) 解决办法
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/9456691.html
Copyright © 2011-2022 走看看