Pregunta La mejor forma de usar varias claves privadas SSH en un cliente


Deseo utilizar varias claves privadas para conectarme a diferentes servidores o diferentes partes del mismo servidor (mis usos son la administración del sistema del servidor, la administración de Git y el uso normal de Git dentro del mismo servidor). Intenté simplemente apilar las llaves en el id_rsa archivos en vano.

Aparentemente, una manera directa de hacerlo es usar el comando

ssh -i <key location> login@server.example.com 

Eso es bastante engorroso.

¿Alguna sugerencia sobre cómo hacer esto un poco más fácil?


667
2018-03-10 18:40


origen


Respuestas:


De 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
    User remoteusername

Y así.


960
2018-03-10 18:46



los respuesta de Randal Schwartz casi me ayudó todo el camino. Tengo un nombre de usuario diferente en el servidor, así que tuve que agregar Usuario palabra clave a mi archivo:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

Ahora puedes conectarte usando el nombre descriptivo:

ssh friendly-name

Se pueden encontrar más palabras clave en Página de manual de OpenSSH. NOTA: Algunas de las palabras clave enumeradas ya pueden estar presentes en su / etc / ssh / ssh_config archivo.


226
2017-09-30 07:37



Puede indicar a ssh que pruebe varias teclas en sucesión al conectarse. Así es 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 forma, no tiene que especificar qué clave funciona con qué servidor. Solo usará la primera clave de trabajo.

Además, solo ingresaría una frase de contraseña si un servidor determinado está dispuesto a aceptar la clave. Como se ve arriba, ssh no intentó pedir una contraseña para .ssh/id_rsa incluso si tuviera uno.

Seguramente no es mejor que una configuración por servidor como en otras respuestas, ¡pero al menos no tendrá que agregar una configuración para todos y cada uno de los servidores a los que se conecte!


167
2017-10-20 04:56



foo:~$ssh-add ~/.ssh/xxx_id_rsa

Asegúrate de probarlo antes de agregarlo con:

ssh -i ~/.ssh/xxx_id_rsa username@example.com

Si tiene algún problema con los errores, a veces cambiar la seguridad del archivo ayuda:

chmod 0600 ~/.ssh/xxx_id_rsa

89
2017-08-15 05:31



Las respuestas anteriores explicaron correctamente la forma de crear un archivo de configuración para administrar varias claves ssh. Creo que lo importante que también debe explicarse es la reemplazo de un nombre de host con un nombre de alias mientras se clona el repositorio.

Supongamos que tu El nombre de usuario de la cuenta de GitHub de la empresa es abc1234. Y supongamos que su nombre de usuario de la cuenta personal de GitHub es jack1234

Y, supongamos que ha creado dos claves RSA, a saber id_rsa_company y id_rsa_personal. Entonces tus configuración archivo se verá 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 estás clonando repositorio  (demo nombrada) de la cuenta GitHub de la compañía, la URL del repositorio será algo así como:

Repo URL: git@github.com:abc1234/demo.git

Ahora, mientras haces git clone, debe modificar la URL del repositorio anterior como:

git@company:abc1234/demo.git

Observe cómo github.com ahora se reemplaza con el alias "compañía" como hemos definido en el archivo de configuración.

De manera similar, debe modificar la URL de clonación del repositorio en la cuenta personal, según el alias provisto en el archivo de configuración.


37
2017-07-19 09:06



Estoy de acuerdo con Tuomas sobre el uso de ssh-agent. También quería agregar una segunda clave privada para el trabajo y este tutorial funcionó como un encanto para mí.

Los pasos son los siguientes:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key p.ej ssh-add ~/.ssh/id_rsa
  3. Verificar por $ ssh-add -l
  4. Pruébalo con $ssh -v <host url> p.ej ssh -v git@assembla.com

20
2017-10-21 09:30



  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, cuentaB.pub) debería existir en el ~/.ssh/ directorio.

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory 
    
  3. Crear archivo de configuración ~/.ssh/config con los siguientes contenidos:

    $ 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. Clonar desde default cuenta.

    $ git clone git@bitbucket.org:username/project.git
    
  5. Clonar desde accountB cuenta.

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

Ver más aquí


14
2017-12-14 05:39



Usa ssh-agent para tus llaves.


9
2018-03-10 18:44



Me encontré con este problema hace un tiempo, cuando tenía dos cuentas Bitbucket y quería tener que almacenar claves SSH separadas para ambas. Esto es lo que funcionó para mí.

Creé dos configuraciones ssh separadas 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 tuve que clonar un repositorio de mi cuenta de trabajo, el comando fue 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 de clonación de mi cuenta personal tuvo que ser modificado para

git clone git @personal.bitbucket.org: name / personalproject.git

Referir este enlace para más información.


7
2017-09-02 06:58



Puede crear un archivo de configuración llamado config en tus ~/.ssh carpeta. Puede contener:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

Esto te permitirá conectarte a máquinas como esta

 ssh aws

1
2018-01-18 00:27