在运行时拖拽docker容器中的ssh键

我正在创build一个nodejs应用程序,该应用程序将与Git仓库集成,并执行诸如push,pull commit等操作。我正在将应用程序移至Docker。 但是我找不到在运行时将ssh密钥放入泊坞窗图像的方法。 为了安全起见,我想避免在构build时在docker镜像中复制ssh密钥。

我曾尝试在运行时将ssh密钥作为envvariables传递,如下所示:

docker run -i -t -e KEY="sshkey" imagename 

并在node.js中手动创buildssh文件夹和ssh密钥

 mkdirSync('/root/.ssh/', (err) => { writeFileSync('/root/.ssh/id_rsa.pub', sshKey, (err) => { }) }) 

但是,这似乎并没有工作,但我仍然在尝试克隆回购时遇到许可错误。

  1. 我需要做些什么来加载SSH密钥,以便他们可以使用GIT?
  2. 有没有办法使用Dockerfile来做到这一点。 我知道我可以将它添加到构build,时间,但还没有find一种方法来在运行时。
  3. 我如何检查正在运行的docker集装箱的FS?

  1. 你需要添加你的私钥,如果你想通过SSH进行身份validation,而不是你的公钥。 在你的情况下,这可能是文件id_rsa 。 公钥被服务器用来validation你的身份。

  2. Dockerfile仅用于构build,因此无法在运行时使用它来执行任何操作。 我认为你的方法与环境variables是合理的…

  3. 您可以通过docker exec连接到容器,打开bash并像通常那样与文件系统交互:

     docker exec -it imagename /bin/bash 

    这假定你正在运行一个bash系统。 否则,请尝试/bin/sh

以下人为的例子演示了主机上的私钥如何从容器中读取。

 docker run -it --rm -v ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro ubuntu cat /root/.ssh/id_rsa 

这应该让以root用户身份运行的进程使用您的凭证进行身份validation。

对于主机和docker上的非root用户:

 docker run -v /home/<host user>/.ssh:/home/<docker user>/.ssh <image>