Notas de Modri

.ssh/config

Sun 01 December 2019 / ssh config

El archivo ~/.ssh/config permite configurar la manera en que nos conectamos via ssh a un host remoto. Se puede hacer, entre otras cosas:

Crear alias de conexiones

Si en el archivo ~/.ssh/config tenemos:

Host bar
    HostName bar-server.with-long-domain-name.com
    Port 5022
    User userfoo

Podemos usar ssh bar como alias de:

$ ssh userfoo@bar-server.with-long-domain-name.com -p 5022

Configurar el uso de llaves privadas

Podemos configurar en el archivo ~/.ssh/config para que ssh use una llave privada distinta en cada conexión a los host. Por ejemplo, con el siguiente archivo:

Host bar
    HostName bar-server.with-long-domain-name.com
    Port 5022
    User userfoo
    IdentityFile  ~/.ssh/id_rsa_bar.key

Host baz
    HostName baz-server.with-long-domain-name.com
    Port 5022
    User userfoo
    IdentityFile  ~/.ssh/id_rsa_baz.key

Host github.com
    HostName github.com
    User git
    IdentityFile  ~/.ssh/id_rsa_git.key

Al usar ssh baz se conectará como si ejecutáramos:

$ ssh userfoo@baz-server.with-long-domain-name.com -p 5022 -i  ~/.ssh/id_rsa_baz.key

Repositorios remotos en git y llaves privadas/públicas

Usando la configuración de arriba, si en un repositorio git local configuramos el remoto origin como:

$ git remote add origin git@github.com:username/reponame.git.

Esto hará que cuando interactuemos con el repositorio remoto definido en origin utilice la llave privada ~/.ssh/id_rsa_git.key para conectarse. Para que esto realmente funcione hay que, además, registrar la llave pública en github.com.

Si tenemos más de un repositorio y éstos usan llaves distintas, por ejemplo si formamos parte de una organización en github y además tenemos repositorios propios, podríamos tener un archivo ~/.ssh/config similar a éste:

Host org-github
    HostName github.com
    User git
    IdentityFile  ~/.ssh/id_rsa_org_git.key

Host personal-github
    HostName github.com
    User git
    IdentityFile  ~/.ssh/id_rsa_personal_git.key

Entonces para registrar localmente como repositorio remoto el repositorio orgreponame de la organización orgname podríamos ejecutar el siguiente comando:

    $ git remote add origin git@org-github:orgname/orgreponame.git.

Para hacer lo mismo con un repositorio propio, con usuario username y repositorio personal-repo, ejecutaríamos:

    $ git remote add origin git@personal-github:username/personal-reponame.git.

Conexiones a través de otro servidor (bastión)

Si para conectarnos remotamente a un servidor server necesitamos conectarnos primero a un servidor bastion y desde ahí al servidor server, por ejemplo así:

user@localhost$ shh bastion
user@bastion$ shh server
user@server$

Podemos utilizar la siguiente configuración en ~/.ssh/config:

Host server
   HostName server.private-domain.com
   ProxyCommand ssh -A user@bastion.com -W %h:%p

Con esta configuración si utilizamos ssh server podremos conectarnos al servidor server a través del servidor bastion.

Podemos además utilizar en la configuración todo lo anterior, como el uso de User e IdentityFile.

Referencias

Modri

A cerca de Modri

Geek. Coder. Google-Fu practicioner. Tech Lead in progress. Opinions are my own.

Comments