Docker 下多机器免密码 SSH 登录
在 docker-compose.yml 文件所在目录下执行 docker-compose up -d 创建并启动三个容器,如下图:

执行命令 docker exec -it a0 ip addr 可以拿到 a0 容器的 ip 是 172.19.0.2,如下图:
再执行 docker exec -it a1 ip addr 和 docker exec -it a2 ip addr 命令,得到所有容器的地址如下表:
容器名称 | IP 地址 | 映射端口
| - | - a0 | 172.19.0.2 | 19010 a1 | 172.19.0.3 | 19011 a2 | 172.19.0.4 | 19012
登录 a0 容器,修改 ssh 配置,创建 ssh key
由于 a0 的 22 端口已经映射到当前电脑的 19010 端口,因此在当前电脑的命令行执行 ssh root@localhost -p 19010 即可登录 a0,密码是 password,如下图:
登录 a0 后,用 vi 打开文件/etc/ssh/sshd_config,找到下图红框中的两个配置:RSAAuthentication 和 PubkeyAuthentication:
将每个配置最左边的"#"去掉,最终配置如下图所示:
接下来在命令行输入 ssh-keygen -t rsa,连续回车,最终会在/root/.ssh 目录下生成 idrsa 和 idrsa.pub 文件,如下图:
分别登录 a1、a2 容器,修改 ssh 配置,创建 ssh key
将上面做的登录容器、修改 ssh 配置、创建 ssh key 三件事,在 a1 和 a2 容器上也各做一次;
在 a0 上合并 a0、a1、a2 的公钥
登录 a0 容器后,在/root/.ssh 目录下执行以下命令,将 a0 的公钥追加到 authorizedkeys 文件中(如果 authorizedkeys 不存在会新建):
cat id_rsa.pub>> authorized_keys
然后执行以下命令,将 a1 的公钥追加到 a0 的 authorized_keys 文件中:
ssh root@172.19.0.3 cat ~/.ssh/id_rsa.pub>> authorized_keys
执行上述命令的时候会要求输入密码,输入"password"后,就会把 a1 的公钥追加到 a0 的 authorized_keys 文件中;
再执行以下命令,将 a2 的公钥也追加到 a0 的 authorized_keys 文件中:
ssh root@172.19.0.4 cat ~/.ssh/id_rsa.pub>> authorized_keys
执行完毕后,用 cat authorizedkeys 看一下 authorizedkeys 文件,里面已经有了三个公钥,如下图:
把 a0 上合并好的公钥文件复制到 a1
在当前电脑上新开一个控制台窗口,执行 ssh root@localhost -p 19011 登录 a1,然后执行以下命令就能将 a0 的 authorized_keys 文件复制到 a1:
ssh root@172.19.0.2 cat ~/.ssh/authorized_keys>> ~/.ssh/authorized_keys
这次没有要求输入密码,因为 a0 上已经有了 a1 的公钥了,执行完毕后可以检查/root/.ssh 目录,里面的 authorized_keys 文件和 a0 上一模一样;










评论