La mejor manera de utilizar varias claves privadas en un cliente SSH
Pregunta
Quiero usar varias claves privadas para conectarse a distintos servidores o diferentes porciones del mismo servidor (mis usos son la administración del sistema de servidores, administración de Git, y el uso de Git normal dentro del mismo servidor). He intentado simplemente apilando las claves en los archivos id_rsa
en vano.
Al parecer, una forma sencilla de hacer esto es utilizar el comando
ssh -i <key location> login@server.example.com
Esto es bastante engorroso.
Cualquier sugerencia en cuanto a cómo ir haciendo esto un poco más fácil?
Solución
Desde mi .ssh/config
:
Host myshortname realname.example.com
HostName realname.example.com
IdentityFile ~/.ssh/realname_rsa # private key for realname
User remoteusername
Host myother realname2.example.org
HostName realname2.example.org
IdentityFile ~/.ssh/realname2_rsa # different private key for realname2
User remoteusername
Y así sucesivamente.
Otros consejos
Se puede indicar a ssh para tratar varias claves en la serie al conectar. He aquí cómo:
$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on
$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$
De esta manera usted no tiene que especificar qué código se activa con la que el servidor. Simplemente va a utilizar la primera clave de trabajo.
También usted sólo ingresa una contraseña si un determinado servidor está dispuesto a aceptar la clave. Como se ha visto anteriormente ssh no trató de pedir una contraseña para .ssh/id_rsa
incluso si tenía uno.
Sin duda, no outbeat una configuración por servidor como en otras respuestas, pero al menos no tendrá que añadir una configuración para todos y cada servidor se conecta a!
El Respuesta de Randal Schwartz casi me ayudó a todo el camino. Tengo un nombre de usuario diferente en el servidor, así que tuve que añadir el usuario palabra clave para mi archivo:
Host friendly-name
HostName long.and.cumbersome.server.name
IdentityFile ~/.ssh/private_ssh_file
User username-on-remote-machine
Ahora se puede conectar utilizando el nombre descriptivo-:
ssh friendly-name
Más palabras clave se pueden encontrar en la página hombre OpenSSH . Nota:. Algunas de las palabras clave que aparecen ya podrían estar presentes en su / etc / ssh / ssh_config archivo
foo:~$ssh-add ~/.ssh/xxx_id_rsa
Asegúrese de probar antes de añadir con:
ssh -i ~/.ssh/xxx_id_rsa username@example.com
Si usted tiene algún problema con los errores a veces cambiando la seguridad del archivo de ayuda:
chmod 0600 ~/.ssh/xxx_id_rsa
Las respuestas anteriores han explicado adecuadamente la forma de crear un archivo de configuración para gestionar múltiples claves ssh. Creo que, lo importante que también hay que explicar es la sustitución de un nombre de host con un nombre de alias mientras clonar el repositorio .
Supongamos, nombre de usuario de cuenta de GitHub su de empresa es abc1234 . Y supongamos que su nombre de usuario personal de la cuenta de GitHub es jack1234
Y, supongamos que ha creado dos claves RSA, es decir, id_rsa_company y id_rsa_personal . Por lo tanto, su configuración archivo se parecerá a continuación:
# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal
Ahora, cuando se va a clonar en el repositorio (nombre demo) de la cuenta de GitHub de la empresa, la URL del repositorio será algo como:
Repo URL: git@github.com:abc1234/demo.git
Ahora, mientras se hace git clone
, debe modificar la URL del repositorio anterior como:
git@company:abc1234/demo.git
Observe cómo github.com ha sido reemplazada por la "compañía" alias como hemos definido en el archivo de configuración.
De manera parecida, tiene que modificar la URL clon del repositorio en la cuenta personal dependiendo del alias proporcionada en el archivo de configuración.
-
Generar clave SSH:
$ ssh-keygen -t rsa -C <email1@example.com>
-
Generar
another SSH key
:$ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
Ahora, dos claves públicas ( id_rsa.pub , accountB.pub ) debe ser existe en el directorio
~/.ssh/
.$ ls -l ~/.ssh # see the files of '~/.ssh/' directory
-
Crear archivo de configuración
~/.ssh/config
con el siguiente contenido:$ nano ~/.ssh/config Host bitbucket.org User git Hostname bitbucket.org PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa Host bitbucket-accountB User git Hostname bitbucket.org PreferredAuthentications publickey IdentitiesOnly yes IdentityFile ~/.ssh/accountB
-
Clonación en cuenta
default
.$ git clone git@bitbucket.org:username/project.git
-
Clonación en cuenta
accountB
.$ git clone git@bitbucket-accountB:username/project.git
Estoy de acuerdo con Tuomas sobre el uso de ssh-agent. También quería añadir una segunda clave privada para el trabajo y este tutorial trabajó como un encanto para mí.
Los pasos son como a continuación:
-
$ ssh-agent bash
-
$ ssh-add /path.to/private/key
por ejemplossh-add ~/.ssh/id_rsa
- Compruebe por
$ ssh-add -l
- prueba con
$ssh -v <host url>
por ejemplossh -v git@assembla.com
Me había topado con este problema hace un tiempo, cuando tenía dos cuentas Bitbucket y quería tenido que almacenar las claves SSH separados para ambos. Esto es lo que funcionó para mí.
He creado dos configuraciones separadas ssh de la siguiente manera.
Host personal.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/work
Ahora, cuando he tenido que clonar un repositorio de mi cuenta de trabajo - el comando es el siguiente
.git clone git@bitbucket.org:teamname/project.git
tuve que modificar este comando para:
git clone git@**work**.bitbucket.org:teamname/project.git
Del mismo modo el comando clon de mi cuenta personal tuvo que ser modificado a
git clone git @ personal .bitbucket.org: Nombre / personalproject.git
Consulte este vincular para más información.
El uso de ssh-agent para sus llaves.
Ahora, con la versión reciente de git, podemos especificar sshCommand en el repositorio git config archivo específico.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
sshCommand = ssh -i ~/.ssh/id_rsa_user
[remote "origin"]
url = git@bitbucket.org:user/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
IMPORTANTE: Debe iniciar ssh-agent
Debe iniciar ssh-agent (si no está ya en ejecución) antes de usar ssh-add de la siguiente manera:
eval `ssh-agent -s` # start the agent
ssh-add id_rsa_2 # where id_rsa_2 is your new private key file
Tenga en cuenta que el comando eval inicia el agente en la fiesta de GIT en las ventanas. Otros entornos pueden utilizar una variante para iniciar el agente de SSH.
Se puede crear un archivo de configuración llamado config
en su carpeta ~/.ssh
. Puede contener:
Host aws
HostName *yourip*
User *youruser*
IdentityFile *idFile*
Esto le permitirá conectarse a máquinas como esto
ssh aws
En Ubuntu 18.04 no hay nada que hacer.
Después de haber creado una clave ssh segundo con éxito el sistema va a tratar de encontrar una clave SSH juego para cada conexión.
Para que quede claro, se puede crear una nueva clave con estos comandos
# generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen
# make sure ssh agent is running
eval `ssh-agent`
# add the new key
ssh-add ~/.ssh/id_rsa_server2
# get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub
En Centos 6.5 corriendo OpenSSH_5.3p1, OpenSSL 1.0.1e-fips, he resuelto el problema cambiando el nombre de los archivos clave para que ninguno de ellos tenía el nombre por defecto. Mi directorio .ssh contiene id_rsa_foo y id_rsa_bar pero sin id_rsa, etc.
atlassian página del blog generar un config en ssh que incluye el texto siguiente:
#user1 account
Host bitbucket.org-user1
HostName bitbucket.org
User git
IdentityFile ~/.ssh/user1
IdentitiesOnly yes
#user2 account
Host bitbucket.org-user2
HostName bitbucket.org
User git
IdentityFile ~/.ssh/user2
IdentitiesOnly yes
A continuación, puede pago y envío con el sufijo de dominio y dentro de los proyectos se pueden configurar los nombres de los autores etc. localmente.