Tengo una cuenta personal y una cuenta de empresa en Unfuddle. En Unfuddle, las claves SSH solo se pueden usar en una sola cuenta, por lo que necesito crear una clave SSH separada en mi computadora portátil para ambas cuentas. Corrí ssh-keygen -t rsa
para generar dos claves con nombres diferentes (personal es el nombre predeterminado y la compañía es {compañía} _rsa). El problema ahora es que parece que mi clave predeterminada se usa en todas partes y no puedo descubrir cómo especificar una clave para usar en Git para repositorios individuales.
Entonces, mi pregunta es: ¿Cómo especifico una clave SSH para usar de una base a otra?
Configuré mi ssh_config (~ / .ssh / config) pero todavía no parece funcionar.
config:
Host {personalaccount}.unfuddle.com
HostName {personalaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/id_rsa
Host {companyaccount}.unfuddle.com
HostName {companyaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/cage_rsa
Mi archivo de configuración de repositorio de Git para un repositorio en la cuenta de desempaque de mi empresa se ve así:
[remote "origin"]
url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/origin/*
Por lo tanto, no estoy seguro de si hay algún problema con mi configuración ssh o mi configuración git.
Respuestas:
Si tiene un agente ssh activo que tiene su
id_rsa
clave cargada, entonces es probable que ssh ofrezca esa clave primero. Unfuddle probablemente lo acepta para la autenticación (por ejemplo, en sshd ), pero lo rechaza por autorización para acceder a los repositorios de la compañía (por ejemplo, en cualquier software interno que utilicen para la autorización, posiblemente algo similar a Gitolite). Quizás haya una manera de agregar su clave personal a la cuenta de la empresa (varias personas no comparten los mismoscorp_rsa
archivos de clave pública y privada, ¿ verdad ?).La
IdentitiesOnly
.ssh/config
palabra clave de configuración se puede usar para limitar las claves que ssh ofrece al sshd remoto solo a las especificadas a través deIdentityFile
palabras clave (es decir, se negará a usar cualquier clave adicional que se cargue en un agente ssh activo ).Prueba estas
.ssh/config
secciones:Luego, use URL de Git como estas:
Si desea aprovechar al máximo el
.ssh/config
mecanismo, puede proporcionar su propio nombre de host personalizado y cambiar el nombre de usuario predeterminado:Luego, use URL de Git como estas:
fuente
ssh-add -l
antes de usar su alias de host Git. Además, el archivo de clave pública debe estar presente para que ssh pueda reconocer la clave que ssh-agent está almacenando. Puede regenerar un.pub
archivo perdido con un comando comossh-keygen -f blah -y > blah.pub
.man ssh_config
Algo como
Y úsalo
personal_repo
como anfitrión en tu repositorio de git.fuente
Host
es solo un identificador, no es necesario un nombre de dominio completo. Eso probablemente crea algunos errores ocultos. Si cambia eso, no necesita deletrear el nombre completo en su configuración de git.IdentityFile e IdentitiesSolo funcionan bien. Lo que me molesta es tener que recordar usar diferentes nombres de host para conectarme, y el hecho de que la conexión del agente reenviado todavía contiene todas las claves, lo que significa que si el host remoto se ve comprometido, pueden usar cualquiera de mis identidades mientras estoy en .
Recientemente comencé a usar:
https://github.com/ccontavalli/ssh-ident
Es una envoltura alrededor de SSH:
fuente
Aquí hay una manera adecuada si desea utilizar el agente ssh:
Explicación: si tiene una clave privada en su directorio ~ / .ssh, no se utilizará ssh-agent. Entonces creamos una clave pública con otro nombre, para que ssh se vea obligado a usar ssh-agent. Esto también ayuda si no tiene acceso a claves privadas (por ejemplo, reenvío de agente ssh)
fuente
ssh-add -L
, nossh-agent
.