Docker 容器中使用 SSH 连接其他容器时出现 “Permission denied(publickey)” 的解决方法

在使用 Docker 进行前端开发时,我们经常会使用容器来模拟开发环境。同时,我们也会经常需要在不同的容器之间进行通信。在这个过程中,我们可能会遇到 “Permission denied(publickey)” 的问题,这个问题的出现一般是由于 SSH 密钥认证失败导致的。本文将介绍如何解决这个问题。

SSH 认证机制

在 SSH 认证机制中,用户会生成一对密钥,分别是公钥和私钥。公钥会被放置在需要登录的服务器上,而私钥则由用户自己保管。当用户需要登录服务器时,服务器会向用户发送一个随机数,用户使用私钥对这个随机数进行加密,并将加密后的结果发送给服务器。服务器使用公钥进行解密,如果解密后的结果与发送的随机数相同,则认证成功。

问题分析

在 Docker 容器中使用 SSH 连接其他容器时,我们一般会使用 SSH 密钥认证机制进行认证。但是,由于容器之间的网络隔离,容器之间不能直接进行 SSH 认证。因此,我们需要将 SSH 密钥复制到其他容器中,才能进行认证。

当我们在容器 A 中使用 SSH 连接容器 B 时,如果出现 “Permission denied(publickey)” 的错误,这个错误一般是由于以下原因导致的:

  1. 容器 A 中的 SSH 密钥没有复制到容器 B 中;
  2. 容器 B 中的 SSH 服务没有启动;
  3. 容器 B 中的 SSH 配置文件没有配置正确。

下面,我们将分别解决这三个问题。

解决问题

1. 复制 SSH 密钥

为了解决这个问题,我们需要将容器 A 中的 SSH 密钥复制到容器 B 中。在 Docker 中,我们可以使用 docker cp 命令将文件从一个容器复制到另一个容器。

例如,我们要将容器 A 中的 .ssh 目录复制到容器 B 中,可以使用以下命令:

------ -- ------------ --------

2. 启动 SSH 服务

在容器 B 中,我们需要启动 SSH 服务。可以使用以下命令启动 SSH 服务:

------- --- -----

3. 配置 SSH 配置文件

在容器 B 中,我们需要配置 SSH 配置文件。可以使用以下命令编辑 SSH 配置文件:

---- --------------------

确保以下配置项正确:

--------------- ---
---------------------- ---

完成以上步骤后,我们就可以在容器 A 中使用 SSH 连接容器 B 了。

示例代码

以下是一个示例代码,用于在容器 A 中使用 SSH 连接容器 B。

-----------

- -- --- ----- - -
------ -- ------------ --------

- ---- - -- --- --
------ ---- - ------- --- -----

- --- - --- --- ---- -
--- ------

总结

本文介绍了在 Docker 容器中使用 SSH 连接其他容器时出现 “Permission denied(publickey)” 的解决方法。我们需要将 SSH 密钥复制到其他容器中,启动 SSH 服务,并确保 SSH 配置文件正确配置。这些步骤可以帮助我们顺利地进行容器间通信,提高前端开发效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/660007f3d10417a222b47893