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?

¿Fue útil?

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.

  1. Generar clave SSH:

    $ ssh-keygen -t rsa -C <email1@example.com>
    
  2. 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 
    
  3. 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  
    
  4. Clonación en cuenta default.

    $ git clone git@bitbucket.org:username/project.git
    
  5. Clonación en cuenta accountB.

    $ git clone git@bitbucket-accountB:username/project.git
    

Ver Más Aquí

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:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key por ejemplo ssh-add ~/.ssh/id_rsa
  3. Compruebe por $ ssh-add -l
  4. prueba con $ssh -v <host url> por ejemplo ssh -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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top