gpt4 book ai didi

Dockerfile 添加容器和主机的 ssh key

转载 作者:行者123 更新时间:2023-12-02 20:03:49 29 4
gpt4 key购买 nike

我想在不询问密码的情况下将容器 ssh 放入主机。为此,我需要保存 ssh key 。我有以下dockerfile:

FROM easypi/alpine-arm

RUN apk update && apk upgrade

RUN apk add openssh
RUN ssh-keygen -f /root/.ssh/id_rsa
RUN ssh-copy-id -i /root/.ssh/id_rsa user@<ipadress of host>

但问题是IP地址不是恒定的。因此,如果我在其他机器上使用相同的图像,它将无法在那里工作。我该如何解决这个问题。

谢谢

最佳答案

这些东西都不应该在你的 Dockerfile 中。将 ssh 私钥放入 Dockerfile 中尤其危险,因为任何拥有您的镜像的人几乎都可以轻松地取出 key 。

还要考虑从 Docker 容器进行入站或出站 ssh 连接是不寻常的;它们通常是独立的,所有的长期状态都应该用 Dockerfile 来描述以及它所在的源代码控制存储库,它们通常运行不是 sshd 的单个服务器类型进程。

说了这么多:如果你真的想这样做,正确的方法是构建一个期望 .ssh 的图像。要从主机注入(inject)的目录,并将出站 IP 地址作为某种参数。一种方法是编写一个 shell 脚本,它是“容器所做的唯一事情”:

#!/bin/sh
usage() {
echo "Usage: docker run --rm -it -v ...:$HOME/.ssh myimage $0 10.20.30.40"
}
if [ -n "$1" ]; then
usage >&2
exit 1
fi
if [ ! -f "$HOME/.ssh" ]; then
usage >&2
exit 1
fi
exec ssh "user@$1"

然后将其构建到您的 Dockerfile 中:
FROM easypi/alpine-arm
RUN apk update \
&& apk upgrade \
&& apk add openssh
COPY ssh_user.sh /usr/bin
CMD ["/usr/bin/ssh_user.sh"]

现在在主机上生成 ssh key 对

mkdir some_ssh
ssh-keygen -f some_ssh/id_rsa
ssh-copy-id -i some_ssh/id_rsa user@10.20.30.40
sudo chown root some_ssh

然后在运行时将其注入(inject) Docker 容器

sudo docker run --rm -it \
-v $PWD/some_ssh:/root/.ssh \
my_image \
ssh_user.sh 10.20.30.40

(我很确定如果绑定(bind)挂载的 .ssh 目录不是由运行该进程的相同数字用户 ID 拥有,那么出站 ssh 连接会报错;因此是上面的 chown root。另请注意,您正在设置一个系统,你必须在主机上拥有 root 权限才能建立一个简单的出站 ssh 连接,从安全角度来看,这感觉有点奇怪。[考虑一下,你可以将任何目录放入该 -v 选项并运行交互式 shell。 ])

关于Dockerfile 添加容器和主机的 ssh key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51592340/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com