簡體   English   中英

在運行時將SSH密鑰拉入Docker容器

[英]Pull ssh keys in docker container at runtime

我正在創建一個將與Git repo集成並執行諸如push,pull commit等操作的nodejs應用程序。我正在將應用程序移至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?

下面的示例說明了如何從容器內讀取主機上的私鑰。

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

這應該使以root用戶身份運行的進程通過您的憑據進行身份驗證。

  1. 如果要通過SSH進行身份驗證,則需要添加私鑰 ,而不是公共密鑰。 在您的情況下,可能是文件id_rsa 服務器使用公用密鑰來驗證您的身份。

  2. Dockerfile僅用於構建,因此無法在運行時使用它進行任何操作。 我認為您使用環境變量的方法是合理的...

  3. 您可以通過docker exec連接到容器,打開bash並與文件系統進行交互,就像通常那樣:

     docker exec -it imagename /bin/bash 

    假設您正在運行帶有bash的系統。 否則,請嘗試/bin/sh

對於主機和docker上的非root用戶:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM