.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?