SSH 从一个容器到另一个容器
Ssh from one container to another container
我想创建一个容器网络,其中一个中央容器应该能够通过 ssh 连接到所有其他容器。通过 ssh 中央容器可以使用 Ansible 更改所有其他容器的配置。我知道不建议从一个容器 ssh 到另一个容器,我们可以使用卷进行数据共享,但这不适合我的用例。我能够从主机通过 ssh 连接到容器,但无法从一个容器通过 ssh 连接到另一个容器。
Docker 我使用的文件是:
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y netcat ssh iputils-ping
EXPOSE 22
由 Docker 文件创建的图像名为 ubuntu:v2
然后使用下面的命令我创建了两个容器 u1 和 u2
docker run -p 22 --rm -ti --name u1 ubuntu:v2 bash
docker run -p 22 --rm -ti --name u2 ubuntu:v2 bash
在容器中,我在 运行 下面的命令下在容器中创建用户。在 u1 容器中创建用户 u1,在 u2 容器中创建用户 u2
root@d0b0e44f7517:/# mkdir /var/run/sshd
root@d0b0e44f7517:/# chmod 0755 /var/run/sshd
root@d0b0e44f7517:/# /usr/sbin/sshd
root@d0b0e44f7517:/#
root@d0b0e44f7517:/# useradd --create-home --shell /bin/bash --groups sudo u2
root@d0b0e44f7517:/# passwd u2
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@d0b0e44f7517:/#
root@d0b0e44f7517:/#
我做了两个容器,除了一个有用户 u1 而另一个有用户 u2 之外,它们都是一样的,如上所示。在此之后,我尝试使用命令 ssh -X u2@localhost -p 32773 (32773 是映射到容器的 22 端口的端口)从主机到容器。所以 ssh 可以从主机到容器,但我无法从一个容器 ssh 到另一个容器 container.So 你能帮我从一个容器 ssh 到其他容器吗?
使用docker 服务发现,然后您可以从一个容器ssh 到另一个容器。这里可以通过将所有容器连接到同一个网络来实现服务发现。
docker network create -d bridge test
docker run -p 22 --rm -ti --name u1 --network test ubuntu:v2 bash
docker run -p 22 --rm -ti --name u2 --network test ubuntu:v2 bash
现在从 u1
开始,您可以使用 ssh user@u2
.
ssh 进入 u2
登录到 docker conatiner
docker exec -it u1 /bin/bash
docker exec -it u2 /bin/bash
登录conatiner后运行使用以下命令安装sshing所需的工具
passwd #Change the password of container it will be asked during ssh
apt-get update
apt-get install vim
apt-get install openssh-client openssh-server
vi /etc/ssh/sshd_config
更改行“PermitRootLogin yes”
service ssh restart
现在您可以使用 root@container_ip
ssh 连接到任何容器
注意:要获取容器 ip,您可以运行以下命令
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <conatiner_name>
我想创建一个容器网络,其中一个中央容器应该能够通过 ssh 连接到所有其他容器。通过 ssh 中央容器可以使用 Ansible 更改所有其他容器的配置。我知道不建议从一个容器 ssh 到另一个容器,我们可以使用卷进行数据共享,但这不适合我的用例。我能够从主机通过 ssh 连接到容器,但无法从一个容器通过 ssh 连接到另一个容器。
Docker 我使用的文件是:
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y netcat ssh iputils-ping
EXPOSE 22
由 Docker 文件创建的图像名为 ubuntu:v2
然后使用下面的命令我创建了两个容器 u1 和 u2
docker run -p 22 --rm -ti --name u1 ubuntu:v2 bash
docker run -p 22 --rm -ti --name u2 ubuntu:v2 bash
在容器中,我在 运行 下面的命令下在容器中创建用户。在 u1 容器中创建用户 u1,在 u2 容器中创建用户 u2
root@d0b0e44f7517:/# mkdir /var/run/sshd
root@d0b0e44f7517:/# chmod 0755 /var/run/sshd
root@d0b0e44f7517:/# /usr/sbin/sshd
root@d0b0e44f7517:/#
root@d0b0e44f7517:/# useradd --create-home --shell /bin/bash --groups sudo u2
root@d0b0e44f7517:/# passwd u2
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@d0b0e44f7517:/#
root@d0b0e44f7517:/#
我做了两个容器,除了一个有用户 u1 而另一个有用户 u2 之外,它们都是一样的,如上所示。在此之后,我尝试使用命令 ssh -X u2@localhost -p 32773 (32773 是映射到容器的 22 端口的端口)从主机到容器。所以 ssh 可以从主机到容器,但我无法从一个容器 ssh 到另一个容器 container.So 你能帮我从一个容器 ssh 到其他容器吗?
使用docker 服务发现,然后您可以从一个容器ssh 到另一个容器。这里可以通过将所有容器连接到同一个网络来实现服务发现。
docker network create -d bridge test
docker run -p 22 --rm -ti --name u1 --network test ubuntu:v2 bash
docker run -p 22 --rm -ti --name u2 --network test ubuntu:v2 bash
现在从 u1
开始,您可以使用 ssh user@u2
.
u2
登录到 docker conatiner
docker exec -it u1 /bin/bash
docker exec -it u2 /bin/bash
登录conatiner后运行使用以下命令安装sshing所需的工具
passwd #Change the password of container it will be asked during ssh
apt-get update
apt-get install vim
apt-get install openssh-client openssh-server
vi /etc/ssh/sshd_config
更改行“PermitRootLogin yes”
service ssh restart
现在您可以使用 root@container_ip
ssh 连接到任何容器
注意:要获取容器 ip,您可以运行以下命令
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <conatiner_name>