实现 Docker 容器间 SSH

介绍

在 Docker 中,每个容器都是相互隔离的,无法直接进行 SSH 连接。但是在某些情况下,我们可能需要在容器之间进行 SSH 连接,以便进行调试或其他操作。本文将介绍如何实现 Docker 容器间的 SSH 连接,并提供详细的步骤和代码示例。

整体流程

下面是实现 Docker 容器间 SSH 连接的整体流程:

journey
    title Docker 容器间 SSH 连接流程
    section 创建网络
    section 创建容器
    section 配置 SSH 服务
    section 连接 SSH

创建网络

首先,我们需要创建一个 Docker 网络,以便容器之间能够相互通信。创建网络的步骤如下:

  1. 使用以下命令创建一个网络:
docker network create my-network

创建网络后,我们可以在容器创建时将其加入到这个网络中。

创建容器

接下来,我们需要创建两个容器,一个作为 SSH 服务器,另一个作为 SSH 客户端。创建容器的步骤如下:

  1. 使用以下命令在服务器容器中启动 SSH 服务:
docker run -d --name ssh-server --network my-network -p 2222:22 my-ssh-server-image
  • -d 参数表示将容器以后台模式运行。
  • --name 参数指定容器的名称,我们将其命名为 ssh-server
  • --network 参数将容器连接到之前创建的 my-network 网络。
  • -p 参数将容器的 SSH 端口映射到主机的 2222 端口,以便我们能够通过主机的 SSH 客户端连接到容器。
  • my-ssh-server-image 是 SSH 服务器的镜像名称,需要提前准备好。
  1. 使用以下命令在客户端容器中启动 SSH 客户端:
docker run -it --name ssh-client --network my-network my-ssh-client-image
  • -it 参数表示将容器以交互模式运行,并分配一个伪终端。
  • --name 参数指定容器的名称,我们将其命名为 ssh-client
  • --network 参数将容器连接到之前创建的 my-network 网络。
  • my-ssh-client-image 是 SSH 客户端的镜像名称,需要提前准备好。

配置 SSH 服务

在 SSH 服务器容器中,我们需要对 SSH 服务进行配置,以允许容器间的 SSH 连接。配置 SSH 服务的步骤如下:

  1. 在服务器容器中执行以下命令安装 SSH 服务:
apt-get update
apt-get install -y openssh-server
  1. 修改 SSH 配置文件 /etc/ssh/sshd_config,确保以下配置项被设置为正确的值:
# 将以下两行注释去掉,允许使用密码登录
# PasswordAuthentication yes
# PermitEmptyPasswords no

# 将以下一行注释去掉,允许 root 用户登录
# PermitRootLogin yes

# 允许 root 用户使用密码登录
# 注意:在生产环境中,建议使用 SSH 密钥登录而不是密码登录
  1. 重启 SSH 服务以使配置生效:
service ssh restart

连接 SSH

现在,我们已经完成了服务器和客户端的配置,可以进行容器间的 SSH 连接了。连接 SSH 的步骤如下:

  1. 在客户端容器中执行以下命令连接到服务器容器:
ssh -p 2222 root@ssh-server
  • -p 参数指定 SSH 服务器的端口,我们之前将其映射到主机的 2222 端口。
  • root@ssh-server 是 SSH 服务器的地址,root 是登录用户名,ssh-server 是之前创建的服务器容器的名称。
  1. 输入 SSH 服务器的密码(如果之前配置了密码登录)或者私钥密码(如果之前配置了 SSH 密钥登录),即可成功连接到服务器容器。