zoukankan      html  css  js  c++  java
  • docker下debian镜像开启ssh, 允许root用密码登录

    用的官方python镜像做开发, 暴露端口, 用pycharm ssh进去开发.

    忽然发现本来ssh能连上, 但是更了新的python镜像连不上了.

    有折腾了一下, 连上了.

    主要是python官网镜像大约在3.6.5前后,换过base  dedian版本:从Jesse 换成了stretch。

    导致有点改变。本次记录以 3.6.5 stretch为准

    1 参考官网 文档 dockerize a ssh service

    FROM ubuntu:16.04
    
    RUN apt-get update && apt-get install -y openssh-server
    RUN mkdir /var/run/sshd
    RUN echo 'root:screencast' | chpasswd
    RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    
    # SSH login fix. Otherwise user is kicked off after login
    RUN sed 's@sessions*requireds*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
    
    ENV NOTVISIBLE "in users profile"
    RUN echo "export VISIBLE=now" >> /etc/profile
    
    EXPOSE 22
    CMD ["/usr/sbin/sshd", "-D"]

    但要注意 官网用的是ubuntu , python官方镜像是基于debian的,区别是

    /etc/ssh/sshd_config

    的初始值不同, 导致直接sed替换字符串失败,导致不允许root用密码登录

    所以

    1 注释掉sed 行  和最后一行, 最后一行改成

    CMD ["/bin/bash"]
     
    这样容器启动后,先用docker attach 进容器
    vi /etc/ssh/sshd_config
     
    发现,目前的初始值是 
    #PermitRootLogin prohibit-password
    前面有#
    所以,dockerfile中sed行要改成
     
    RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

    现在最后一行恢复成

    CMD ["/usr/sbin/sshd", "-D"]

    退出attach,重新build 容器.

    这时, 用ssh登录主机

    发现报错:

    需要在外部本机的known_hosts中删除开启ssh的docker容器信息

    ssh-keygen -R "[127.0.0.1]:2221"

    注意要有引号

    然后连接成功.完事

  • 相关阅读:
    Spring浅谈
    struts浅谈
    Tomcat启动发生的那些事儿
    sizeof的用法
    栈应用之括号匹配
    条件编译
    MySQL数据库常用命令
    快速排序
    分页查询的那些坑和各种技巧
    国外程序员收集整理的 PHP 资源大全
  • 原文地址:https://www.cnblogs.com/xuanmanstein/p/9133140.html
Copyright © 2011-2022 走看看