De un día para otro, el servidor de nuestra empresa empezó a pedirme mi contraseña SSH.
Lo primero que verifiqué fue si mi clave estaba dentro de .ssh/authorized_keys
en el servidor. Mi llave estaba adentro, nada cambió. También en /etc/ssh/sshd_config
nada ha cambiado.
Luego intenté hacer este procedimiento recientemente instalado el servidor Ubuntu16. Después de completar estos 5 pasos, el nuevo servidor me pidió nuevamente la contraseña SSH.
El comando ssh-copy-id
finalmente logró el inicio de sesión SSH sin clave, pero he notado que .ssh/authorized_keys
tiene tres líneas: una que comienza con ssh-dss
y dos que comienzan con ssh-rsa
Ahora recuerdo que el procedimiento de 5 pasos del enlace anterior ha funcionado en el pasado con una sola clave.
¿Ha cambiado algo recientemente? ¿Por qué el procedimiento anterior ya no funciona?
Editar: Dado que ssh-copy-id
copia en total 3 claves a .ssh/authorized_keys
esas claves se puede encontrar en los siguientes archivos:
~/.ssh/id_dsa
~/.ssh/sshkey.pub
~/.ssh/id_rsa.pub
así que eliminé línea por línea del archivo remoto «s .ssh/authorized_keys
eliminado ~/.ssh/id_dsa
línea – inicio de sesión automático exitoso
eliminado ~/.ssh/id_rsa.pub
línea – inicio de sesión automático exitoso
eliminada ~/.ssh/sshkey.pub
línea – inicio de sesión automático no se realizó correctamente: se solicitó la contraseña
Solo es necesario el contenido de ~/.ssh/sshkey.pub
. Por qué SSH compara sshkey.pub
y no id_rsa.pub
como en el ejemplo del tutorial en línea?
Comentarios
Respuesta
Parece que ssh-copy-id
es simplemente una función de conveniencia. Verifica si las claves ya se exportaron a la máquina, crea el directorio .ssh
si es necesario, pero básicamente solo agrega claves públicas a .ssh/authorized_keys
. ssh-copy-id
es un script de shell (en openssh), por lo que puede leer su código (vi `which ssh-copy-id`
) al final:
[ "$DRY_RUN" ] || printf "%s\n" "$NEW_IDS" | \ ssh "$@" "exec sh -c "cd ; umask 077 ; mkdir -p .ssh && { [ -z ""`tail -1c .ssh/authorized_keys 2>/dev/null`"" ] || echo >> .ssh/authorized_keys ; } && cat >> .ssh/authorized_keys || exit 1 ; if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi"" \ || exit 1
Durante la autenticación, solo se verifica authorized_keys
. De la documentación de openssh:
El archivo ~ / .ssh / allowed_keys enumera el público claves que están permitidas para iniciar sesión. Cuando el usuario inicia sesión, el programa ssh le dice al servidor qué par de claves le gustaría usar para la autenticación. El cliente prueba que tiene acceso a la clave privada y el servidor verifica que la clave pública correspondiente esté autorizada para aceptar la cuenta.
Espero que esto responda el título de su pregunta «ssh-copy-id versus copia manual id_rsa.pub». Este archivo ~/.ssh/sshkey.pub
no lo tengo, así que espero que hayas resuelto los problemas con tu configuración tú mismo. De todos modos, sí, puedes copiar manualmente la clave pública a authorized_keys
no usa ssh-copy-id
.
ssh -v your-remote-server
a su pregunta.