使用SSH密钥进行Git并在Docker中运行的Spring Cloud Config Server

在最后把这些东西放在一起之前,我发现了许多问题和教程。 想要logging下来,这样别人可以节省很多小时的挫折。

我想在BitBucket上获得一个私人的git仓库,使用部署密钥来处理Spring Boot Config Server,并让它在Docker中运行。 我遇到了很多问题。

  1. 如何真正使用application.yml文件进行configuration。

我似乎无法弄清楚我应该把SSH的信息。 所有的教程似乎都是https。

  1. 如何提供configuration的私钥。 对于开发者来说,YML中内联的语法是一种痛苦。 对于生产,你必须通过一个环境variables来提供它,这是另一个语法杂事。

我不断收到一个私钥无效的错误。

  1. 如何让Docker容器相信主机密钥,而不用担心“你信任这个人”的提示。

似乎有几种方法来做这个工作,但只有一个为我工作。

第一件是configuration。 您希望忽略标准私钥并使用提供的环境variables。 (SSH_KEY)。 另外,git仓库是一个EV(GIT_URL),但你可以硬编码,如果你想。

spring: cloud: config: server: git: uri: ${GIT_URL} ignore-local-ssh-settings: true private-key: ${SSH_KEY} 

第2部分是棘手的。 对于开发者来说,你需要内联键,所以你需要使用一个pipe道在YAML中加上前缀。 (请注意,这个键就像我刚刚生成的那样扔掉了,现在扔掉了)

 private-key: | -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAszmCR06LVHk/kNYV6LoYgEfHlK4rp75sCsRJ7rdAbWNED+yB bneOm5gue0LGIhT7iTP9D7aN6bKVHv1SBconCA7Pa2NMA9epcMT5ecJc8ndpZOFn iqM77jmMMPvj8EIC06w5oK5zoYwpGotYQFHllf8M+20HtW2fZdPYAYwLcVdmc5tI vLoS+10qw5D3X9zrwk2Cbt37Iqnz1cHOQq+g7sxgVgt18aIKKeg0JslaGqSlWMoT ICUMHj89E4BMHj8ND8otSXHL+VhN+ghd7w1MpckxLWBsNs1+G1FuiJEVAtRq/j+8 SOilxgifvI1LqpZ5kO01XFlmkcuN4NMT03qpcwIDAQABAoIBAB5oQGk2sz7mv1kk aV0tzaBeDUd1cWSpUw1UljKRFrY4ZEDLYH5MfH57iE9TWehIZRC3KFU1JMikitZS JktjK9IbKSfQFgKE4XOHh8gXqMteZRw/feCwpydYzic1ZUvK903QZ4qSbn3XGNYv FA79lhUny50Qt4EZkzSkh35js0FMSR9VmyXENxN6IgXUZyoaNAATr44Vkd488BY2 7PvdOniemo8/8p4Ij0Aq9Q7rOtm77ZXjyFRX5mDTi2ndSllMEhVcWXHSii+ukbvF 117Ns+8M7VWroNfRzI+Ilm/Xz/ePOLlNoYcY0h5+QM9vMPTX9Cpl5WofgOMK1sKd mSdI4ukCgYEA12kcu0aDyIrEPHcyaT9izSFply0Uon2QKS9EQn6cr83vaEGViamh f5q1coYouGnsLfbgKolEMKsYtbmJvInPFDCdc2x0Fmc207Wp1OECsN+HwElEXkrs uPDpGQgs5odjN5Grue9837920oG3UBBdVDAKly2dTOcvoWW+88seFSUCgYEA1P7f p78HDMQ8zTy5+3Rd4+lmJjPsY618XxSQ80j8Elrhi/DyTMA0XGc5c3cKRPmSj+JD GN34WQbw7JO2mKM7YJs+tkSBeTKce8F3cZQy1jy3LNHCtfXylOxmxOFKynV5h2b/ jno+pGdmAPK5yvnGASd2eujtzt+AL07XiD2LnLcCgYEAsFRz131WfP/SuShdlLf1 WbODKuQVIxojuwLdHo1kF6k805v0G/dGoxzycOgPRz41vj57q3Yn4qr8FC3n6PTq FT3idUyPDpO41r67Ye469KxWBHo1Q/aTJqTWOs5tatvixOcyqoa3MrUZQCI8+4YZ z8Nvt+b3/66zV6vhDtHzMx0CgYAvWW2M0+mUS/ecRHivzqGkrdkYewh87C8uz9qd SsdGqU9kla63oy7Ar+3Unkz5ImYTeGAkIgw4dlOOtBOugPMNOdXKHRaPQ9IHrO2J oUFf4OVzoDnhy4ge1SLPd6nxsgXPNPVwzfopABdr9Ima9sWusgAjuK5NA+ByI9vE HLJxpwKBgQCTM938cdx457ag1hS6EaEKyqljS1/B8ozptB4cy3h0hzw0crNmW84/ 1Lt9MJmeR4FrWitQkkVLZL3SrYzrP2i+uDd4wVVD5epvnGP/Bk6g05/eB9LgDRx/ EeBgS282jUBkXZ6WpzqHCcku3Avs3ajzsC1WaEYx0tCiBxSkiJlaLQ== -----END RSA PRIVATE KEY----- 

在生产环境中,您需要在命令提示符处使用bashvariables来存储密钥,然后将其传递到运行容器的Docker命令。 例:

 $ pem=$( cat path_to_key ) $ docker run -e "SSH_KEY=$pem" configserver 

在这一点上,你应该有照顾的应用程序。 现在你只需要通过SSH主机不可信任的问题。 为此,请在Dockerfile中添加这些行。 用你想要的任何主机replace“bitbucket.org”。 这些命令创buildssh config目录,修复权限,然后创build并填充knownhosts文件。

 RUN mkdir -p /root/.ssh RUN chmod 700 /root/.ssh RUN ssh-keyscan bitbucket.org > /root/.ssh/known_hosts