• Docker容器中的SSH免密登录


    简介:在日常的开发和测试环境中经常需要创建和管理Docker容器。有时,出于调试或管理的目的,可能需要SSH到容器内部。本文将介绍如何创建一个Docker容器,它在启动时自动运行SSH服务,并支持免密登录。

    历史攻略:

    Linux:sudo免密

    docker:开启ssh服务

    构建支持SSH的Docker镜像:仅为示例,实际操作时应选择更强的密码,并为免密登录生成了必要的SSH密钥。

    FROM ubuntu:20.04
    MAINTAINER "公众号: 玩转测试开发"
    
    
    # 安装openssh-server
    RUN apt-get update && apt-get install -y openssh-server && \
        mkdir /var/run/sshd
    
    # 设置root密码(在此例中设置为'root',但在生产环境中,请使用更强的密码)
    RUN echo 'root:root' | chpasswd
    
    # 为SSH免密登录设置SSH key
    RUN rm -f /etc/ssh/ssh_host_rsa_key && \
        ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
        rm -f /etc/ssh/ssh_host_dsa_key && \
        ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' && \
        rm -f /etc/ssh/ssh_host_ecdsa_key && \
        ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
        rm -f /etc/ssh/ssh_host_ed25519_key && \
        ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
    
    
    # SSH登录设置
    RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    
    # 容器启动时启动SSH服务
    CMD ["/usr/sbin/sshd", "-D"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    构建与运行:注意映射到宿主机的22端口可能与宿主机的SSH服务冲突,可以选择其他端口,本案例使用1234端口。

    docker build -t ssh-enabled-container .
    
    docker run -d -p 1234:22 ssh-enabled-container
    
    • 1
    • 2
    • 3

    客户端生成SSH密钥对:

    ssh-keygen
    
    • 1

    使用ssh-copy-id命令来帮助完成免密登录的设置:

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@容器所在主机的IP -p 容器映射的端口
    
    • 1

    SSH连接到容器:完成以上步骤后从任何客户端都可以使用以下命令轻松SSH到容器内,无需密码。

    ssh root@容器所在主机的IP -p 容器映射的端口
    
    • 1

    运行结果:

    图片

    图片

    注意事项:在生产环境中,强烈建议不要允许root用户通过密码登录。允许SSH登录到容器并不是一种推荐的做法,因为它可能会增加安全风险。如果真的需要,考虑使用更安全的方式,如SSH密钥对,而不是密码。

    结论:Docker为我们提供了一个轻量级、隔离的环境来运行应用和服务。虽然SSH到容器内部不是一种推荐的操作,但在某些情况下,这可能是必要的。

    原理图解:

    图片

  • 相关阅读:
    EtherCAT从站EEPROM分类附加信息详解:TXPDO(输出过程数据对象)
    如何将一段字符串在word中,自动删除换行,两两之间增加空格键
    数据库 explain 关键字解析
    Java并发编程学习之线程
    leetcode 268. 丢失的数字(异或!!)
    2022年10月27日下午工作日志
    BAT大厂Java面试,如何抓住面试重点知识?收割大厂offer
    手把手教你springboot集成mybatis
    多线程技术的历史发展与简单使用
    【落地应用】华为之图神经网络在推荐系统中的应用
  • 原文地址:https://blog.csdn.net/hzblucky1314/article/details/133191548