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@session\s*required\s*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"

注意要有引号

然后连接成功.完事

 

转载于:https://www.cnblogs.com/xuanmanstein/p/9133140.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值