写在前面

本文介绍了在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博客

[2] Alpine 安装 ssh 和 sftp - 一記

[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的更多相关文章

  1. Alpine容器中运行go的二进制文件

    Alpine容器中运行go的二进制文件 kuSorZ · 3月之前 · 214 次点击 · 预计阅读时间 1 分钟 · 2分钟之前 开始浏览 原文出处:https://cloud.tencent.co ...

  2. Centos7基于容器安装运行Docker私有仓库及添加认证

    一.前言 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理 ...

  3. Docker实践 - 安装Docker并在容器里运行tomcat

    安装Docker yum install docker 本文使用的系统是centos7,ubuntu使用以下命令 sudo apt-get update sudo apt-get install do ...

  4. Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  5. Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  6. 为Docker容器中运行的gitlab添加ssh的一些问题记录

    最近做的一个东西,是将gitlab10.x的汉化版本,从源码编译(在源码中自己定制一些东西),然后制作成Docker镜像,作为Docker容器来运行 在启用容器中的gitlab的ssh的时候,遇到了一 ...

  7. 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息

    在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...

  8. centos容器安装nginx及运行

    进入centos容器: 安装依赖:yum insatll -y wget gcc gcc-c++ make openssl-devel 安装: 到官网复制下载链接:http://nginx.org/d ...

  9. 在容器中运行 Jenkins pipeline 任务

    持续集成中的 pipeline 技术和 docker 都是当前正在发展的主流方向,当然把它们结合起来在 CI/CD 过程中发挥出更强大的威力也是大家共同的目标.本文将介绍如何在 Jenkins pip ...

随机推荐

  1. Android系统编程入门系列之应用级文件在应用程序间的共享

    在上篇文章了解到应用级文件只能被其所创建的应用程序所访问,那么其他应用程序是不是就无论如何都无法访问了呢?肯定不是的,只要文件经过其创建的应用程序授权,还是可以被其他应用程序所访问的.这也就是应用级文 ...

  2. 1-SQL Server2019安装

    sql server2019安装 首先去官网下载(下载express版本): 打开安装程序 选择自定义 更改一下安装目录,点击安装 等待安装 等安装完成后,出现如下页面 选择SQL Server独立安 ...

  3. 【nvidia jetson xavier】 Deepstream Yolov3示例模型运行

    作者声明 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 原文链接:https://www.cnblogs.com/phoenixash/p/15 ...

  4. MySQL8 根据某属性查询字段排名由自定义变量到rank()的变动

    在mysql8 之前的版本,因为没有rank()方法的存在,所以在对字段进行排名时,使用的是自定义自变量的方法,比如: select id,name,@rank=@rank+1 as ranks fr ...

  5. Boost Started on Windows

    Boost 官网指南 Boost C++ Libraries Boost Getting Started on Windows - 1.77.0 ① 下载 Boost.7z包 下载 .7z包 boos ...

  6. Linux命令(二)

    1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...

  7. JS最简单的定时累加计数器

    js代码: 1 var timer , k = 0; 2 function star() { 3 k += 1; 4 document.getElementById("num"). ...

  8. 【数据结构与算法Python版学习笔记】树——二叉查找树 Binary Search Tree

    二叉搜索树,它是映射的另一种实现 映射抽象数据类型前面两种实现,它们分别是列表二分搜索和散列表. 操作 Map()新建一个空的映射. put(key, val)往映射中加入一个新的键-值对.如果键已经 ...

  9. 生产环境全链路压测平台 Takin

    什么是Takin? Takin是基于Java的开源系统,可以在无业务代码侵入的情况下,嵌入到各个应用程序节点,实现生产环境的全链路性能测试,适用于复杂的微服务架构系统. Takin核心原理图 Taki ...

  10. mybatis自定义分页拦截器

    最近看了一下项目中代码,发现系统中使用的mybatis分页使用的是mybatis自带的分页,即使用RowBounds来进行分页,而这种分页是基于内存分页,即一次查出所有的数据,然后再返回分页需要的数据 ...