.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
- Configurar el uso de llaves privadas
- Repositorios remotos en git y llaves privadas/públicas
- Conexiones a través de otro servidor (bastión)
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
- Simplify Your Life With an SSH Config File
- Using SSH Through A Bastion Host Transparently
- superuser.com: How to tell git which private key to use?