Métodos de autenticación para SSH en PHP

A veces cuando tenemos un script en PHP para conectarnos por SSH a otro servidor nos sale este error Warning: ssh2_auth_password(): Authentication failed for user using password in file on line aunque tengamos correctas nuestro usuario y su clave correspondiente.

Este error en PHP se debe a los métodos de autentificación aceptados por nuestro servidor SSH.

Existen 3 métodos de autentificación para SSH:

  1. publickey
  2. password
  3. keyboard-interactive

Para los script de PHP el servidor debe tener habilitado el método password.

Veamos en qué consisten estos 3 métodos de autentificación aceptados por SSH.

Publickey

Publickey o Autenticación de clave pública es un método más seguro que el intercambio simple de contraseña para la autenticación. La autenticación de clave pública también se puede utilizar para que pueda iniciar sesión en más de una conexión sin tener que presentar una contraseña, incluso si nunca tienes la misma dirección IP (como, por ejemplo, a través de PPP).

La autenticación de clave pública se basa en el cifrado de clave pública (o "cifrado asimétrico clave"). He aquí una idea aproximada de cómo funciona: En primer lugar, generar un par de claves de cifrado, la clave "pública" y la palabra "privada". Los mensajes cifrados con la clave privada sólo pueden ser descifrados por la clave pública, y viceversa. Se mantiene la clave privada en un equipo local, y la clave pública en una lista de equipos autorizados en la máquina remota. Cuando intenta iniciar sesión en el host remoto se le envía un breve mensaje, cifrado con la clave pública. Si usted puede descifrar el mensaje (y enviar una prueba de que lo ha hecho), entonces que pruebe que usted debe poseer la clave privada, y se le permite entrar.

Keyboard Interactive

Es el modo de autenticación más común, se denomina "autenticación interactiva contraseña teclado", llamado así tanto por que por lo general se realiza a través del teclado, y porque openssh toma medidas activas para asegurarse de que la contraseña es, en efecto, escrita de forma interactiva a través del teclado.

Password

Es el método utilizado por los scripts de PHP e implica la autenticación del usuario mediante su usuario y su clave enviados directamente al servidor por un script, es el método menos seguro de todos pero el que garantiza que los scripts remotos se puedan ejecutar.

¿Cómo saber los métodos aceptados por mi servidor SSH?

Mediante una sencilla función de la librería de SSH para PHP se pueden obtener todos los métodos de autenticación aceptados por nuestro servidor remoto, el script es el siguiente:

$sshAcceptedAuthenticationMethods = ssh2_auth_none($connection,$usuario);
foreach ($sshAcceptedAuthenticationMethods as $sshAcceptedAuthenticationMethod)
           echo " $sshAcceptedAuthenticationMethod\n";

Comentarios