Disgrobox运行Debian容器中ssh服务

备注

distrobox 运行的容器和 Host 主机使用同一个网络堆栈,所以如果Host主机运行了ssh服务占用了22端口,则容器中ssh服务需要配置使用其他端口,否则会因为端口冲突而无法启动容器内ssh服务!!!

我计划构建不同的容器来运行开发环境,其中 Distrobox运行VS Code(基于debian容器) 作为开发IDE,需要通过 VS Code远程开发-SSH模式 访问不同容器环境进行开发。所以,需要在 Disgrobox运行Debian 中构建ssh服务。

以下操作在 Debian 容器中进行

  • 安装 openssh-server :

在debian中安装 oepnssh-server
sudo apt update
sudo apt install openssh-server -y

修订 /etc/ssh/sshd_config 使得 sshd 监听不同端口以避免和Host主机sshd端口或其他容器sshd端口冲突:

调整容器中 sshd 服务端口
#Port 22
Port 23
  • 容器内启动服务使用 openrcservice 命令:

容器内启动sshd
sudo service ssh start
  • 测试没有问题之后,关闭容器:

停止容器
distrobox stop debian-dev
  • 将运行容器提交(commit)为一个 debian-dev 镜像:

将运行容器commit为 debian-dev 镜像
# podman commit my_running_container my_custom_image:latest
podman commit debian-dev debian-dev:latest
  • 移除旧的不带ssh服务的容器 debian-dev ,然后重启创建容器,这次创建使用了内置 sshd 服务端讲讲 debian-dev :

distrobox run 启动容器时运行ssh服务
distrobox rm debian-dev # Remove existing container first
distrobox create --name debian-dev --image debian-dev:latest --init-hooks "sudo service ssh start" --additional-flags "-p 2222:22"