2016-11-07 37 views
3

在docker中,當容器必須與外部系統進行通信時,如何在一般情況下配置known_hosts,authorized_keys和ssh連接的需求範圍?Docker,如何處理SSH密鑰,known_hosts和authorized_keys

例如,我運行詹金斯容器,並嘗試從GitHub籤項目中工作,但連接失敗,出現錯誤host key verification failed

這可以通過登錄到容器來解決,連接到手動和信任的GitHub提示時顯示主機密鑰。然而,這不是一個合適的解決方案,因爲所有事情都需要100%自動化(我正在建造CI管道,並配備了安全和碼頭工人)。另一個(笨重的)解決方案是將正在運行的容器配置成合理的,但這會使事情變得混亂並且難以維護。 Jenkins容器甚至沒有ssh守護進程,我不確定如何從其他主機ssh進入容器。第三種選擇是使用我自己的Dockerfile擴展jenkins映像,其中配置了ssh,但是這會硬編碼並將容器鎖定到這個特定的環境。

那麼碼頭管理(和自動化)與外部系統連接的正確方式是什麼?

回答

3

這就是我的做法,不知道你是否會喜歡這個解決方案。我有一個私有的git倉庫,其中包含authorized_keys和一系列公鑰。然後,我用ansible克隆這個倉庫和替換的authorized_keys:

- git: repo=my_repo dest=my_local_folder force=yes accept_hostkey=yes 

- shell: "cp my_local_folder/authorized_keys ~/.ssh/" 

使用accept_hostkey是實際可以讓我實現流程的自動化(我相信它的來源,當然)。

5

要信任github.com主機時,您可以在開始發出此命令或建立你的容器:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts 

這將公鑰添加github上你的已知主機的文件。

+1

這似乎是可行的選項,在jenkins容器派生的Dockerfile中運行。但是有可能運行官方jenkins容器,並且在啓動容器時注入了這些主機密鑰,以及一些環境變量或其他東西?如果沒有,那麼我需要爲CI環境構建定製jenkins容器。 –

0

試試這個: 登錄到主機,則:

sudo mkdir /var/jenkins_home/.ssh/ 
sudo ssh-keyscan -t rsa github.com >> /var/jenkins_home/.ssh/known_hosts 

詹金斯容器設置歸屬位置到持久地圖,正因爲如此,在主機系統中運行,這將產生所需的結果。

0

一種解決方案是主機的SSH密鑰安裝到碼頭工人與下列選項:

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

這完全適用飯桶。