Cómo administrar varias keys ssh en el directory ~ / .ssh

Estoy seguro de que todos recibimos este error de vez en cuando:

$ git push origin master Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 

El remedio típico es simplemente crear un par de keys público / privado y compartirlo con su host git (en mi caso bitbucket, con sus instrucciones )

El asunto es sin embargo, tengo muchas counts que requieren que tenga un par de keys público / privado (por ejemplo, necesito save una key para conectarme a AWS … etc.) así que lo que hago es crear estas keys y guárdelos en directorys separados, es decir,

 ~/.ssh $ find . ./awskeys ./awskeys/id_rsa ./awskeys/id_rsa.pub ./bitbucket ./bitbucket/id_rsa ./bitbucket/id_rsa.pub 

pero luego aparece este error de vez en cuando … para resolverlo tengo que volver a mover las keys relevantes a la raíz ~ / .ssh. esto no me parece correcto. ¿Cómo puedo hacer esto de manera confiable?

Puede tenerlos en cualquier lugar que desee, pero su permiso y el permiso de las carpetas principales deben ser estrictos:

  • sin acceso de escritura para la carpeta principal (para otros y todos)
  • 644 para una key pública
  • 600 para una key privada.

Entonces tú:

  • declare esas diferentes keys en un ~/.ssh/config file ( ejemplo aquí )
  • cambie la URL remota para usar la input apropiada del file ~/.ssh/config que describe la tecla ssh correcta para usar.

Eso significa una input como:

 Host mygithub User git IdentityFile ~/.ssh/mypath/mykey # wherever your "new" key lives IdentitiesOnly yes 

Le permite replace una url como git@github.com: nombre de usuario / repo con:

 git remote set-url origin mygithub:username/repo