fly*_*ell 5 ssh openssh docker dockerfile docker-compose
我有 4 个容器,配置如下 ( docker-compose.yml
):
version: '3'
networks:
my-ntwk:
ipam:
config:
- subnet: 172.20.0.0/24
services:
f-app:
image: f-app
tty: true
container_name: f-app
hostname: f-app.info.my
ports:
- "22:22"
networks:
my-ntwk:
ipv4_address: 172.20.0.5
extra_hosts:
- "f-db.info.my:172.20.0.6"
- "p-app.info.my:172.20.0.7"
- "p-db.info.my:172.20.0.8"
depends_on:
- f-db
- p-app
- p-db
f-db:
image: f-db
tty: true
container_name: f-db
hostname: f-db.info.my
networks:
my-ntwk:
ipv4_address: 172.20.0.6
p-app:
image: p-app
tty: true
container_name: p-app
hostname: p-app.info.my
networks:
my-ntwk:
ipv4_address: 172.20.0.7
p-db:
image: p-db
tty: true
container_name: prod-db
hostname: p-db.info.my
networks:
my-ntwk:
ipv4_address: 172.20.0.8
Run Code Online (Sandbox Code Playgroud)
每个图像都是由相同的构建的Dockerfile
:
FROM openjdk:8
RUN apt-get update && \
apt-get install -y openssh-server
EXPOSE 22
RUN useradd -s /bin/bash -p $(openssl passwd -1 myuser) -d /home/nf2/ -m myuser
ENTRYPOINT service ssh start && bash
Run Code Online (Sandbox Code Playgroud)
现在我希望能够f-app
在运行此行时连接到任何其他计算机而无需输入密码:ssh myuser@f-db.info.my
。
我知道我需要在服务器之间交换 ssh 密钥(这不是问题)。我的问题是如何使用 docker 容器以及何时(构建或运行时)执行此操作!
对于ssh
没有密码的情况,您需要创建无密码用户并SSH keys
在容器中进行配置,此外您还需要ssh keys
在源容器中添加公钥,并且应在目标容器的授权中添加公钥。
这是正在运行的 Dockerfile
FROM openjdk:7
RUN apt-get update && \
apt-get install -y openssh-server vim
EXPOSE 22
RUN useradd -rm -d /home/nf2/ -s /bin/bash -g root -G sudo -u 1001 ubuntu
USER ubuntu
WORKDIR /home/ubuntu
RUN mkdir -p /home/nf2/.ssh/ && \
chmod 0700 /home/nf2/.ssh && \
touch /home/nf2/.ssh/authorized_keys && \
chmod 600 /home/nf2/.ssh/authorized_keys
COPY ssh-keys/ /keys/
RUN cat /keys/ssh_test.pub >> /home/nf2/.ssh/authorized_keys
USER root
ENTRYPOINT service ssh start && bash
Run Code Online (Sandbox Code Playgroud)
docker-compose 将保持不变,这是您可以尝试的测试脚本。
#!/bin/bash
set -e
echo "start docker-compose"
docker-compose up -d
echo "list of containers"
docker-compose ps
echo "starting ssh test from f-db to f-app"
docker exec -it f-db sh -c "ssh -i /keys/ssh_test ubuntu@f-app"
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,您可以尝试上面的工作示例docker-container-ssh
git clone git@github.com:Adiii717/docker-container-ssh.git
cd docker-container-ssh;
./test.sh
Run Code Online (Sandbox Code Playgroud)
您可以更换密钥,因为这些密钥仅用于测试目的。
归档时间: |
|
查看次数: |
6399 次 |
最近记录: |