如何在 alpine docker 容器中开启 ssh

由于目前绿联官方没有开启 ssh 的方法,这样导致我想通过 rsync 备份文件到 NAS 里就没法做到了。

于是我想通过在 docker 里运行一个 alpine 容器,在容器里开启 ssh,而我只要将特定的目录挂载到容器内,就可以实现用 rsync 备份文件到 NAS。

创建容器

先搜索并下载 alpine 容器镜像

download-alpine

之后点击创建,起一个名字

Create

把 -i 和 -t 选上

alpine-it-shadow

网络选择 host,这样就不用去设置端口

network-host-shadow

存储空间,把想要操作的文件夹挂载到容器里面,我选择放在 /mnt,注意后面要改为「读写」

storage

那么要填写的内容就这些而已,可以点下一步,完成创建后再启动,也可以勾选下方的「创建后启动容器」这个选项。

配置与开启 ssh

之后在「容器管理」中找到我们刚才创建的容器,在它启动的情况下,点击详情,然后到最后的终端这里。

ssh-and-rc

使用 apk add 来安装应用,这样装上 openssh 和 openrc

apk add openssh
apk add openrc

OpenRC 是一个用于 Linux 系统的初始化系统和服务管理器。它最初是为 Gentoo Linux 开发的,后来也被广泛地用于其他 Linux 发行版,特别是一些轻量级的发行版,如 Alpine Linux。OpenRC 的目标是提供一种简单而可靠的初始化和服务管理解决方案,它与传统的 sysvinit 和较新的 systemd 相比,更轻量级且易于配置。

之后修改 ssh 的配置文件,使用 vi 来打开

vi /etc/ssh/sshd_config

找到 #PermitRootLogin prohibit-password 把前面的 # 去掉,然后把 prohibit-password 改为 yes。再把 PasswordAuthentication yes 前面的 # 去掉。

sshd-config

让 sshd 在容器启动时自启动(可以理解为开机自启,把容器当成一台机器)

rc-update add sshd

此时如果直接用

rc-service sshd start

来启动 sshd 应该启动不了,会报错。需要先执行

touch /run/openrc/softlevel

然后就可以启动了

rc-service sshd start

查看状态可以用

rc-service sshd status

rc-sshd-status

此时就可以使用 ssh 来连接了

❯ ssh root@192.168.68.197
The authenticity of host '192.168.68.197 (192.168.68.197)' can't be established.
ED25519 key fingerprint is SHA256:0h5hViR5234yJ3VqbuATQApvu+RONcbhhOygThKadjk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.68.197' (ED25519) to the list of known hosts.
root@192.168.68.197's password:

但是容器的密码是什么呢?

其实并没有密码,如果我们想要使用密码得自己设置一个,输入 passwd 就可以设置密码。

/ # passwd
Changing password for root
New password:
Bad password: too short
Retype password:
passwd: password for root changed by root
/ #

这样我们就可以使用 root 用户名,加上自己设置的密码,来 ssh 连接上 alpine 容器。由于之前将 NAS 的特定文件夹挂载到 /mnt,可以使用 ls /mnt 命令,看看是否能在容器中看到 NAS 中的文件,可以的话就没问题了。

参考文档:Alpine容器安装运行ssh - 同勉共进 - 博客园