Ponerse en forma
Para administrar un repositorio git en una cuenta github / bitbucket / lo que sea, simplemente necesita generar una nueva clave SSH.
Pero antes de que podamos comenzar a empujar / tirar repositorios con su segunda identidad, debemos ponerlo en forma: supongamos que su sistema está configurado con un par típico id_rsa
y id_rsa.pub
clave. Ahora tu tree ~/.ssh
aspecto es así
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
Primero, nombre ese par de claves: agregar un nombre descriptivo lo ayudará a recordar qué clave se utiliza para qué usuario / control remoto
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
A continuación, generemos un nuevo par de claves : aquí nombraré la nueva clavegithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Ahora, cuando miramos tree ~/.ssh
vemos
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
A continuación, necesitamos configurar un ~/.ssh/config
archivo que definirá nuestras configuraciones clave. Lo crearemos con los permisos adecuados de solo lectura / escritura del propietario
$ (umask 077; touch ~/.ssh/config)
Ábrelo con tu editor favorito y agrega los siguientes contenidos
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Presumiblemente, tendrá algunos repositorios existentes asociados con su identidad primaria de Github. Por esa razón, el "predeterminado" github.com Host
está configurado para usar su mainuser
clave. Si no desea favorecer una cuenta sobre otra, le mostraré cómo actualizar repositorios existentes en su sistema para usar una configuración ssh actualizada.
Agregue su nueva clave SSH a github
Dirígete a github.com/settings/keys para agregar tu nueva clave pública
Puede obtener los contenidos de la clave pública usando: copiar / pegar en github
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Ahora su nueva identidad de usuario está configurada; a continuación le mostraremos cómo usarla.
Hacer cosas: clonar un repositorio
Entonces, ¿cómo se combina esto para trabajar con git y github? Bueno, porque no puedes tener un pollo sin huevo, veremos la clonación de un repositorio existente. Esta situación podría aplicarse a usted si tiene una nueva cuenta de github para su lugar de trabajo y fue agregado a un proyecto de la empresa.
Digamos que github.com/someorg/somerepo
ya existe y se le agregó: la clonación es tan fácil como
$ git clone github.com-otheruser:someorg/somerepo.git
Esa parte en negrita debe coincidir con el Host
nombre que configuramos en su ~/.ssh/config
archivo. Eso conecta correctamente git al correspondiente IdentityFile
y lo autentica adecuadamente con github
Hacer las cosas: crear un nuevo repositorio
Bueno, debido a que no puedes tener un pollo y un huevo sin huevo, buscaremos publicar un nuevo repositorio en tu cuenta secundaria. Esta situación se aplica a los usuarios que crean nuevos contenido utilizando su cuenta secundaria de github.
Supongamos que ya ha hecho un poco de trabajo localmente y ahora está listo para empujar a Github. Puedes seguirme si quieres
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Ahora configure este repositorio para usar su identidad
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Ahora haz tu primer commit
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Verifique la confirmación para ver que su nueva identidad se usó usando git log
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
Muy bien, es hora de empujar a github! Dado que github aún no conoce nuestro nuevo repositorio, primero vaya a github.com/new y cree su nuevo repositorio - asígnele el nombre somerepo
Ahora, para configurar su repositorio para "hablar" con github usando la identidad / credenciales correctas, hemos agregado un control remoto. Suponiendo que su nombre de usuario de github para su nueva cuenta es someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Esa parte en negrita es absolutamente crítica y debe coincidir con la Host
que definimos en su ~/.ssh/config
archivo
Por último, empuja el repositorio
$ git push origin master
Actualice un repositorio existente para usar una nueva configuración SSH
Digamos que ya tiene algún repositorio clonado, pero ahora desea usar una nueva configuración SSH. En el ejemplo anterior, mantuvimos intactos sus repositorios existentes asignando su par anterior id_rsa
/ id_rsa.pub
clave aHost github.com
su archivo de configuración SSH. No hay nada de malo en esto, pero ahora tengo al menos 5 configuraciones de github y no me gusta pensar en una de ellas como la configuración "predeterminada". Prefiero ser explícito sobre cada una.
Antes de tener esto
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Así que ahora actualizaremos eso (cambios en negrita )
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Pero eso significa que ahora cualquier repositorio existente con un github.com
control remoto ya no funcionará con este archivo de identidad. Pero no te preocupes, es una solución simple.
Para actualizar cualquier repositorio existente para usar su nueva configuración SSH, simplemente abra el archivo de configuración git del repositorio y actualice la url.
$ cd existingrepo
$ nano .git/config
Actualice el campo de origen remoto (cambios en negrita )
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Eso es. Ahora puedes push
/ pull
a tu gusto
Permisos de archivo de clave SSH
Si tiene problemas con las claves públicas que no funcionan correctamente, SSH es bastante estricto con los permisos de archivo permitidos en su ~/.ssh
directorio y los archivos de claves correspondientes
Como regla general, cualquier directorio debería serlo 700
y cualquier archivo debería serlo 600
, esto significa que son de solo lectura / escritura del propietario, ningún otro grupo / usuario puede leerlos / escribirlos
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
Cómo administro mis claves SSH
Administro claves SSH separadas para cada host al que me conecto, de modo que si alguna clave se ve comprometida, no tengo que actualizar las claves en cualquier otro lugar donde haya usado esa clave. Esto es como cuando recibe esa notificación de Adobe de que se robaron 150 millones de la información de sus usuarios, ahora tiene que cancelar esa tarjeta de crédito y actualizar todos los servicios que dependen de ella, lo que es una molestia.
Así ~/.ssh
es como se ve mi directorio: tengo una .pem
clave para cada usuario, en una carpeta para cada dominio al que me conecto. Utilizo .pem
claves para, así que solo necesito un archivo por clave.
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
Y aquí está mi /.ssh/config
archivo correspondiente : obviamente, las cosas de github son relevantes para responder esta pregunta sobre github, pero esta respuesta tiene como objetivo proporcionarle el conocimiento para administrar sus identidades ssh en cualquier número de servicios / máquinas.
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
Obtener su clave pública SSH de una clave PEM
Arriba notó que solo tengo un archivo para cada clave. Cuando necesito proporcionar una clave pública, simplemente la genero según sea necesario.
Entonces, cuando github solicite su clave pública ssh, ejecute este comando para generar la clave pública en stdout: copie / pegue donde sea necesario
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Tenga en cuenta que este es también el mismo proceso que utilizo para agregar mi clave a cualquier máquina remota. El ssh-rsa AAAA...
valor se copia en el ~/.ssh/authorized_keys
archivo del control remoto.
Conversión de sus pares de teclas id_rsa
/ id_rsa.pub
a formato PEM
¿Entonces quiere domesticar sus archivos clave y reducir algunos problemas del sistema de archivos? Convertir su par de claves en un solo PEM es fácil
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
O, siguiendo nuestros ejemplos anteriores, cambiamos el nombre id_rsa -> github-mainuser
y id_rsa.pub -> github-mainuser.pub
, así
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Ahora, solo para asegurarse de que hemos convertido esto correctamente, querrá verificar que la clave pública generada coincida con su antigua clave pública
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
Ahora que tiene su github-mainuser.pem
archivo, puede eliminar de forma segura sus archivos antiguos github-mainuser
y github-mainuser.pub
, solo es necesario el archivo PEM; solo genera la clave pública cuando la necesites ^ _ ^
Crear claves PEM desde cero
No necesita crear el par de claves privada / pública y luego convertir a una sola clave PEM. Puede crear la clave PEM directamente.
Vamos a crear un newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
Obtener la clave pública SSH es lo mismo
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> para decirle al agente ssh que lo incluya para su uso. <hr /> Rest funciona bien para mí con el tutorial mencionado anteriormente.