El reenvío de agentes SSH le posibilita utilizar su clave SSH local privada de forma remota sin preocuparse por dejar datos confidenciales en el servidor con el que está trabajando. Esta construido en ssh
, y es fácil de configurar y utilizar.
¿Qué es un agente SSH?
Su clave SSH pública es como su nombre de usuario o identidad, y puede compartirla con todo el mundo. Su clave SSH privada es como una contraseña y se guarda localmente en su computadora. Pero esto es como almacenar sus contraseñas en una nota adhesiva: cualquiera puede verlas si tiene acceso a ellas. Entonces, por seguridad, SSH le pedirá una frase de contraseña cuando genere sus claves (con suerte no se saltó ese paso) y usará esa frase de contraseña para cifrar y descifrar su clave privada.
A pesar de esto, esto significa que tendrá que ingresar su frase de contraseña cada vez que necesite utilizar su clave privada, lo que resultará molesto. Para administrar esto, la mayoría de las implementaciones de SSH utilizarán un agente, que mantiene su clave descifrada en la memoria. Esto significa que solo necesitará desbloquearlo una vez, y persistirá hasta que reinicie, lo que le permitirá iniciar sesión en sus servidores de forma segura sin un mensaje de contraseña. Decididamente, querrá asegurarse de que su servidor SSH esté bloqueado.
¿Qué es el reenvío de agentes SSH?
Agente SSH reenvío es como ir una capa más profunda. A modo de ejemplo, imagine que se está conectando a un servidor remoto y desea git pull
algún código que estás almacenando en Github. Pretendes utilizar la autenticación SSH para Github, pero no deseas tus claves privadas en ese servidor remoto, solo en tu máquina.
Para solucionar este problema, puede abrir su agente SSH local al servidor remoto, lo que le posibilita actuar como usted mientras está conectado. Esto no envía sus claves privadas a través de Internet, ni siquiera mientras están encriptadas; simplemente posibilita que un servidor remoto acceda a su agente SSH local y verifique su identidad.
Funciona así: le pides a tu servidor remoto que extraiga un código de Github, y Github dice «¿quién eres?» al servidor. Por lo general, el servidor consultaría sus propios id_rsa
archivos para responder, pero en su lugar enviará la pregunta a su máquina local. Su máquina local responde la pregunta y envía la solución (que no incluye su clave privada) al servidor, que la reenvía a Github. A Github no le importa que su máquina local haya respondido la pregunta, solo ve que ha sido respondida y le posibilita conectarse.
RELACIONADO: Cómo bloquear su servidor SSH
Cómo habilitar el reenvío de agentes SSH
En Mac y Linux, el reenvío del agente SSH está incorporado en ssh
, y el ssh-agent
El procedimiento se inicia automáticamente. Todo lo que tendrá que hacer es asegurarse de que sus claves se agreguen a ssh-agent
y configurar ssh
para usar el reenvío.
Agregar claves a ssh-agent
Puedes utilizar la utilidad ssh-add
para agregar claves a su agente local. Suponiendo que su clave privada está almacenada en id_rsa
, Tu puedes correr:
ssh-add ~/.ssh/id_rsa
Además puede pegar manualmente la clave en lugar de utilizar id_rsa
. Verifique que la clave se agregue correctamente con:
ssh-add -L
Si es así, debería escupir tu llave.
Agregar claves en macOS
En macOS, necesitará ejecutar:
ssh-add -K ~/.ssh/id_rsa
los -K
flag almacenará la clave en el llavero de macOS, que es necesario para recordar sus claves al reiniciar.
Permitir el reenvío en la configuración de su cliente
Abre tu ~/.ssh/config
archivo en su máquina local, o cree uno nuevo si está vacío. Estableceremos una nueva regla para asegurarnos de que el reenvío de agentes esté habilitado para el dominio de este servidor:
Host example ForwardAgent yes
Deberías reemplazar example
con el nombre de dominio o la dirección IP de su servidor. Puedes utilizar el comodín *
para el host, pero después reenviará el acceso a sus claves privadas a cada servidor al que se conecte, que probablemente no sea lo que desea.
Dependiendo de su sistema operativo, además puede tener archivos de configuración SSH en /etc/ssh/ssh_config
para macOS o /etc/ssh_config
para Ubuntu. Estos archivos pueden anular el archivo de configuración del usuario en ~/.ssh/config
, por lo tanto asegúrese de que nada esté en conflicto. Líneas que comienzan con #
se comentan y no disponen ningún efecto.
Además puede habilitar manualmente el reenvío de agentes para cualquier dominio usando ssh -A user@host
, que omitirá todos los archivos de configuración. Si desea un método sencillo para reenviar sin tocar config, puede agregar alias ssh="ssh -A"
a su configuración de bash, pero esto es lo mismo que utilizar un host comodín, por lo que no lo sugerimos para nada centrado en la seguridad.
Prueba de reenvío SSH
Si no tiene dos servidores a mano, la forma más fácil de probar si el reenvío SSH está funcionando es agregar su clave pública desde su máquina local a su Perfil de Github e intente SSH desde un servidor remoto:
ssh [email protected]
Si funcionó, debería ver su nombre de usuario y debería poder enviar y extraer código de un repositorio sin tener que poner claves privadas en el servidor.
Configurar el reenvío SSH para clientes de Windows
Dado que Windows no es un sistema operativo Unix, la configuración variará dependiendo de cómo se esté ejecutando exactamente ssh
en primer lugar.
Si está usando el Subsistema de Linux para Windows, que le posibilita ejecutar bash en Windows, la configuración será la misma que en Linux o macOS, dado que está virtualizando totalmente una distribución de Linux para ejecutar la línea de comandos.
Si está usando Git Bash, la configuración es la misma que en Linux, pero deberá iniciar manualmente ssh-agent
cuando lanza el shell, lo que puede hacer con un script de inicio en .bashrc
.
Si está usando PuTTY, la configuración es bastante simple. Desde la configuración, vaya a Conexión> SSH> Auth y habilite «Permitir reenvío de agentes».
Además puede agregar su archivo de clave privada desde el mismo panel. PuTTY se encargará del agente SSH por usted, por lo que no tendrá que perder el tiempo con ningún archivo de configuración.
RELACIONADO: Cómo administrar un archivo de configuración SSH en Windows y Linux
Qué hacer si el reenvío SSH no funciona
Asegúrese de tener claves SSH en primer lugar; si no lo haces, puedes correr ssh-keygen
, que colocará su clave privada en ~/.ssh/id_rsa
y tu clave pública en ~/.ssh/id_rsa.pub
.
Verifique que sus claves SSH funcionen correctamente con la autenticación regular y agréguelas a ssh-agent
. Puede agregar claves con ssh-add
.
los ssh-agent
El procedimiento además debe estar en ejecución. En macOS y Linux, debería iniciarse automáticamente, pero puede verificar que se esté ejecutando con:
echo "$SSH_AUTH_SOCK"
Si está configurado correctamente, debería ver un Listeners
socket devuelto.
Asegúrese de que sus archivos de configuración estén configurados correctamente para incluir ForwardAgent yes
y asegúrese de que ningún otro archivo de configuración sobrescriba esta conducta. Para verificar qué archivos de configuración está usando SSH, puede ejecutar ssh
en modo detallado:
ssh -v [email protected]
Que debería mostrar qué archivos de configuración se están usando. Los archivos que se muestran más adelante en esta lista disponen prioridad sobre los archivos anteriores.
Y, decididamente, las alternativas de la línea de comandos anulan los archivos de configuración. Si el reenvío de agentes no funciona con ssh -A
y sus claves están configuradas correctamente en su agente, entonces algo más está mal y deberá verificar su conexión con los servidores de la cadena.