El reenvío del agente de SSH puede utilizarse para hacer despliegues a un servidor simple. Te permite utilizar llaves SSH locales en vez de dejar las llaves (¡sin frases de acceso!) en tu servidor.
Si ya ha configurado una clave SSH para interactuar con GitHub, probablemente esté familiarizado con ssh-agent
. Es un programa que se ejecuta en segundo plano y que mantiene tu llave cargada en la memoria para que no tengas que ingresar tu frase deacceso cada que quieres utilizar esta llave. Lo mejor es que puede elegir dejar que los servidores accedan a la instancia local de ssh-agent
como si ya se ejecutaran en el servidor. Esto es como pedirle a un amigo que ingrese su contraseña para que puedas utilizar su computadora.
Consulte la guía de sugerencias técnicas de Steve Friedl para obtener una explicación más detallada del reenvío de agentes SSH.
Configurar el reenvío del agente SSH
Asegúrate de que tu propia llave SSH está configurada y funciona. Puede usar nuestra guía sobre generación de claves SSH si todavía no lo ha hecho.
Para probar que la clave local funciona, escriba ssh -T git@github.com
en el terminal:
$ ssh -T git@github.com
# Attempt to SSH in to github
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide
> shell access.
Estamos empezando muy bien. Vamso a configurar SSH para permitir el reenvío del agente en tu servidor.
-
En el editor de texto que prefiera, abra el archivo en
~/.ssh/config
. Si este archivo no existe, puede crearlo si escribetouch ~/.ssh/config
en el terminal. -
Escriba el texto siguiente en el archivo y reemplace
example.com
el por nombre de dominio o IP del servidor:Host example.com ForwardAgent yes
Advertencia: Es posible que tenga la tentación de usar un carácter comodín como Host *
simplemente para aplicar esta configuración a todas las conexiones SSH. No es recomendable, ya que compartiría las claves SSH locales con todos los servidores a los que acceda con SSH. No tendrán acceso directo a las claves, pero podrán utilizarlas en su nombre mientras que la conexión esté establecida. Solo debería agregar los servidores en los que confíe y que pretenda usar con el reenvío de agentes.
Probar el reenvío del agente SSH
Para probar que el reenvío de agentes funciona con el servidor, puede conectarse mediante SSH al servidor y ejecutar ssh -T git@github.com
una vez más. Si todo sale bien, te regresará el mismo mensaje que salió cuando lo hiciste localmente.
Si no está seguro de si se usa la clave local, también puede inspeccionar la variable SSH_AUTH_SOCK
en el servidor:
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/ssh-4hNGMk8AZX/agent.79453
Si no se ha configurado la variable, esto significa que el reenvío del agente no funciona:
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> [No output]
$ ssh -T git@github.com
# Try to SSH to github
> Permission denied (publickey).
Solucionar problemas del reenvío del agente SSH
Aquí te mostramos algunos puntos en los cuales tener cuidado cuando intentes solucionar problemas relacionados con el reenvío del agente SSH.
Debes utilizar una URL con SSH para revisar el código
El reenvío SSH funciona únicamente con URL con SSH, no con aquellas de HTTP(s). Compruebe el archivo .git/config
en el servidor y asegúrese de que la URL es una dirección URL de estilo SSH como la siguiente:
[remote "origin"]
url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
fetch = +refs/heads/*:refs/remotes/origin/*
Tus llaves SSH deben funcionar localmente
Antes de que hagas que tus llaves funcionen a través del reenvío del agente, primero deben funcionar localmente. Nuestra guía sobre generación de claves SSH puede ayudarle a configurar las claves SSH localmente.
Tu sistema debe permitir el reenvío del agente SSH
Algunas veces, la configuración del sistema deja de permitir el reenvío del agente SSH. Puedes verificar si se está utilizando un archivo de configuración del sistema ingresando el siguiente comando en la terminal:
$ ssh -v URL
# Connect to the specified URL with verbose debug output
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Applying options for example.com
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
$ exit
# Returns to your local command prompt
En el ejemplo anterior, primero se carga el archivo ~/.ssh/config
y después se lee /etc/ssh_config
. Podemos inspeccionar ese archivo para ver si está anulando nuestras opciones si ejecutamos los siguientes comandos:
$ cat /etc/ssh_config
# Print out the /etc/ssh_config file
> Host *
> SendEnv LANG LC_*
> ForwardAgent no
En este ejemplo, el archivo /etc/ssh_config
dice ForwardAgent no
específicamente, que es una manera de bloquear el reenvío de agentes. Si borramos esta línea del archivo deberíamos poder hacer funcionar el reenvío del agente nuevamente.
Tu servidor debe permitir el reenvío del agente SSH en las conexiones entrantes
El reenvío del agente también puede bloquearse en tu servidor. Puede comprobar que el reenvío de agentes está permitido si accede mediante SSH al servidor y ejecuta sshd_config
. La salida de este comando debe indicar que AllowAgentForwarding
está establecido.
La instancia local de ssh-agent
debe estar en ejecución
En la mayoría de los equipos, el sistema operativo inicia ssh-agent
de forma automática. Sin embargo, en Windows, tienes que hacerlo manualmente. Tenemos una guía sobre cómo iniciar ssh-agent
cada vez que abra Git Bash.
Para comprobar que ssh-agent
se ejecuta en el equipo, escriba el comando siguiente en el terminal:
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners
La clave debe estar disponible para ssh-agent
Para comprobar que la clave es visible para ssh-agent
, ejecute el comando siguiente:
ssh-add -L
Si el comando dice que no hay identidad disponible, necesitarás agregar tu llave:
ssh-add YOUR-KEY
En macOS, ssh-agent
"olvidará" esta clave, una vez que se reinicie durante los reinicios. Pero puedes importar tus llaves SSH en Keychain si utilizas este comando:
ssh-add --apple-use-keychain YOUR-KEY
Nota: La opción --apple-use-keychain
almacena la frase de contraseña en tu cadena de claves cuando agregas una clave SSH al ssh-agent. Si eliges no agregar una frase de contraseña a tu clave, ejecuta el comando sin la opción --apple-use-keychain
.
La opción --apple-use-keychain
está en la versión estándar de Apple de ssh-add
. En las versiones de macOS anteriores a Monterey (12.0), las marcas --apple-use-keychain
y --apple-load-keychain
usaban la sintaxis -K
y -A
, respectivamente.
Si no tienes instalada la versión estándar de Apple de ssh-add
, recibirás un mensaje de error. Para obtener más información, vea «Error: ssh-add: opción ilegal -- apple-use-keychain».
Si te sigue pidiendo la frase de contraseña, es posible que tengas que agregar el comando al archivo ~/.zshrc
(o el archivo ~/.bashrc
de Bash).