Pregunta sobre github, git, git-submodules, amazon-ec2, ssh – Problemas con los submódulos de git cuando los submódulos son repositorios privados de Github

12

Tengo un repo privado en Github que alberga 3 submódulos, los 3 de los cuales también son privados.

He generado 4 claves SSH en mi servidor EC2 y las apliqué como claves de implementación Github a los 4 repositorios privados.

Soy capaz de clonar el repositorio principal ya que reconoce la clave SSH. Cuando ejecuto "git submodule update" falla en los repositorios privados con el siguiente error:

ERROR: Repositorio no encontrado. fatal: el extremo remoto colgó inesperadamente

Si reviso manualmente esos repositorios privados, funciona, pero no cuando uso el comando git submodule. ¿Alguna idea? ¿Esto no es totalmente compatible?

Tu respuesta

1   la respuesta
11

La autenticación de Github es un poco extraña. No usan nombres de usuario; simplemente deducen en función de la clave pública que presentaste qué usuario eres. Ya que generó cuatro claves de implementación, cualquiera puede suponer cuál utilizará su servidor cuando se conecte a github: github aceptará cualquiera de ellas, luego rechazará cualquier acceso a los repositorios que no tengan esa clave registrada.

Como tal, la solución más sencilla es usar una sola clave de implementación para todos los repositorios.

Sin embargo, si no puede, puede piratear esto utilizando alias de host ssh. Añadir a su servidor~/.ssh/config estrofas como las siguientes:

Host repo-foo
  HostName  ssh.github.com
  Port 443
  User git
  IdentityFile /path/to/my-ssh-key-file-for-foo
  IdentitiesOnly yes

Host repo-bar
  HostName ssh.github.com
  Port 443
  User git
  IdentityFile /path/to/my-ssh-key-file-for-bar
  IdentitiesOnly yes

Luego apunta tus submódulos arepo-bar:username/bar.git yrepo-foo:username/foo.git en lugar de usar el[email protected]com:... formar.

Esto hará que git y ssh traten a cada repositorio como si vivieran en un servidor diferente y pasan un archivo de identidad explícito, por lo que no hay confusión sobre qué clave usar.

@bdonlan: sí, sé lo que quieres decir; es un poco torpe En cualquier caso, ¡creí reconocer tu nombre! Tu y yo éramosamigos en común De vuelta en el día en que usé LJ. Ashe
Esto no es extraño; ¡Es bastante estándar! Y la solución estándar es precisamente la que has sugerido. Ashe
@Len, es extraño porque significa que necesito configurar algo (~/.ssh/config) Antes de descargar mi configuración. La revocación debe ser realmente de dos maneras: denegar al host X el acceso al repositorio Y, o revocar la clave Z del host X. Revocar la llave Z del repo Y se vuelve torpe. Y bdonlan.livejournal.com no se ha actualizado durante seis años :) bdonlan
@Len, por más estándar que sea, es bastante extraño. github debería arreglar sus cosas para permitir que la misma clave de implementación se use en varios repositorios :) bdonlan

Preguntas relacionadas