Tenemos la mejor respuesta que encontramos online. Esperamos que te sea de ayuda y si puedes aportar algún detalle que nos pueda ayudar a crecer hazlo libremente.
La primera pieza es la configuración. Quieres ignorar el estándar privado key y utilice uno proporcionado como variable de entorno. (SSH_KEY). Además, el repositorio de git es un EV (GIT_URL) pero puede codificarlo si lo desea.
spring:
cloud:
config:
server:
git:
uri: $GIT_URL
ignore-local-ssh-settings: true
private-key: $SSH_KEY
La segunda parte es complicada. Para Dev, quieres el key en línea, por lo que debe utilizar una tubería para prefix el bloque en YAML. (Tenga en cuenta esto key se tira como en lo acabo de generar y ahora lo he tirado)
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-----
En el frente de producción, necesita usar una variable bash en el símbolo del sistema para almacenar su key antes de pasarlo al comando de Docker que ejecuta su contenedor. Ejemplo:
$ pem=$( cat path_to_key )
$ docker run -e "SSH_KEY=$pem" configserver
En este punto, debería encargarse de la aplicación. Ahora todo lo que necesita es superar el problema del host ssh no confiable. Para esto, agregue estas líneas en su Dockerfile. Reemplace “bitbucket.org” con el host que desee. Estos comandos crean el directorio de configuración ssh, corrigen los permisos y luego crean y completan el archivo de hosts conocidos.
RUN mkdir -p /root/.ssh
RUN chmod 700 /root/.ssh
RUN ssh-keyscan bitbucket.org > /root/.ssh/known_hosts
Quería agregar un giro más a esto, que con suerte eliminaría la necesidad de perder el tiempo con SSH keys en el archivo YAML (o en variables env), que suele ser una mala idea.
Esto gira en torno al archivo de configuración SSH, por lo que si la aplicación no tiene acceso a él o no se puede modificar, esto no funcionará (pero no puedo pensar en ninguna situación del mundo real en la que esto se aplicaría, incluidas las implementaciones en la nube : las plantillas de AWS Cloudformation o Kubernetes ConfigMaps proporcionarían soluciones útiles).
El problema gira (en su mayor parte) en torno a la limitación (bastante inexplicable) de no poder especificar un key archivo en las propiedades de la aplicación Spring Config.
En tus ~/.ssh/config
archivo, puede agregar lo siguiente:
Host git-config
HostName github.myserver.example.com
User someone
IdentityFile /path/to/private_key
(Necesito conectarme a un servidor privado de GitHub Enterprise y el usuario asociado con SSH key no es lo mismo con el que se está ejecutando el servidor de aplicaciones: esto funciona bien; si ese no es el caso, simplemente use github.com
Para el HostName
y omitir el User
)
Luego, en lugar de usar el URI de GitHub real, algo como:
[email protected]:my-team/config-properties-demo.git
tu reemplazas git-config
para el anfitrión:
spring:
cloud:
config:
server:
git:
uri: [email protected]:my-team/config-properties-demo.git
strictHostKeyChecking: false
De hecho, es un poco engorroso, pero relativamente fácil de automatizar. Una opción mucho más preferible sería que Spring Config agregue otra opción que apunte a lo privado key material:
spring:
cloud:
config:
server:
git:
uri: [email protected]:my-team/config-properties-demo.git
user: someone
private_key_file: /path/to/private_key
strictHostKeyChecking: false
Supongo que este es uno de la sección “solicitudes de mejora” …
Reseñas y calificaciones del tutorial
Si estás contento con lo expuesto, tienes el poder dejar una noticia acerca de qué le añadirías a esta división.