Problema: tengo unas 20-30 ssh-agent
identidades. La mayoría de los servidores rechazan la autenticación Too many failed authentications
, ya que SSH generalmente no me deja probar 20 claves diferentes para iniciar sesión.
Por el momento, estoy especificando el archivo de identidad para cada host manualmente, utilizando IdentityFile
la IdentitiesOnly
directiva y, de modo que SSH solo pruebe un archivo de clave, que funciona.
Desafortunadamente, esto deja de funcionar tan pronto como las claves originales ya no están disponibles. ssh-add -l
me muestra las rutas correctas para cada archivo de clave, y coinciden con las rutas en .ssh/config
, pero no funciona. Aparentemente, SSH selecciona la identidad por firma de clave pública y no por nombre de archivo, lo que significa que los archivos originales deben estar disponibles para que SSH pueda extraer la clave pública.
Hay dos problemas con esto:
- deja de funcionar tan pronto como desconecto la unidad flash con las teclas
- hace que el reenvío de agentes sea inútil ya que los archivos clave no están disponibles en el host remoto
Por supuesto, podría extraer las claves públicas de mis archivos de identidad y almacenarlas en mi computadora y en todas las computadoras remotas en las que generalmente inicio sesión. Sin embargo, esto no parece una solución deseable.
Lo que necesito es la posibilidad de seleccionar una identidad de ssh-agent por nombre de archivo, de modo que pueda seleccionar fácilmente la clave correcta usando .ssh/config
o pasando -i /path/to/original/key
, incluso en un host remoto en el que ingresé SSH. Sería aún mejor si pudiera "apodar" las teclas para que ni siquiera tenga que especificar la ruta completa.
authorized_keys
archivo que, dependiendo de la clave utilizada, ejecuta diferentes comandos, sin permitir el acceso directo al shell.Respuestas:
Supongo que tendré que responder mi propia pregunta, ya que no parece haber ninguna forma de solicitar una identidad por nombre de archivo.
Escribí scripts de Python rápidos y sucios que crean un archivo de clave pública
.ssh/fingerprints
para cada clave que tiene el agente. Entonces puedo especificar este archivo, que no contiene ninguna clave secreta, usandoIdentityFile
y SSH elegirá la identidad correcta del agente SSH. Funciona perfectamente bien y me permite usar el agente para todas las claves privadas que desee.fuente
correr
en la máquina remota para generar automáticamente todos los archivos de clave pública (suponiendo que las claves públicas en su
.ssh/config
nombre sean nombradasprivateKeyFileName.pub
y que no haya rutas inconsistentes involucradas). Llamechown $USER .ssh/*
para susudo
caso.fuente
Retomando la solución aceptada y suponiendo que solo desea reutilizar la identidad utilizada para obtener acceso al servidor inicial, entonces algo como:
es suficiente
fuente