我正在创建一个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) => {
})
})
然而,这似乎并没有起作用,我在尝试克隆回购时仍然遇到权限错误。
答案 0 :(得分:2)
以下设计示例演示了如何从容器中读取主机上的私钥。
docker run -it --rm -v ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro ubuntu cat /root/.ssh/id_rsa
这应该让以root身份运行的进程使用您的凭据进行身份验证。
答案 1 :(得分:0)
如果要通过SSH进行身份验证,则需要添加私有密钥,而不是公钥。在您的情况下,可能是文件id_rsa
。服务器使用公钥来验证您的身份。
Dockerfile
仅用于构建,因此无法在运行时使用它来执行任何操作。我认为你对环境变量的方法是合理的......
您可以通过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");