在运行时在docker容器中拉入ssh键

时间:2016-09-01 13:15:58

标签: node.js git ssh docker dockerfile

我正在创建一个nodejs应用程序,它将与Git repo集成并执行诸如push,pull commit等操作。我正在将应用程序移动到Docker。 但是我找不到在运行时将ssh键放入docker镜像的方法。我想避免出于安全原因在docker映像中的构建时复制ssh密钥。

我尝试在运行时将ssh键作为env变量传递,如:

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

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

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

然而,这似乎并没有起作用,我在尝试克隆回购时仍然遇到权限错误。

  1. 我是否需要执行某些操作来加载ssh密钥以便git可以使用它们?
  2. 有没有办法使用Dockerfile来做到这一点。我知道我可以在构建,时间上添加它,但是没有找到在运行时执行此操作的方法。
  3. 如何检查正在运行的docker容器的fs?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

  1. 如果要通过SSH进行身份验证,则需要添加私有密钥,而不是公钥。在您的情况下,可能是文件id_rsa。服务器使用公钥来验证您的身份。

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

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

    docker exec -it imagename /bin/bash
    

    这假设您正在运行带有bash的系统。否则,请尝试/bin/sh

答案 2 :(得分:0)

对于host和docker的非root用户:

system("start powershell.exe Set-SmbServerConfiguration –EncryptData $true -Confirm:$false");