Alpine容器安装运行ssh
写在前面
本文介绍了在Alpine容器(docker)上安装运行ssh并保证外界(宿主机)能通过ssh登录的方法,给出了相应的命令。在下在探索过程中借鉴了许多前人的经验,在此先行谢过,所有参考内容都会给出链接。
正文
前言
本文所述的Alpine容器不限于通过 docker pull alpine:tag 拉取的镜像建立的容器,而是泛指运行着Alpine操作系统的容器。
可以通过在容器内运行 cat /etc/issue 指令查看容器所运行的OS。注意,即便在容器内运行 cat /process/version 或 uname -a ,得到的仍然是宿主机的OS,参考文档[1]。
过程
step1: pull & run Alpine container
没什么好说的,需要注意的是在run的时候添加端口映射 -v xxxx:yyyy ,其中, xxxx 不建议为22,因为宿主机的ssh很可能已占用了该端口; yyyy 建议为22,因为这是传统习惯,当然,也可以是其它数字。
step2: install
使用 apk add --no-cache openssh-server 安装。参考文档[2]。
step3: set
首先 vi /etc/ssh/sshd_config 打开配置文件,然后,1)找到 # port 22 ,去掉 # ,同时,如果您在step1中将22设置为别的数字,这里也要将22改成那个数字;2)[可选] 视情况修改 #PermitRootLogin prohibit-password 一句,具体可参考文档[3]。3)保存,退出。该步骤还参考了文档[2][4]。
step4: start
通过 /etc/init.d/sshd start 启动。如果报错 bash: /etc/init.d/sshd: /sbin/openrc-run: bad interpreter: No such file or directory ,请先依次执行 apk add --no-cache openrc 和 rc-update add sshd 。参考文档[2][5]。
step5: test & debug
在宿主机上使用 ssh container-ip 测试是否能通,其中 container-ip 可以通过在宿主机上执行 docker inspect container-id | grep IPAddress 得到。如果报错,请依次执行下面的命令。参考文档[6]。
1 ssh-keygen -A
2 rc-status
3 touch /run/openrc/softlevel
4 /etc/init.d/sshd restart
在下没有详细研究这些命令的含义,有兴趣的读者请自行学习。
step6: test & debug again
再次测试,这次可能得到下图所示报错。

解决方法:运行图中建议的命令 ssh-keygen -f "/root/.ssh/known_hosts" -R "container-ip" ,亲测 ssh-keygen -R "container-ip" 也可以。
这次,不出意外,可以得到类似下面的输出,表明可以了。接下来可以配置ssh免密登录,但这不在本文介绍范围之内,请读者自行学习。

写在后面
本文是在下的实践记录。由于个体差异,不保证百分百解决您的问题,但希望能给您提供一些参考和思路。再次由衷感谢所有链接的作者。在下才疏学浅,错误疏漏之处在所难免,恳请广大读者批评指正,您的批评是在下前进的不竭动力。
参考
[1] 如何查看docker容器里的操作系统_ksj367043706的博客-CSDN博客
[3] sshd_config 中 PermitRootLogin 的探讨_huigher的专栏-CSDN博客
[4] ssh配置文件详解 - 简书
[5] linux - Running OpenSSH in an Alpine Docker Container - Stack Overflow
[6] Unable to SSH into Docker container running Alpine Linux 3.10 - Stack Overflow
Alpine容器安装运行ssh的更多相关文章
- Alpine容器中运行go的二进制文件
Alpine容器中运行go的二进制文件 kuSorZ · 3月之前 · 214 次点击 · 预计阅读时间 1 分钟 · 2分钟之前 开始浏览 原文出处:https://cloud.tencent.co ...
- Centos7基于容器安装运行Docker私有仓库及添加认证
一.前言 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理 ...
- Docker实践 - 安装Docker并在容器里运行tomcat
安装Docker yum install docker 本文使用的系统是centos7,ubuntu使用以下命令 sudo apt-get update sudo apt-get install do ...
- Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- 为Docker容器中运行的gitlab添加ssh的一些问题记录
最近做的一个东西,是将gitlab10.x的汉化版本,从源码编译(在源码中自己定制一些东西),然后制作成Docker镜像,作为Docker容器来运行 在启用容器中的gitlab的ssh的时候,遇到了一 ...
- 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息
在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...
- centos容器安装nginx及运行
进入centos容器: 安装依赖:yum insatll -y wget gcc gcc-c++ make openssl-devel 安装: 到官网复制下载链接:http://nginx.org/d ...
- 在容器中运行 Jenkins pipeline 任务
持续集成中的 pipeline 技术和 docker 都是当前正在发展的主流方向,当然把它们结合起来在 CI/CD 过程中发挥出更强大的威力也是大家共同的目标.本文将介绍如何在 Jenkins pip ...
随机推荐
- Dubbo与Zookeeper简单理解
理论 在<分布式系统原理与范型>一书中有如下定义:"分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统 "; 分布式系统是由一组通过网络进行通信. ...
- Idea生成JavaDoc文档
什么是JavaDoc javadoc是Sun公司提供的一个技术 它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档 实现方式 命令行方式 javadoc -encoding ...
- JOIN US | SphereEx 精英集结
新环境.新气象,SphereEx 欢迎志同道合的你加入! 关于 SphereEx 北京思斐软件技术有限公司(sphere-ex.com),是一家致力于构建新型分布式数据基础设施的公司,秉承开源.共享. ...
- 开发数学系统时,需要掌握的几个基于Web的数学框架
在做数学系统时,经常要和数学公式打交道,这里介绍几个常用的基于Web的数学处理软件. 数学系统主要包括三类:(1)数学公式的显示,也就是如何使用web显示复杂的数学公式. (2)图像制作,例如长方形, ...
- Frida高级逆向-Hook Native(Java So)2
Frida Hook So 一些操作说明 Native方法第一个参数是 JNIEnv *env 如何在Frida中获取 JNIEnv 对象呢? Java.vm.getEnv(); 如何将string类 ...
- [Git系列] Git 基本概念
版本控制系统 版本控制系统是一种帮助软件开发者实现团队合作和历史版本维护的软件,一个版本控制系统应具备以下列出的这几个基本功能: 允许开发者并发工作: 不允许一个开发者覆写另一个开发者的修改: 保存所 ...
- Java版人脸检测详解下篇:编码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Java:HashMap类小记
Java:HashMap类小记 对 Java 中的 HashMap类,做一个微不足道的小小小小记 概述 HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复 ...
- BUAA 软工 | 从计算机技术中探索艺术之路
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 掌握软件开发方法学和工程学知识 这个作业在哪个具体方面帮 ...
- 使用Mybatis的TypeHandler加解密数据
使用Mybatis的TypeHandler加解密数据 一.背景 二.解决方案 三.需求 四.实现思路 1.编写一个实体类,凡是此实体类的数据都表示需要加解密的 2.编写一个加解密的`TypeHandl ...