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 ...
随机推荐
- mimikatz使用笔记
一.获取密码# privilege::debug sekurlsa::logonpasswords mimikatz.exe "sekurlsa::debug" "sek ...
- Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 每日总结:Java基本语法 (2021.9.23)
对象:对象是类的一个实例,有状态和行为. 类:类是一个模板,它描述一类对象的行为和状态. 方法:方法就是行为,一个类可以有很多方法. 实例变量:每个对象都有独特的实例变量,对象的状态由这些实 ...
- 题解 有标号DAG计数
题目传送门 题目大意 给出\(n\),求出对于任意\(t\in[1,n]\),点数为\(t\)的弱联通\(\texttt{DAG}\)个数.答案对\(998244353\)取模. \(n\le 10^ ...
- JavaScript兼容性汇总
一般兼容性问都体现到DOM和事件上 只聊ie6+版本浏览器,希望小伙伴们别纠结更低版本浏览器哈^_^ DOM 获取元素 document.getElementsByclassName 不兼容ie6 ...
- HCNP Routing&Switching之BGP路由宣告
前文我们了解了BGP报文结构.类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html:今天我们来聊一聊BGP路由宣告 ...
- 手把手教你学Dapr - 2. 必须知道的概念
Sidecar 边车 Dapr API提供Http和gRPC两种通讯方式. 运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释). 这样的好处是与运行环境无 ...
- Prometheus监控Canal
Prometheus监控Canal 一.背景 二.实现步骤 1.修改prometheus.yml配置文件 2.启动prometheus 3.查看prometheus是否成功接入canal 4.cana ...
- 搬运1:关于对C语言中数组名取地址加减等操作的一点探究
对于数组名取地址强制转换的操作 偶然在晚上学了C语言指针后网页闲逛找题时,被一个数组名取地址搞糊涂了,在自己试验加探索后我稍微悟了一点东西. 代码如下: #include<stdio.h> ...
- 关于麦克风的参数介绍 - 驻极体麦克风(ECM)和硅麦(MEMS)
1.麦克风的分类1.1.动圈式麦克风(Dynamic Micphone)原理:基本构造包含线圈.振膜.永久磁铁三部分.当声波进入麦克风,振膜受到声波的压力而产生振动,与振膜在一起的线圈则开始在磁场中移 ...