
He estado poniendo mis archivos de identidad ssh dentro de mi ~/.ssh/
carpeta. Probablemente tengo unos 30 archivos allí.
Cuando me conecto a servidores, especificaré el archivo de identidad para usar con algo como
ssh -i ~/.ssh/cliente1-identidad[correo electrónico protegido]
Sin embargo, si no especifico un archivo de identidad y solo uso algo como esto:
ssh[correo electrónico protegido]
me sale el error
Demasiados errores de autenticación para el usuario123
Entiendo que esto se debe a que si no se especifica ningún archivo de identidad y ssh puede encontrar archivos de identidad, los probará todos.
También entiendo que puedo editar el ~/.ssh/config
archivo y especificar algo como:
Ejemplo de alojamiento.com PreferredAuthentications teclado interactivo, contraseña
para evitar que esa conexión pruebe 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 de archivos de identidad en el archivo de configuración, pero ¿hay alguna manera de decirle a SSH de forma predeterminada que no busque? ¿Archivos de identidad? ¿O especificar cuáles buscará?
Respuesta1
Puede utilizar la IdentitiesOnly=yes
opción junto con IdentityFile
(verpágina de manual ssh_config). De esa manera, puede especificar qué archivos debe buscar.
En este ejemplo, sshsolobusque las identidades proporcionadas en los archivos ssh_config + las 4 que figuran en la línea de comando (se ignorarán las identidades proporcionadas por el agente):
ssh -o IdentitiesOnly=yes \
-o IdentityFile=id1.key \
-o IdentityFile=id2.key \
-i id3.key \
-i id4.key \
[email protected]
Las formas -i
y -o IdentityFile=
son intercambiables.
En .ssh/config
, puedes incluir configuraciones como esta:
Host example
User user123
Hostname example.com
IdentityFile ~/.ssh/id_rsa_example
IdentityFile ~/.ssh/id_rsa_example2
IdentitiesOnly yes
Respuesta2
Respuesta corta del usuario76528es correcto, pero acabo de tener este problema y pensé que sería útil algo de explicación. También puede interesarle esta solución si se ha preguntado "¿Por qué ssh ignora la opción de configuración de mi 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, la IdentityFile
opción agrega ese archivo a una lista de identidades utilizadas. Puede apilar varias IdentityFile
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 in ssh_config
( IdentityFile
o -i
). Esta es una razón común por la que puede aparecer el Too many authentication failures for user
error. El uso de la IdentitiesOnly yes
opción desactivará este comportamiento.
Si utiliza ssh como varios usuarios en varios sistemas, le recomiendo incluir IdentitiesOnly yes
su sección global de ssh_config
y colocar cada uno IdentityFile
dentro de las subsecciones de Host correspondientes.
Respuesta3
Generalmente lo hago así:
$ ssh -o IdentitiesOnly=yes -F /dev/null -i ~/path/to/some_id_rsa [email protected]
Las opciones son las siguientes:
-o IdentitiesOnly=yes
- le dice a SSH que solo use claves proporcionadas a través de la CLI y ninguna del$HOME/.ssh
agente ssh-F /dev/null
- desactiva el uso de$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- la clave que desea utilizar explícitamente para la conexión
Ejemplo
$ ssh -v -o IdentitiesOnly=yes -F /dev/null -i ~/my_id_rsa [email protected]
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /dev/null
debug1: Connecting to someserver.mydom.com [10.128.12.124] port 22.
debug1: Connection established.
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA f5:60:30:71:8c:a3:da:a3:fe:b1:6d:0b:20:87:23:e1
debug1: Host 'someserver' is known and matches the RSA host key.
debug1: Found key in /Users/sammingolelli/.ssh/known_hosts:103
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to someserver.mydom.com ([10.128.12.124]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
Last login: Tue Dec 8 19:03:24 2015 from 153.65.219.15
someserver$
Observe en el resultado anterior que ssh
solo ha identificado la my_id_rsa
clave privada a través de la CLI y que la usa para conectarse a algún servidor.
En concreto estos apartados:
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
y:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Respuesta4
Utilice IdentityFile pero siga usando ssh-agent para evitar nuevas solicitudes de contraseña
La solución aceptada de usar IdentitiesOnly yes
significa que nunca podrá aprovechar ssh-agent, lo que resultará en solicitudes repetidas de 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 cualquier secuencia de comandos de inicio de la consola interactiva que cargue claves automáticamente en
ssh-agent
.agregue
AddKeysToAgent yes
a la configuración ssh de su cliente. Esto le solicitará la frase de contraseña la primera vez que se conecte, pero luego agregará la clave a su agente.Úselo
ssh-add -D
cuando obtenga "demasiados errores de autenticación". Esto simplemente 'restablece' (elimina) la caché de su 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, podrá conectarse. ssh-agent sigue ahí para futuras conexiones durante la misma sesión para evitar nuevas notificaciones.Host ex example.com User joe HostName example.com PreferredAuthentications publickey,password IdentityFile /path/to/id_rsa AddKeysToAgent yes