Docker + SSH + Git Clone Issue

He leído tantas cuestiones sobre la misma cosa exacta esta noche, pero no sé si alguna de las soluciones realmente funcionó.

En pocas palabras, necesito clonar un repository privado de Git alojado en GitHub en mi image de docker.

Esto es lo que tengo hasta ahora en el file Dockerfile:

FROM debian:wheezy ENV DEBIAN_FRONTEND noninteractive # Update aptitude with new repo RUN apt-get update # Install software RUN apt-get install -y \ # All of my packages here... # Make ssh dir RUN mkdir /root/.ssh/ # Copy over private key, and set permissions ADD ssh/id_rsa /root/.ssh/id_rsa RUN chmod 700 /root/.ssh/id_rsa RUN touch /root/.ssh/known_hosts # Add GithHubs key RUN ssh-keyscan -T 60 github.com >> /root/.ssh/known_hosts # Create the Development directory and then move into the directory. RUN mkdir -p /var/www/dev WORKDIR /var/www/dev # Start-up Git and pull in the Dev branch. RUN ssh -v git@github.com #RUN git init #RUN git remote add origin git@github.com:<my_git_repo> #RUN git fetch #RUN git checkout -t origin/dev #RUN git clone git@github.com:<my_git_repo> 

ssh -v me da el siguiente logging de debugging:

 OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013 Pseudo-terminal will not be allocated because stdin is not a terminal. debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to github.com [192.30.252.131] port 22. debug1: Connection established. debug1: permanently_set_uid: 0/0 debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_dsa type -1 debug1: identity file /root/.ssh/id_dsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: Remote protocol version 2.0, remote software version libssh-0.7.0 debug1: no match: libssh-0.7.0 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr hmac-sha1 none debug1: kex: client->server aes128-ctr hmac-sha1 none debug1: sending SSH2_MSG_KEX_ECDH_INIT debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48 debug1: Host 'github.com' is known and matches the RSA host key. debug1: Found key in /root/.ssh/known_hosts:1 Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hosts. debug1: ssh_rsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Trying private key: /root/.ssh/id_rsa debug1: key_parse_private_pem: PEM_read_PrivateKey failed debug1: read PEM private key done: type <unknown> debug1: read_passphrase: can't open /dev/tty: No such device or address debug1: Trying private key: /root/.ssh/id_dsa debug1: Trying private key: /root/.ssh/id_ecdsa debug1: No more authentication methods to try. Permission denied (publickey). 

He intentado con la opción de configurar StrictHostChecking en no. He intentado con un file de configuration separado en el directory SSH para especificar host, port, identityfile (siendo la key privada, no la pública).

¿Que me estoy perdiendo aqui? La key en la VM que se crea es exactamente la misma que tengo en mi máquina local.

Puede ser mejor usar un token de acceso personal GitHub en lugar de su key ssh.

https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Esto elimina la necesidad de que hornee su key ssh en la image, que es más segura, y permite clones sobre https, lo que debería simplificar su file docker. Si necesita revocar el token, es fácil hacerlo desde su website, y no necesita replace su key ssh personal en todas partes.

Si miraste esto y no puedes usar esta opción, házmelo saber y puedo ayudarte a resolver el problema de la key ssh.

Uno de los problemas podría ser que el file .ssh/config necesita tener permissions específicos. Intenta usar permissions 600 es decir, rw- --- --- lugar de 700 es decir, rwx --- --- .

Sugerencia para la debugging

Puede intentar ejecutar lo siguiente dentro del contenedor para asegurarse de que la configuration funciona:

 ssh -T git@github.com 

Si todo está configurado correctamente, debería ver:

 Hi username! You've successfully authenticated, but GitHub does not provide shell access. 

Estrategia alternativa para la clonación de repositorys privados

Cuando se trata de clonar repositorys privados dentro de Docker, utilizo la session del agente ssh en el host local dentro del contenedor, montando el socket correspondiente. Los detalles se pueden encontrar aquí: https://ahmadnazir.github.io/posts/2016-06-24-accessing-private-repos-in-docker.html