如何在Docker容器中从txt文件读取内容生成对应SSH密钥
实现方案
你需要的逻辑不需要用ssh-keygen生成全新密钥,直接将file.txt中存储的已有密钥内容写入SSH指定的私钥文件、配置正确权限即可,完整实现步骤如下:
第一步:修改docker-entrypoint.sh内容
#!/bin/bash service ssh restart # 按实际情况调整以下两个路径 # SSH私钥默认读取路径,若使用非root用户,替换为对应用户家目录下的路径,比如/home/debian/.ssh/id_rsa SSH_KEY_PATH="/root/.ssh/id_rsa" # 容器内file.txt的存放路径 KEY_FILE="/path/to/file.txt" # 自动创建.ssh目录,配置目录权限 mkdir -p "$(dirname "$SSH_KEY_PATH")" chmod 700 "$(dirname "$SSH_KEY_PATH")" # 读取file.txt第一行的密钥内容写入私钥文件 head -n 1 "$KEY_FILE" > "$SSH_KEY_PATH" # SSH强制要求私钥权限为600,权限过高会直接报错 chmod 600 "$SSH_KEY_PATH" # 可选:如果需要同步生成对应的公钥文件,添加以下两行 ssh-keygen -y -f "$SSH_KEY_PATH" > "${SSH_KEY_PATH}.pub" chmod 644 "${SSH_KEY_PATH}.pub" # 如果是给非root用户使用SSH,添加以下行修改文件归属,debian替换为实际用户名 # chown -R debian:debian "$(dirname "$SSH_KEY_PATH")" exec "$@"
第二步:确认密钥文件放入容器的方式
你可以二选一:
- 敏感密钥不建议打包进镜像,运行容器时挂载:
docker run -v 本地file.txt路径:/path/to/file.txt 你的镜像名 - 不需要对外分发镜像的话,直接在Dockerfile中添加一行
COPY file.txt /path/to/file.txt即可
可选Dockerfile优化
你当前的Dockerfile可以合并操作层减少镜像体积,调整后参考:
FROM node RUN apt-get update && apt-get install -y openssh-server && rm -rf /var/lib/apt/lists/* WORKDIR /home/debian COPY ./ /home/debian RUN git init && git clone --branch master https://github.com/SamLProgrammer/LAB1SD.git WORKDIR /home/debian/LAB1SD RUN npm install COPY docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh ENTRYPOINT ["sh", "/docker-entrypoint.sh"] CMD ["node", "index.js"]
内容的提问来源于stack exchange,提问作者Clown
相关产品推荐
相关产品推荐

