Estoy trabajando desde la URL que encontré aquí:
Mi cliente ssh es Ubuntu 64 bit 11.10 de escritorio y mi servidor es Centos 6.2 64 bit. He seguido las instrucciones. Todavía recibo un mensaje de contraseña en ssh.
No estoy seguro de qué hacer a continuación.
ssh
key-authentication
Thom
fuente
fuente
chmod 700
/var/log/auth.log
le dirá por qué falla el inicio de sesión./var/log/secure
.0700
fue la respuesta, pero cuando lo hicessh -v
en el lado del cliente no indicó un error relacionado con por qué no se aceptó la clave, solo dijo que estaba intentando la contraseña a continuación a pesar de que mi cliente envió una clave pública. ¿Cómo esperan que diagnostiquemos problemas sin información de error del servidor?Respuestas:
Asegúrese de que los permisos en el
~/.ssh
directorio y su contenido sean correctos. Cuando configuré por primera vez la autenticación de mi clave ssh, no tenía la~/.ssh
carpeta configurada correctamente y me gritó.~
, su~/.ssh
directorio y el~/.ssh/authorized_keys
archivo en la máquina remota deben ser editables solo por usted:rwx------
yrwxr-xr-x
están bien, perorwxrwx---
no son buenos¹, incluso si usted es el único usuario en su grupo (si prefiere los modos numéricos:700
o755
no775
) .Si
~/.ssh
oauthorized_keys
es un enlace simbólico, se marca la ruta canónica (con enlaces simbólicos expandidos) .~/.ssh/authorized_keys
archivo (en la máquina remota) debe ser legible (al menos 400), pero necesitará que también se pueda escribir (600) si le agrega más claves.rw-------
es decir600
.restorecon -R -v ~/.ssh
(consulte, por ejemplo, el error de Ubuntu 965663 y el informe de errores de Debian # 658675 ; esto está parcheado en CentOS 6 ).¹ Excepto en algunas distribuciones (Debian y derivados) que han parcheado el código para permitir la escritura del grupo si usted es el único usuario en su grupo.
fuente
/home/USER
debe ser700
o755
ssh -v user@host
.chmod -R 700 ~/.ssh
funcionó para mí cumplir con las limitaciones de esta respuesta (RHEL 7)Si tiene acceso de root al servidor, la manera fácil de resolver tales problemas es ejecutar sshd en modo de depuración, emitiendo algo como
/usr/sbin/sshd -d -p 2222
en el servidor (puede ser necesaria la ruta completa al ejecutable de sshdwhich sshd
) y luego conectarse desde el clientessh -p 2222 user@host
. Esto obligará al demonio SSH a permanecer en primer plano y mostrar información de depuración sobre cada conexión. Busca algo comoSi no es posible utilizar un puerto alternativo, puede detener temporalmente el demonio SSH y reemplazarlo por uno en modo de depuración. Al detener el demonio SSH no se eliminan las conexiones existentes, por lo que es posible hacerlo a través de un terminal remoto, pero es algo arriesgado: si la conexión se interrumpe de alguna manera en el momento en que el reemplazo de depuración no se está ejecutando, queda bloqueado fuera de la máquina hasta que puedas reiniciarlo. Los comandos requeridos:
(Dependiendo de su distribución de Linux, la primera / última línea podría ser
systemctl stop sshd.service
/ en susystemctl start sshd.service
lugar).fuente
sshd -d
, pero falla una vez que realmente corroservice sshd start
. Estoy seguro de que es simple, pero no soy un gurú de Linux. ¿Alguna idea?¿Está encriptado el directorio de inicio? Si es así, para su primera sesión ssh deberá proporcionar una contraseña. La segunda sesión ssh para el mismo servidor funciona con la clave de autenticación. Si este es el caso, puede moverlo
authorized_keys
a un directorio sin cifrar y cambiar la ruta~/.ssh/config
.Lo que terminé haciendo fue crear una
/etc/ssh/username
carpeta, propiedad de nombre de usuario, con los permisos correctos, y coloqué elauthorized_keys
archivo allí. Luego cambió la directiva AuthorizedKeysFile/etc/ssh/config
a:Esto permite que múltiples usuarios tengan este acceso ssh sin comprometer los permisos.
fuente
Después de copiar las llaves en la máquina remota y ponerlas dentro de la máquina,
authorized_keys
debe hacer algo como esto:fuente
ssh-add -L
Solo prueba estos siguientes comandos
ssh-keygen
Presione la tecla Intro hasta que aparezca el mensaje
ssh-copy-id -i root@ip_address
(Una vez pedirá la contraseña del sistema host)
ssh root@ip_address
Ahora debería poder iniciar sesión sin ninguna contraseña
fuente
Enfrenté desafíos cuando el directorio de inicio en el control remoto no tiene los privilegios correctos. En mi caso, el usuario cambió el directorio de inicio a 777 para tener acceso local en el equipo. La máquina ya no podía conectarse con las teclas ssh. Cambié el permiso a 744 y comenzó a funcionar nuevamente.
fuente
SELinux en RedHat / CentOS 6 tiene un problema con la autenticación de clave pública , probablemente cuando se crean algunos de los archivos, selinux no está configurando sus ACL correctamente.
Para corregir manualmente las ACL de SElinux para el usuario root:
fuente
ssh root@mymachine
ingresar a un CentOS6mymachine
sin problemas, pero tengo un usuario de menor privilegio que preferiría usar, perossh regularUser@mymachine
aún así me pide una contraseña. pensamientos?Nos encontramos con el mismo problema y seguimos los pasos de la respuesta. Pero todavía no funcionó para nosotros. Nuestro problema era que el inicio de sesión funcionaba desde un cliente pero no desde otro (el directorio .ssh estaba montado en NFS y ambos clientes usaban las mismas claves).
Así que tuvimos que ir un paso más allá. Al ejecutar el comando ssh en modo detallado obtienes mucha información.
Lo que descubrimos fue que la clave predeterminada (id_rsa) no fue aceptada y, en su lugar, el cliente ssh ofreció una clave que coincidía con el nombre de host del cliente:
Obviamente, esto no funcionará desde ningún otro cliente.
Entonces, la solución en nuestro caso fue cambiar la clave rsa predeterminada a la que contenía user @ myclient. Cuando una clave es predeterminada, no se verifica el nombre del cliente.
Luego nos encontramos con otro problema, después del cambio. Aparentemente, las claves se almacenan en caché en el agente ssh local y obtuvimos el siguiente error en el registro de depuración:
Esto se resolvió volviendo a cargar las claves en el agente ssh:
fuente
Sería una configuración de fallo SSH al final del servidor. Se debe editar el archivo sshd_config del lado del servidor. Situado en
/etc/ssh/sshd_config
. En ese archivo, cambie las variables'sí' a 'no' para ChallengeResponseAuthentication, PasswordAuthentication, UsePAM
'no' a 'sí' para PubkeyAuthentication
Basado en http://kaotickreation.com/2008/05/21/disable-ssh-password-authentication-for-added-security/
fuente
vi /etc/ssh/sshd_config
, agregue el usuario xxx a la lista de usuarios permitidos,service sshd restart
*** ¡CUIDADO, reiniciar el servicio sshd con sshd_config incorrecto podría bloquearlo de la caja !? ***. Eso funciono.Asegúrese de que
AuthorizedKeysFile
apunta a la ubicación correcta, use%u
como marcador de posición para el nombre de usuario:Puede ser que solo necesite descomentar la línea:
AuthorizedKeysFile .ssh / certified_keys
Tenga en cuenta que debe volver a cargar el servicio ssh para que se realicen los cambios:
fuente
Dos comentarios: esto sobrescribirá el archivo original. Simplemente copiaría la clave pública generada y haría algo como:
Esto agregará la clave que desea utilizar a la lista de claves preexistente. Además, algunos sistemas usan el archivo
authorized_keys2
, por lo que es una buena idea hacer un enlace duro que apunte entreauthorized_keys
yauthorized_keys2
, por si acaso.fuente
Mi solución fue que la cuenta estaba bloqueada. Mensaje encontrado en / var / log / secure: Usuario no permitido porque la cuenta está bloqueada Solución: proporcione al usuario una nueva contraseña.
fuente
/etc/shadow
para este usuario de!
a*
. Después de eso, la autenticación de contraseña sigue siendo imposible, pero el usuario ya no está bloqueado.Me encontré con un problema similar y seguí los pasos con el modo de depuración.
Esto mostró el siguiente resultado
Fue realmente confuso
Mostró que el directorio raíz tenía permisos para cada uno. Lo cambiamos para que otros no tuvieran permisos.
La autenticación de clave comenzó a funcionar.
fuente
rsync -av ./root/ root@THE_HOST:/root
para cargar algunos archivos de mi directorio de trabajo local, luego, este problema ocurre (de hecho, al principio no lo noté. Después de que fallan los trabajos cron en otros hosts a la mañana siguiente, comencé a investigar el motivo) . Elrsync -av ./root/ root@THE_HOST:/root
comando cambió el propietario y el permiso del/root
directorio del host remoto. Arreglado el permiso, problema resuelto.Failed publickey for root from 135.250.24.32 port 54553 ssh2
Recibo el mismo mensaje y problema cuando olvidé agregar la clave pública a un hostauthorized_keys
. Al agregar este comentario como en mi caso, generalmente me doy cuenta de mi error después de verificar la depuración y todos los permisos más los archivos de configuración #: o <En el archivo / etc / selinux / config, el cambio de SELINUX a desactivado hace que el ssh sin contraseña funcione correctamente.
Anteriormente, puedo hacerlo de una manera. Ahora desde ambos lados puedo hacer ssh sin contraseña.
fuente
Una cosa que me equivoqué fue la propiedad de mi directorio de inicio en el sistema del servidor. El sistema del servidor se configuró como predeterminado: predeterminado, entonces yo:
Y funcionó. Otra solución económica es deshabilitar StrictModes: StirctModes no. en sshd_config. Esto al menos le dirá si el intercambio de claves y los protocolos de conexión son buenos. Entonces puedes ir a cazar los malos permisos.
fuente
Para mí, la solución era opuesta a la de Wojtek Rzepala : no me di cuenta de que todavía estaba usando
authorized_keys2
, lo que ha quedado en desuso . Mi configuración ssh dejó de funcionar en algún momento, presumiblemente cuando se actualizó el servidor. Renombrar.ssh/authorized_keys2
como.ssh/authorized_keys
solucionó el problema.D'oh!
fuente
En el pasado, encontré algunos tutoriales que describen cómo lograr una configuración ssh sin contraseña, pero algunos están tristemente equivocados.
Comencemos de nuevo y verifiquemos cada paso:
ssh-keygen -t rsa
pública y privada (
id_rsa.pub
yid_rsa
) se almacenará automáticamente en el~/.ssh/
directorio.La configuración será más fácil si usa una frase de contraseña vacía. Si no está dispuesto a hacer eso, siga esta guía, pero también revise el punto siguiente.
ssh-copy-id user@server
la clave pública del cliente se copiará en la ubicación del servidor
~/.ssh/authorized_keys
.ssh user@server
Ahora, si aún no funciona después de los 3 pasos descritos, intentemos lo siguiente:
~/ssh
permisos de carpeta en la máquina cliente y servidor ./etc/ssh/sshd_config
en el servidor para asegurarse de queRSAAuthentication
,PubkeyAuthentication
y lasUsePAM
opciones no están deshabilitadas, se pueden habilitar de forma predeterminada conyes
.ssh-agent
yssh-add
lograr conexiones sin contraseña en su sesión./var/log/auth.log
en el servidor para encontrar el problema por el cual se omite la autenticación de clave.fuente
Estaba teniendo exactamente el mismo problema con PuTTY conectándose a una máquina Ubuntu 16.04. Fue desconcertante porque el programa pscp de PuTTY funcionaba bien con la misma clave (y la misma clave funcionaba en PuTTY para conectarse a otro host).
Gracias al valioso comentario de @UtahJarhead, revisé mi archivo /var/log/auth.log y encontré lo siguiente:
Resulta que las versiones más nuevas de OpenSSH no aceptan claves DSA por defecto. Una vez que cambié de una clave DSA a una clave RSA, funcionó bien.
Otro enfoque: esta pregunta analiza cómo configurar el servidor SSH para aceptar claves DSA: https://superuser.com/questions/1016989/ssh-dsa-keys-no-longer-work-for-password-less-authentication?lq = 1
fuente
Estos pasos deberían ayudarte. Lo uso regularmente entre muchas máquinas Ubuntu 10.04 de 64 bits.
podría poner esto en un script con algunas indicaciones e invocarlo como
fuente
ssh-copy-id
que hace los dos últimos pasos automáticamente.mkdir
que también debería agregar allíchmod 700 .ssh
y, por cierto, no necesita ser tan detallado~/.ssh
, solo.ssh
es suficiente ya que los comandos se ejecutan en el directorio de inicio de todos modosTuve un problema similar con ssh. En mi caso, el problema fue que instalé hadoop cloudera (desde rpm en centos 6) y creó hdfs de usuario con el directorio de inicio
/var/lib/hadoop-hdfs
(no estándar/home/hdfs
)Cambié en / etc / passwd
/var/lib/hadoop-hdfs
a/home/hdfs
, moví el directorio de inicio a una nueva ubicación y ahora puedo conectarme con la autenticación de clave pública.fuente
Sólo tenía este mismo problema, y para mí la solución era establecer
UsePAM
ano
. Verá, incluso conPasswordAuthentication
set tono
, todavía obtendrákeyboard-interactive
, y en mi caso, mi programa ssh local siguió por defecto, por alguna razón.Antecedentes adicionales para ayudar a cualquier persona con la misma situación: me estoy conectando desde un host que ejecuta Dropbear a uno que ejecuta OpenSSH. Con
PasswordAuthentication
yUsePAM
ambos configuradosno
en la máquina remota, recibiré el siguiente mensaje si ingresossh user@server
:Al proporcionar el archivo de identidad
-i
, todo funciona como se esperaba.Puede haber un poco más de información aquí.
fuente
Después de verificar los permisos y probar varias otras soluciones enumeradas aquí, finalmente eliminé el directorio ssh del servidor y configuré nuevamente mi clave pública.
Comandos del servidor:
Comandos locales:
fuente
En el servidor:
Fue
directory permission issue
. Era 777 en el servidor, entoncesI changed it back to 700
. Este esfixed
mi problemassh password less login failure
incluso después de copiar$USER/.ssh/id_rsa.pub
al servidor$USER/.ssh/authorized_keys
.fuente
Sin embargo, otra opción es una variante de @Jagadish 's respuesta : para
strace
el demonio ssh.Tiene la ventaja significativa de que no necesitamos detener el sshd, lo que puede resultar en un bloqueo completo si algo sale mal.
Primero, encontramos el pid del proceso sshd principal. Aquí podemos verlo ejecutando a
pstree -pa|less
.Después de saber que el pid es 633, podemos
strace
hacerlo, siguiendo a sus hijos:El resultado será que todo lo que este sshd, y sus procesos secundarios han hecho, se dividirá en el archivo nombrado
sux
en el directorio local.Luego reproduce el problema.
Tendrá una lista masiva de registro de llamadas del núcleo, que en su mayoría es incomprensible / irrelevante para nosotros, pero no en todas partes. En mi caso, lo importante fue esto:
Fue mentos, que el sshd intentó registrar el mensaje El usuario cica no está permitido porque la cuenta está bloqueada , solo que no pudo, porque el registro no es lo suficientemente detallado para eso. Pero ya sabemos, se rechazó la clave pública porque la cuenta estaba bloqueada.
Todavía no es una solución: ahora necesitamos googlear, lo que significa una "cuenta bloqueada" en el caso del sshd. Lo más probable es que sea algo trivial
/etc/passwd
,/etc/shadow
mágico, pero lo importante está hecho: el problema no es misterioso, sino fácil de depurar / buscar en Google.fuente
En mi caso, tenía todos los permisos correctos e incluso cuando ejecuté ssh con la bandera -vvv no pude entender cuál era el problema.
Entonces generé un nuevo certificado en un host remoto
y copié las claves generadas en la máquina local y agregó una nueva clave pública a ~ / .ssh / Authorizedkeys en el host remoto
El uso de claves generadas desde la conexión remota de máquina host ahora funciona. Entonces, si otras soluciones fallan, esta es otra cosa para probar.
fuente
Mi escenario fue que tengo un servidor NAS en el que creé un
backupbot
usuario, después de la creación de mi cuenta principal, que pudo iniciar sesión para crear inicialmente elbackupbot
usuario. Después de jugarsudo vim /etc/ssh/sshd_config
y crear elbackupbot
usuario,vim
puede crear, al menos en Ubuntu 16.04, y según su~/.vimrc
configuración, un archivo de intercambio que queda de la edición de su sesión de vim/etc/ssh/sshd_config
.Comprueba si
/etc/ssh/.sshd_config.swp
existe : y si lo elimina, reinicia elsshd
demonio:Esto resolvió mágicamente mi problema. Anteriormente había verificado todos mis permisos e incluso las huellas digitales RSA de las claves públicas y privadas. Esto es extraño y probablemente un error con
sshd
, específicamente esta versión:fuente