El reenvío del agente de SSH puede utilizarse para simplificar el proceso de despliegue a un servidor. Te permite utilizar llaves SSH locales en vez de dejar las llaves (¡sin frases de acceso!) en tu servidor.
Si ya has configurado una clave SSH para interactuar con GitHub, probablemente estés familiarizado con . 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 realmente interesante es que puede optar por permitir que los servidores accedan a su entorno local como si estuvieran ejecutándose directamente 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 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. Vamos a configurar SSH para permitir el reenvío del agente a tu servidor.
-
En el editor de texto que prefiera, abra el archivo en . Si este archivo no existe, puede crearlo ingresando el comando adecuado en la terminal.
-
Escriba el texto siguiente en el archivo, reemplazándolo con el nombre de dominio o IP de su servidor.
Host example.com ForwardAgent yes
Advertencia
Es posible que tenga la tentación de usar un carácter comodín como 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 una vez más. Si todo está bien, recibirás de nuevo el mismo mensaje que obtuviste localmente.
Si no está seguro de si se usa la clave local, también puede inspeccionar la variable 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 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 puedas hacer que tus claves funcionen con el reenvío mediante un 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 y después se lee . 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, nuestro archivo indica específicamente 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 . La salida de este comando debe indicar que está establecido.
La instancia local de debe estar en ejecución
En la mayoría de los equipos, el sistema operativo inicia de forma automática. Sin embargo, en Windows debe hacerlo manualmente. Tenemos una guía sobre cómo iniciar cada vez que abra Git Bash.
Para comprobar que 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
Para comprobar que tu clave es visible para [el destinatario/la aplicación], ejecute el siguiente comando:
ssh-add -L
Si el comando dice que no hay identidad disponible, necesitarás agregar tu llave:
ssh-add YOUR-KEY
Sugerencia
En macOS, "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 más información, consulta 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).