He estado poniendo mis archivos de identidad ssh dentro de mi carpeta ~ / .ssh /. Probablemente tengo unos 30 archivos allí.
Cuando me conecte a los servidores, especificaré el archivo de identidad a usar, con algo como
ssh -i ~ / .ssh / client1-identity [email protected]
Sin embargo, si no especifico un archivo de identidad, y solo uso algo como esto:
ssh [email protected]
Me sale el error
Demasiados errores de autenticación para el usuario123
Entiendo que es porque si no se especifica ningún archivo de identidad, y ssh puede encontrar archivos de identidad, entonces los probará todos.
También entiendo que puedo editar el ~/.ssh/config
archivo y especificar algo como:
Host example.com Autenticaciones preferidas interactivas con el teclado, contraseña
para evitar que esa conexión intente archivos de identidad conocidos.
Entonces, supongo que podría mover mis archivos de identidad fuera del ~/.ssh/
directorio, o podría especificar cada host para el que quiero deshabilitar la autenticación del archivo de identidad en el archivo de configuración, pero ¿hay alguna manera de decirle a SSH que compre el valor predeterminado y no busque archivos de identidad? ¿O para especificar los que buscará?
fuente
ssh -v
para averiguarlo con seguridad.Respuestas:
Puede usar la
IdentitiesOnly=yes
opción junto conIdentityFile
(consulte la página de manual de ssh_config ). De esa manera, puede especificar qué archivo (s) debe buscar.En este ejemplo, ssh solo buscará las identidades dadas en los archivos ssh_config + las 4 que figuran en la línea de comando (las identidades proporcionadas por el agente serán ignoradas):
Las formas
-i
y-o IdentityFile=
son intercambiables.fuente
IdentitiesOnly yes
(sin el "=")?Configuration options may be separated by whitespace or optional whitespace and exactly one '='; the latter format is useful to avoid the need to quote whitespace when specifying configuration options using the ssh, scp, and sftp -o option.
IdentitiesOnly
puede que no siempre funcione, es posible que deba excluir un host específicamente; ver superuser.com/questions/859661/...La respuesta corta de user76528 es correcta, pero acabo de tener este problema y pensé que alguna elaboración sería útil. También le puede interesar esta solución si se pregunta "¿Por qué ssh ignora mi opción de configuración de archivo de identidad"?
En primer lugar, a diferencia de cualquier otra opción en ssh_config, ssh no usa la primera
IdentityFile
que encuentra. En cambio, laIdentityFile
opción agrega ese archivo a una lista de identidades utilizadas. Puede apilar variasIdentityFile
opciones, y el cliente ssh las probará todas hasta que el servidor acepte una o rechace la conexión.En segundo lugar, si usa un agente ssh, ssh intentará usar automáticamente las claves en el agente, incluso si no las ha especificado con la opción IdentityFile (o -i) de ssh_config. Esta es una razón común por la que puede obtener el
Too many authentication failures for user
error. Usar laIdentitiesOnly yes
opción deshabilitará este comportamiento.Si ssh como múltiples usuarios para múltiples sistemas, le recomiendo poner
IdentitiesOnly yes
en su sección global de ssh_config, y poner cada unoIdentityFile
dentro de las subsecciones de Host apropiadas.fuente
IdentitiesOnly yes
en la sección global de ssh_config es lo que lo hizo por mí. ¡Gracias!Host * \ IdentityFile ~/.ssh/mykey
como una opción de configuración, y al principio parecía extraño que tener una entrada diferente para un sitio específico, por ejemplo,Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes
continuaba suministrando enmykey
lugar despecialkey
. Ciertamente no estaba claro, hasta que me di cuenta (por su respuesta) de que las entradas de IdentityFile se apilan en un orden de evaluación y se utilizará la última definida. La eliminaciónIdentityFile ~/.ssh/mykey
solucionó el problema y se utilizó la clave única correcta.git pull/push
comandos intentaban cada identidad cargada en mi agente. No fue un problema hasta que en un momento tuve demasiadas llaves.Generalmente lo hago así:
Las opciones son las siguientes:
-o IdentitiesOnly=yes
- le dice a SSH que use solo las claves que se proporcionan a través de la CLI y ninguna desde$HOME/.ssh
o a través de ssh-agent-F /dev/null
- desactiva el uso de$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- la clave que desea usar explícitamente para la conexiónEjemplo
Observe en la salida anterior que
ssh
solo ha identificado lamy_id_rsa
clave privada a través de la CLI y que la usa para conectarse a un servidor.Específicamente estas secciones:
y:
fuente
-F /dev/null
es la pieza que falta en las otras respuestas.En el escenario donde tiene muchas claves, invariablemente se encontrará con el error "Demasiadas fallas de autenticación". Si tiene una contraseña y desea simplemente usar la contraseña para iniciar sesión, así es como lo hace.
Para usar SOLO la autenticación de contraseña y NO usar la clave pública, y NO usar el "teclado interactivo" algo engañoso (que es un superconjunto que incluye contraseña), puede hacerlo desde la línea de comandos:
fuente
Use IdentityFile pero siga usando ssh-agent para evitar las frases de contraseña
La solución aceptada de usar
IdentitiesOnly yes
significa que nunca podrá aprovechar ssh-agent, lo que da como resultado repetidas solicitudes para su frase de contraseña al cargar su clave.Para seguir usando
ssh-agent
y evitar los errores 'Demasiadas fallas de autenticación', intente esto:Elimine los scripts de inicio de la consola interactiva que carguen las claves automáticamente
ssh-agent
.agregar
AddKeysToAgent yes
a la configuración ssh de su cliente. Esto le solicitará la frase de contraseña en la primera conexión, pero luego agregará la clave a su agente.utilícelo
ssh-add -D
cuando reciba errores de "demasiada autenticación". Esto simplemente 'restablece' (elimina) su caché de agente ssh. Luego intente la conexión nuevamente dentro de la misma sesión. Se le solicitará una frase de contraseña y, una vez aceptada, se agregará a su agente. Como solo tendrá una clave en su agente, se le permitirá conectarse. ssh-agent todavía está allí para futuras conexiones durante la misma sesión para evitar reprompts.fuente
El cliente ssh y el se
ssh-agent
está comunicando a través de un socket de dominio Unix cuyo nombre se especifica al cliente mediante laSSH_AUTH_SOCK
variable de entorno (establecida por el agente al iniciarse).Por lo tanto, para evitar que una sola invocación del cliente consulte al agente, esta variable se puede establecer explícitamente en algo no válido, como una cadena vacía;
Una invocación de cliente como esta fallará en la comunicación con el agente y solo podrá ofrecer al servidor las identidades disponibles como archivos en
~/.ssh/
, o cualquiera especificado en la línea de comando que use-i
.fuente
Tuviste la respuesta todo el tiempo (casi):
Trabajó para mi.
fuente
agregue esto al final del
~/.ssh/config
archivo para evitar el uso de claves para servidores que no sean de configuración:fuente