You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:27:05