No puede ssh incluso con la clave pública agregada a claves_autorizadas

16

Tengo una gota Digital Ocean a la que estoy tratando de darme acceso ssh. No estoy seguro de lo que se le hizo anteriormente. Intenté agregar mi clave pública a través de la interfaz de usuario de Digital Ocean. Eso no funcionó, seguí obteniendo permission denied (publickey).

Accedí al servidor a través de la consola digital del océano y agregué manualmente mi clave pública /root/.ssh/authorized_keys. Entonces traté de usar ssh ssh [email protected]. Eso no funcionó (permiso denegado).

Así que intenté agregar un nuevo usuario, creé el /home/me/.sshdirectorio con permisos 700en el .sshdirectorio y 600en el authorized_keysarchivo. Entonces lo intenté ssh [email protected]. Eso tampoco funcionó.

Reiniciar el demonio ssh tampoco cambia nada.

¿Qué me estoy perdiendo?

Editar:

Aquí está la salida ssh detallada.

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

Edición 2:

LogLevel DEBUG3 salida:

ingrese la descripción de la imagen aquí

Jeff
fuente
Publique el registro detallado de la conexión, su contenido de sshd_config y los posibles errores relacionados con ssh en el registro del servidor.
Jakuje
@Jakuje He agregado el resultado ... No noté tu comentario antes.
Jeff
La clave es rechazada. Verifique el registro del servidor para detectar posibles problemas (posiblemente con LogLevel DEBUG3in sshd_config). Sospecho que estos son problemas de permisos, pero puede haber varias razones para esto.
Jakuje
Dice[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff
¿Cuáles son los permisos del archivo autorizado_claves? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Para el registro detallado del servidor, modifique el archivo mencionado anteriormente, reinicie el servicio ssh, conéctese nuevamente y publique el registro (también debe estar en auth.log.)
Jakuje

Respuestas:

20

Configuración del cliente

Preparar ~/.ssh/config

Configurar entradas de host para sshes realmente fácil y le ahorrará muchos problemas. Aquí hay un ejemplo:

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

En este ejemplo, configuramos digitaloceanbox y githuby github.compor lo que podemos hacer los siguientes comandos:

  1. ssh github
  2. ssh digitaloceanbox

Si queremos iniciar sesión como un usuario diferente al especificado en el archivo de configuración, simplemente ponemos user@al principio:

  • ssh user@digitaloceanbox

Generando sshclaves

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

Tenga en cuenta que he especificado la ruta completa de la clave privada que quiero generar cuando se lo solicite ssh-keygen. También he definido el comentario ( -C) que me permite identificar fácilmente las claves en máquinas remotas.

Esto creará dos archivos:

  1. .ssh/digitalocean-rsa
    • Clave privada . Nunca compartas esto .
  2. .ssh/digitalocean-rsa.pub
    • Llave pública. Esto es lo que almacena en el servidor para autenticar.

Cuando proporcionas tu ssh clave, asegúrese de que sea.pub versión! Cuando agregue a su ~/.ssh/config, asegúrese de agregar la clave privada correcta que coincida con la clave pública que agregó al sistema.


Configuración del servidor

La mayoría de las instalaciones vendrán con la autenticación de clave pública habilitada. Sin embargo, si comienzas a hacer las cosas de todas maneras, es posible que tengas algunos problemas. En donde el OP está en su problema, recomiendo que el OP elimine el/root/.ssh/ directorio para comenzar de nuevo.

No se recomienda que utilice sshpara acceder al usuario root en el sistema remoto. Se recomienda sshingresar a otro usuario y luego escalar a raíz utilizando su contraseña (sudo su - ).

Agregar claves al host usando ssh-copy-id

Independientemente de si decide crear otro usuario y utilizarlo sshcomo ese usuario, o el usuario raíz, la siguiente es la forma recomendada de colocar sshclaves en un servidor:

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

Esto permite sshd crear el directorio y los archivos necesarios con los permisos necesarios. Esto significa que no hay ninguna posibilidad de que arruines los permisos o necesites recordar los detalles. Simplemente use la herramienta para cargar las claves.

Deshabilitar autenticación de contraseña

Dicho esto, una vez que haya ingresado la clave y haya verificado que puede conectarse utilizando las claves, se recomienda deshabilitar la autenticación de contraseña sshdy reiniciar el servicio:

  1. Editar /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

¿Qué pasa con los nuevos usuarios?

Si deshabilita la autenticación de contraseña, ¿cómo puede introducir nuevos usuarios? Una forma es agregar archivos de plantilla al /etc/skeldirectorio. Una vez que haya ingresado a un usuario, haga lo siguiente:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. Edite todos los archivos encontrados /etc/skel/.ssh/para que queden en blanco, a menos que desee teclear automáticamente para cada usuario recién creado.

Cuando cree nuevos usuarios con sudo useradd -m newuser, ese usuario tendrá el.ssh/authorized_keys , que puede editar y tendrá los permisos adecuados.

Depuración

Puede ver el sshdarchivo de registro para ver por qué las conexiones fallan o se rechazan:

  1. sudo tail -f /var/log/auth.log

Mientras ejecuta este comando, use otra terminal para intentar iniciar sesión. Muchas veces los mensajes proporcionados son lo suficientemente buenos como para ayudar a detectar el problema o encontrar una solución en línea.

earthmeLon
fuente
1
El paso de depuración funcionó para mí. El directorio raíz tenía los permisos incorrectos (tenía que ser 700)
naisanza
12

Ssh es bastante exigente con los permisos de propiedad, archivos y directorios con claves ssh.

~ / .ssh / debe ser propiedad del propietario y tener 700 permisos. ~ / .ssh / optional_keys deben ser propiedad del propietario y tener 600 permisos.

Entonces, para root:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

Para el usuario yo:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

Y luego inténtalo de nuevo.

Por supuesto, también debe verificar / etc / ssh / sshd_config si la raíz está autorizada a iniciar sesión, o solo con las teclas ssh.

Si usted tiene :

PasswordAuthentication no

entonces puedes configurar:

PermitRootLogin yes

Y luego reinicie sshd:

/etc/init.d/sshd restart

e intenta de nuevo.

Tenga en cuenta que con ssh, el demonio sshd se puede reiniciar incluso cuando se utiliza una sesión ssh para esto. Openssh está diseñado para lidiar con eso.

Mirando los fragmentos de tu archivo de registro cargado, ¿parece que estás usando MacOSX? ¿Podría crear una nueva clave ssh allí?

Además, descubrí en el pasado que cuando tengo más de una clave ssh privada en mi computadora local para mi usuario, esto a veces hace que sea imposible iniciar sesión de forma remota con ssh. Ayudó mucho hacer entradas en la computadora local en el archivo ~ / .ssh / config, para resolver esto. Por ejemplo :

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

Después de eso, intente con la línea de comando en su computadora local:

ssh -v my-vps

Al usar las teclas ssh, así como sin teclas ssh para algunos otros inicios de sesión, puede, además de las entradas con teclas ssh, también definir un inicio de sesión ssh sin uso de la tecla ssh en el archivo ~ / ssh / config, por ejemplo:

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

Esto funciona bien para mi. También es posible definir qué tecla usar en la línea de comando:

ssh -v [email protected] -i .ssh/id_rsa

Esto podría facilitar la depuración, y en la línea de comandos esto siempre debería funcionar en la computadora local.

albert j
fuente
Además de esta solución, también tuve que cambiar los permisos de mi carpeta de inicio para que el SSH funcionara:sudo chmod 700 /home/me/
Rg90
Eres un salvavidas, @ albert-j! La IdentityFilelínea me sacó de una rutina de una hora.
zev
4

Verifique la configuración del demonio ssh (debe estar en /etc/ssh/sshd_config) y verifique si:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

También verifique el archivo de configuración para ver si se han configurado AllowUsers o AllowGroups , ya que actúan como listas blancas para usuarios y grupos respectivamente.

Además, noté que está intentando agregar una clave al usuario root. De manera predeterminada, el inicio de sesión raíz debe estar deshabilitado, pero también puede cambiarlo a través del campo PermitRootLogin .

TLin
fuente
Ninguno de estos está funcionando: / Todavía tengoPermission denied (publickey)
Jeff
3

Según los registros que ha vinculado, creo que tiene problemas en el lado del cliente al no encontrar el archivo de clave privada .

  • Primero verifique que el archivo ~/.ssh/id_rsaexiste en su máquina local, y es el correcto _ (si tiene más).

  • Verifique los .sshpermisos de la carpeta (debe ser drwx------, si no se ejecuta sudo chmod 700 ~/.ssh) y su contenido (debe ser -rw-------, si no se ejecuta sudo chmod 600 ~/.ssh/*) . Aplique los mismos permisos para la máquina remota también.

Además, puede intentar forzar el uso de su clave privada deseada , dándole directamente sshel -iparámetro.

Puede obtener más información en la página de manual de ssh (ejecutar man sshen su terminal) .

También tenga en cuenta que si desea iniciar sesión como rootusuario, su cuenta raíz debe estar habilitada antes de iniciar sesión, creando una contraseña para ella sudo passwd rooto su herramienta de administración del servidor (Ubutntu tiene la cuenta raíz deshabilitada de forma predeterminada) . Puedes obtener más información en Ubuntu Wiki .

Espero eso ayude.

dgonzalez
fuente
3

Terminé reinstalando openssh-server que solucionó el problema. Las soluciones dadas son geniales, pero no funcionaron para mí. No tengo idea de qué estaba causando el problema, pero creo que el desarrollador anterior pudo haber alterado la configuración y estropeado las cosas bastante mal.

Dudo que haya alguien con un problema tan específico como el mío. Sin embargo, si tiene una gota de Digital Ocean, no puede obtener acceso SSH y ninguna de las soluciones dadas funciona, reinstale el servidor SSH ejecutando estos comandos a través de la consola Digital Ocean. Tenga en cuenta que este es un proceso destructivo y borrará los archivos de configuración antiguos/etc/ssh/ (no su .sshdirectorio).

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

Suponiendo que su cliente / claves ssh estén en orden, debería poder SSH en su servidor.

Jeff
fuente
1

Este problema apareció para mí usando la imagen de Debian en Digital Ocean. De alguna manera, durante el breve proceso de configuración, probablemente cuando configuré la contraseña de root, el propietario /rootfue cambiado al usuario debian. Vi lo siguiente en /var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

Simplemente ejecutando chown root:root -R /root resolvió el problema.

HTH

Sean Brady
fuente
0

Acabo de tener un problema muy similar. Esto funcionó para mí: agregue esta línea a / etc / ssh / sshd_config

AuthorizedKeysFile %h/.ssh/authorized_keys 

Luego reinicie ssh de la manera habitual.

bodycheetah
fuente