Deshabilitar la autenticación de contraseña para SSH

127

Estoy buscando una manera de deshabilitar que los clientes SSH accedan a la solicitud de contraseña como se indica aquí .

No puedo desactivar la password:solicitud de inicio de sesión de root . He cambiado el sshd_configarchivo para leer:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

y también han cambiado los permisos chmod 700 ~/.sshy chmod 600 ~/.ssh/authorized_keys. ¿Qué me estoy perdiendo? ¿Esto requiere que tenga una frase de contraseña?

Volcado detallado:

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug1: Next authentication method: password

Archivo / etc / ssh / sshd_config:

# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile    %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM no
Matt Stokes
fuente
ssh -v user @ server para obtener resultados detallados que lo ayuden a solucionar problemas.
Niall Byrne
Ambas ssh_configy sshd_configtienen PasswordAuthentication- ¡mantente alerta!
Brent Bradburn,

Respuestas:

198

En archivo /etc/ssh/sshd_config

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication no

Descomente la segunda línea y, si es necesario, cambie sí a no.

Entonces corre

service ssh restart
Kimvais
fuente
77
Muchas guías sugieren cambiar ChallengeResponseAuthentication, PasswordAuthentication, UsePAM de yes a no en el servidor. Probado con éxito en Debian / Ubuntu.
9
Para su información, la forma systemd de reiniciar el servicio es: systemctl restart sshdeste es el valor predeterminado en Ubuntu más nuevo.
therealjumbo
¿Cómo agrego nuevas claves al servidor, mientras la autenticación de contraseña está deshabilitada? Seguramente hay una manera de hacer esto, sin tener que activar la autenticación de contraseña, cada vez que alguien quiera agregar una clave ...
Matthew
1
@Matthew Quizás usandossh-copy-id
iamyojimbo
@iamyojimbo pero aún necesita una clave autorizada para poder conectarse y enviar una con ese comando.
Mateo
16

correr

service ssh restart

en vez de

/etc/init.d/ssh restart

Esto podría funcionar.

Satoshi Nakanishi
fuente
Esto funcionó para mí; alguna idea de por qué usar init.d no lo hizo?
Seb
1
Depende de tu sabor de Linux ... En Gentoo, ambos funcionan para mí.
Gene Pavlovsky
15

Aquí hay un script para hacer esto automáticamente

# Only allow key based logins
sed -n 'H;${x;s/\#PasswordAuthentication yes/PasswordAuthentication no/;p;}' /etc/ssh/sshd_config > tmp_sshd_config
cat tmp_sshd_config > /etc/ssh/sshd_config
rm tmp_sshd_config
JasonS
fuente
3

Seguí estos pasos (para Mac).

En /etc/ssh/sshd_configcambio

#ChallengeResponseAuthentication yes
#PasswordAuthentication yes

a

ChallengeResponseAuthentication no
PasswordAuthentication no

Ahora genere la clave RSA:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

(Para mí, una clave RSA funcionó. Una clave DSA no funcionó).

Se generará una clave privada ~/.ssh/id_rsajunto con ~/.ssh/id_rsa.pub(clave pública).

Ahora muévase a la carpeta .ssh :cd ~/.ssh

Entrar rm -rf authorized_keys(a veces, varias teclas conducen a un error).

Entrar vi authorized_keys

Ingrese :wqpara guardar este archivo vacío

Entrar cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Reinicie el SSH:

sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
Anand Prakash
fuente
¿No puedes usar touchpara crear el archivo vacío authorized_keys?
Peter Mortensen
-8

Esto es de un tutorial que tengo:

En su máquina como root:

ssh-keygen -t rsa

Y deja la frase de contraseña vacía.

Desde su máquina local (y tendrá que escribir una contraseña):

ssh root@remotemachine mkdir -p .ssh

Luego:

cat .ssh/id_rsa.pub | ssh root@remotemachine 'cat >> .ssh/authorized_keys'

Ahora puede iniciar sesión sin una solicitud de contraseña

ssh root@remotemachine

¡Vea el inicio de sesión SSH sin contraseña si tiene algún problema!

Fabrizio Mazzoni
fuente
2
Estoy tratando de bloquear la solicitud de contraseña para que no aparezca en todas las circunstancias. Forzar inicio de sesión solo mediante la clave ssh
Matt Stokes
Esto debería hacerlo. Se abrirá directamente sin pedirle una contraseña, sino de un cliente específico.
Fabrizio Mazzoni
1
sí, pero esto también permitirá a los clientes que no están autorizados a intentar una contraseña, ¿no?
Matt Stokes
Cambie lo siguiente: ChallengeResponseAuthentication no, PasswordAuthentication no, UsePAM no Esto solo permitirá la autenticación de clave. Acabo de probar en mi sistema y lo negará con: Permiso denegado (clave pública)
Fabrizio Mazzoni
1
No ha comentado la sección Autenticación de contraseña si el archivo que publicó es la configuración real
Fabrizio Mazzoni