有时候我们想把 Docker 环境提供给别人,但是又不想提供宿主机,那么可以在 Docker 容器内运行 SSH 服务,使容器保持运行并提供给对方使用即可,下面我们以 CentOS 7.6 的 Docker 镜像为例进行配置。

首先开启 Docker 环境,为了方便可以提前映射宿主机的端口:

docker run -it -p 20022:22 centos:7.6.1810 /bin/bash

然后进入后安装相关的环境:

yum install passwd openssl openssh-server -y
# 可选安装必要的网络工具
yum install net-tools iproute

安装后生成相应的 host key:

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''

然后建议修改 SSH 配置文件中的 UseDNS 为 no 关闭 DNS 来提升性能:

sed -i "s/#UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config
# 或者安装 vim 然后修改也可以
yum install vim

然后可以后台启动 SSH 服务:

/usr/sbin/sshd

启动之后,可以查看端口号以及容器网络的 IP:

netstat -tln | grep 22
ip addr

然后修改 root 用户密码:

passwd root

设置后可以尝试从外部连接容器:

# 宿主机可以直接连接容器的 IP 例如
ssh 172.17.0.2
# 也可以连接映射的端口
ssh localhost -p 20022
# 其他外部机器可以使用宿主机的 IP 来连接
ssh <host-ip> -p 20022

如果刚才运行容器忘记指定 -p 参数,那么可以将修改的镜像保存,然后再运行:

docker commit -m "<commit content>" -a "<auther>" <container-id> centos:7.6.1810-ssh
# 查看镜像
docker images
# 启动镜像
docker run --rm -it -p 20022:22 -d centos:7.6.1810-ssh /usr/sbin/sshd -D

然后就可以使用 SSH 客户端连接了,综合上面这些步骤我们可以直接编写 Dockerfile 创建镜像,例如:

FROM centos:7.6.1810
RUN yum install passwd openssl openssh-server net-tools iproute -y
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
RUN sed -i "s/#UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config
RUN echo "root-123456" | passwd --stdin root
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

然后打包镜像即可:

docker build -t centos:7.6.1810-ssh .

打包后即可从镜像启动容器:

docker run -p 20022:22 -d centos:7.6.1810-ssh

最后就可以通过 SSH 客户端连接了。

Docker 内安装 SSH 服务的更多相关文章

  1. docker中安装ssh服务

    系统:Debian Docker 目标:在docker(debian系统)中安装ssh服务,实现远程登陆和控制docker 步骤: 初始状态:通过docker pull debian得到的一个debi ...

  2. 在CentOS7.5上安装Docker,在Docker中拉取CentOS7.5镜像并安装SSH服务

    # 安装docker yum install -y docker # 启动docker systemctl start docker # 加入开机启动 systemctl enable docker ...

  3. Docker 添加容器SSH服务

    很多时候我们需要登陆到容器内部操作,此时我们就需要开启容器的SSH支持了,下面的小例子将具体介绍三种分配IP地址的方法,分别是pipworl分配,commit分配,Docker分配等. 基于commi ...

  4. Docker创建支持ssh服务的容器和镜像

    原文链接:Docker创建支持ssh服务的容器和镜像 1. 这里使用的centos作为容器,所以首先下载centos的images # sudo docker pull centos 2. 下载后执行 ...

  5. 为Docker镜像添加SSH服务

    一.基于commit命令创建 1. 首先下载镜像 $ docker run -it ubuntu:16.04 /bin/bash 2. 安装SSH服务 #更新apt缓存 root@5ef1d31632 ...

  6. 安装ssh服务

    1.先更新下源 sudo apt-get update 2.安装ssh服务 sudo apt-get openssh-server 3.配置ssh-server,配置文件位于/etc/ssh/sshd ...

  7. Ubuntu安装SSH服务

    1 SSH服务 Ubuntu默认并没有安装ssh服务,如果通过ssh远程连接到Ubuntu,需要自己手动安装ssh-server(openssh-server). 1.1 检测是否安装SSH服务 出现 ...

  8. docker 容器开启ssh服务

    ssh服务安装 安装ssh服务 #yum install openssh-server -y 安装passwd(修改密码需要) #yum install passwd -y 修改sshd_config ...

  9. ubuntu16.04安装ssh服务,并实现远程访问

    一.查看是否安装了ssh服务 apt-cache policy openssh-client openssh-server ubuntu默认安装了openssh-client,openssh-serv ...

  10. Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器

    修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...

随机推荐

  1. 一文搞定POI,再也不怕excel导入导出了

    写在前面 在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求. 通过使用相关的Java库,如Apache POI.EasyPoi或EasyExcel,可以轻松地实现Excel文 ...

  2. ansible-vault 教程

    基本使用 在编写playbook时,可能会涉及到一些敏感的数据,比如密码,当这些敏感数据以明文的方式存储在playbook中时,可能是不能被接受的,那么我们该怎么办呢?ansible官方已经考虑到了这 ...

  3. Mac下使用Docker快速布署FastGPT实现AI私有知识库

    FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理.模型调用等能力.同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景! 官网地址为:https: ...

  4. idea 暂存 Stash Changes Git/Repository/Stash Changes 恢复暂存 UnStash Changes

    idea 暂存 Stash Changes Git/Repository/Stash Changes 恢复暂存 UnStash Changes git stash save "save me ...

  5. c语言中内存分配malloc,calloc,realloc函数的区别和联系

    一 概念: A malloc() 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址 B calloc() 与malloc相似,参数size ...

  6. day06-IO流应用01

    Java坦克大战06 8.IO流应用01 坦克大战6.0版 增加功能: 防止敌人坦克重叠运动 记录玩家的成绩(累计击毁坦克数),存盘退出 记录当时的敌人坦克坐标,存盘退出 玩游戏时,可以选择是开新游戏 ...

  7. ijkplayer编译-RTSP

    1.编译平台和版本 使用操作系统 Ubuntu 18.04 使用ndk版本:android-ndk-r14b-linux-x86_64.zip (使用r17c编译会报错) AS版本:4.2.2 1.1 ...

  8. django(模版层)

    一 模板语法传值 {{}}: 变量相关.过滤器 {%%}: 逻辑相关(静态文件配置.反向解析.标签相关.模版继承和 导入) def index(request): # 模板语法可以传递的后端pytho ...

  9. C++ malloc、calloc、realloc

    1. malloc 函数原型: extern void *malloc(unsigned int num_bytes); 如果分配成功:则返回指向被分配内存空间的指针,不然返回指针NULL .同时,当 ...

  10. 06.Java虚拟机问题

    目录介绍 6.0.0.1 运行时数据区域有哪些?Java虚拟机栈是做什么的?本地方法栈又是做什么的? 6.0.0.2 对象的内存布局?对象的访问定位方式有哪些?使用指针访问和使用句柄访问各具有何优势? ...