¿Cómo desbloquear la cuenta para la autorización de clave pública ssh, pero no para la autorización de contraseña?


32

El ssh no me deja iniciar sesión, porque la cuenta está bloqueada. Quiero desbloquear al usuario en mi servidor para la autorización de clave pública a través de ssh, pero no habilito el inicio de sesión con contraseña.

He intentado:

# passwd -u username
passwd: unlocking the password would result in a passwordless account.
You should set a password with usermod -p to unlock the password of this account.

Entradas de registro de autenticación:

Mar 28 00:00:00 vm11111 sshd[11111]: User username not allowed because account is locked
Mar 28 00:00:00 vm11111 sshd[11111]: input_userauth_request: invalid user username [preauth]

que debe (en mi humilde opinión) hacer esto para todos los usuarios ... una configuración simple cuando lo hace por todo el sshd
Skaperen

passwd -uEs una mala idea. Vea la respuesta de Giles a continuación.
Peter Jenkins el

Respuestas:


15

Desbloquee la cuenta y proporcione al usuario una contraseña compleja como sugiere @Skaperen.

Edite /etc/ssh/sshd_configy asegúrese de tener:

PasswordAuthentication no

Verifique que la línea no esté comentada ( #al inicio) y guarde el archivo. Finalmente, reinicie el sshdservicio.

Antes de hacer esto, asegúrese de que su autenticación de clave pública funcione primero.

Si necesita hacer esto solo para uno (o un pequeño número) de usuarios, deje PasswordAuthenticationhabilitado y en su lugar use Match User:

Match User miro, alice, bob
    PasswordAuthentication no

Coloque al final del archivo, ya que es válido hasta el siguiente Matchcomando o EOF.

También puedes usar Match Group <group name>o una negaciónMatch User !bloggs

Como mencionas en los comentarios, también puedes revertirlo para que la autenticación de contraseña esté deshabilitada en la parte principal de la configuración y usar Matchdeclaraciones para habilitarla para algunos usuarios:

PasswordAuthentication no
.
.
.
Match <lame user>
    PasswordAuthentication yes

Tengo la impresión de que Miro quería deshabilitar la contraseña para un solo uso. pero mira mi comentario anterior
Skaperen

@Skaperen: podrías estar en lo cierto. He alterado ligeramente mi respuesta.
garethTheRed

Esa Matchsintaxis se ve bien, pero voy a intentar revertirla. Habilite el inicio de sesión con contraseña para (pocos usuarios).
kravemir

@Miro - Esa es una buena idea, la he agregado a mi respuesta para referencia futura.
garethTheRed

37

Hagas lo que hagas, no dejes la cuenta en el estado dejado passwd -u, con un campo de contraseña en blanco: eso permite iniciar sesión sin ingresar una contraseña (excepto a través de SSH, porque SSH lo rechaza).

Cambie la cuenta para que no tenga contraseña, pero esté desbloqueado. Una cuenta no tiene contraseña si el hash de contraseña en la base de datos de contraseñas no es el hash de ninguna cadena. Tradicionalmente, una cadena de un carácter como *o !se usa para eso.

Las cuentas bloqueadas también usan un marcador especial en el campo de contraseña que hace que la cadena no sea el hash de ninguna cadena. El marcador depende del sistema. En Linux, el passwdcomando marca las contraseñas bloqueadas poniendo un !al principio, y OpenSSH trata la cuenta como bloqueada si el campo comienza con !. Otras variantes de Unix tienden a usar mecanismos similares pero no idénticos, así que tenga cuidado si su base de datos de contraseñas se comparte entre una red heterogénea.

En Linux, puede deshabilitar el acceso basado en contraseña a una cuenta mientras permite el acceso SSH (con algún otro método de autenticación, generalmente un par de claves) con

usermod -p '*' username

El usuario no podrá volver a cambiar la cuenta a una contraseña, ya que eso requiere que ingrese una contraseña válida.

Si lo desea, puede configurar SSH para rechazar la autenticación de contraseña, independientemente de si la cuenta tiene una contraseña. Aún tendrá que hacer arreglos para que SSH no considere que la cuenta está bloqueada, por lo que, por ejemplo, en Linux deberá eliminar el !campo de la contraseña (pero no deje el campo vacío; configúrelo *como se explicó anteriormente) ) Para deshabilitar la autenticación de contraseña para SSH, agregar una PasswordAuthenticationdirectiva para /etc/sshd_configo /etc/ssh/sshd_config(lo que es en su sistema). Use un Matchbloque para hacer que esa directiva solo se aplique a un usuario específico; Matchlos bloques deben aparecer

…
Match User username
    PasswordAuthentication no

66
Gracias - usermod -p '*' usernametrabajó un encanto!
Homme Zwaagstra

1
OpenSSHd permite a los usuarios bloqueados (es decir, hash de contraseña con !prefijo) iniciar sesión con algún otro método de autenticación si UsePAM yesestá configurado sshd_config. Este es probablemente el valor predeterminado con la mayoría de las distribuciones (por ejemplo, con Fedora).
maxschlepzig

1
Tengo un sistema incrustado sin PAM, por lo que la distinción '*'vs. '!'es súper útil.
jpkotta

8

No necesita habilitar o establecer contraseñas, y realmente no debería hacerlo, si ya está usando teclas seguras. Simplemente vuelva a bloquear su cuenta (sudo passwd -l username) desde una sesión existente y arregle su configuración SSH.

La razón por la que sucedió esto probablemente se deba a que ha editado una de las configuraciones predeterminadas del demonio SSH (en / etc / ssh / sshd_config).

Cambie esto en / etc / ssh / sshd_config y reinicie SSH:

UsePAM yes

En general, a menos que tenga una buena razón para deshabilitar PAM, le recomiendo que lo mantenga habilitado; habilitar PAM dentro de SSH le permitirá iniciar sesión, incluso con una contraseña eliminada. Hagas lo que hagas, no establezcas una contraseña vacía o similar ... bloquear el campo de contraseña no tiene que significar bloquear toda tu cuenta.

Consejo rápido al jugar con SSH: mantenga abierta otra sesión (en otra ventana) cada vez que realice cambios en su configuración de SSH, y luego pruebe que aún puede iniciar sesión; Si accidentalmente interrumpe su acceso, use su sesión actual para solucionarlo.

(Descargo de responsabilidad: trabajo en Userify, que proporciona software de administración de claves SSH).


0

Tuve este problema en CentOS 7. Soy un usuario habitual de Linux basado en Debian, así que era un pez fuera del agua. Noté que en algunos de los servidores funcionaba y en uno solo no. Audit.log no dijo nada útil y secure.log tampoco dio nada. Descubrí que la única diferencia real era algunas diferencias de contexto de seguridad en los archivos y directorios entre los que funcionaban y los que no. Obtenga la seguridad con

sudo ls -laZ <user-home>/.ssh

del directorio (supongo que hay muchos valores predeterminados en sshd_config).

Deberías ver algunos ssh_home_ty user_home_tatributos. Si no lo hace, use el chconcomando para agregar los atributos que faltan.

Por ejemplo

home="$(getent passwd <user> | cut -d: -f6)"
sudo chcon -R unconfined_u:object_r:ssh_home_t:s0 "$home".ssh
sudo chcon unconfined_u:object_r:user_home_t:s0 "$home"

En mi caso, mi sospecha es que el usuario fue creado de manera no estándar. Su casa era un directorio en /var/lib.

Más información en: https://www.linuxquestions.org/questions/linux-security-4/selinux-preventing-ssh-login-with-~-ssh-authorized_keys-4175469538/


-2

desbloquear la cuenta y cambiar la contraseña a una cadena aleatoria

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.