2012-06-13 6 views
5

En PHP5.3.3 (en CentOS y apache2) estoy intentando conectarme a un SFTP a través de un script php. El código toma las claves y detalles del servidor del constructorPHP ssh2_auth_pubkey_file(): Falló la autenticación usando la clave pública: datos clave no válidos, no codificada en base64

function __construct(){ 
    $this->host  = 'servername.loc'; 
    $this->port  = SFTP_PORT; 
    $this->auth_user = 'username'; 
    $this->auth_pub  = '/data/home/username/.ssh/id_rsa.pub'; 
    $this->auth_priv = '/data/home/username/.ssh/id_rsa'; 
    $this->auth_pass = null; 
    $this->connection = null; 
} 

y utiliza esos detalles para crear la conexión.

private function connect(){ 
    if (!($this->connection = ssh2_connect($this->host, $this->port))) { 
     $this->response = array('code' => "20", 
           "message" => "Error connecting to SFTP server."); 
     return false; 
    } 
    if (!ssh2_auth_pubkey_file($this->connection, $this->auth_user, $this->auth_pub, 
           $this->auth_priv, $this->auth_pass)) { 
     $this->response = array('code' => "40", 
           "message" => "Error authenticating to SFTP server with key."); 
     $this->disconnect(); 
     return false; 
    } 
} 

El resultado que obtiene es un error en la llamada a ssh2_auth_pubkey_file().

error es:

"* ssh2_auth_pubkey_file(): Error de autenticación de nombre de usuario utilizando la clave pública: datos claves no válidas, no codificado en base64 *"

No hay ninguna contraseña en el clave, y puedo usar estas teclas a través de CLI ssh para conectarme al servidor manualmente. Estoy perplejo. ¿Debo codificar las claves de alguna manera? Sugerencias?

Gracias de antemano. Gary C, también conocido como Unkul Munki

+0

Bueno, según parece, encuentro la respuesta después de hacer la pregunta abiertamente. Encontré esto en otro sitio con comentarios dev. ** d23d23 en gmail dot com dijo: ** * "La clave pública debe estar en una línea comenzando con el tipo de clave, 1 espacio y seguido por los datos clave (sin líneas nuevas) y no seguido de comentarios. una limitación de libssh2, por lo que debe eliminar cualquier exceso de datos del archivo después de crearlo con las herramientas de generación de claves."* Así que, aunque usé openssl para crear la clave privada y la clave pública, tuve que editarlo para ponerlo todo en una línea con el tipo de clave como se indica arriba. Gracias. Unkul Munki –

Respuesta

4

Bueno, parece que, después de hacer la pregunta abiertamente, encuentro la respuesta. Encontré esto en otro sitio con comentarios dev.

d23d23 en gmail punto com dijo:. "La clave pública debe estar en una línea que comienza con el tipo de clave, 1 espacio y seguido por el keyData (sin saltos de línea) y no seguida de comentarios Esta es una limitación de libssh2, así que elimine cualquier exceso de datos del archivo después de crearlo con las herramientas de generación de claves ".

Así que, aunque utilicé openssl para crear la clave privada y la clave pública, tuve que editarlo para ponerlo todo en una línea con el tipo de clave como se indicó anteriormente. Gracias.

+0

Por cierto. Todo funciona ahora. connections, uploads, mkdir, the works. –

5

El requisito previo que mencionas, es decir, el archivo pubkey no tiene ningún comentario y ni siquiera tiene una nueva línea final es incorrecto (y la nueva línea es absurda cuando lo piensas bien).

Si su script falla, tiene problemas. antes tropezó con el error ssh2 que hace que ssh2 falle cuando se compila wuth libgcrypt en lugar de openssl. La solución es crear una copia PEM formato del archivo de clave privada en formato PEM con openssl:

~/.ssh> openssl rsa -in id_rsa -out id_rsa.pem 

Luego, en ssh2_auth_pubkey_file() en su script PHP, utilice id_rsa.pem como archivo privkey en lugar de id_rsa, y omite la frase de contraseña. Eso debería hacer que funcione.

+0

Gracias por este consejo. Perdí 2 horas tratando de resolver esta broma. – jontyc

+0

Después de buscar por todas partes, este enfoque openssl para .pem es lo único que funcionó. Por alguna razón directamente ssh-keygen cambio de formato a ossh estaba fallando. Muchas gracias. Si pudiera votarte cien veces, lo haría. – Ian

+0

Gracias. Eso solucionó mi problema hoy. – user1732055

Cuestiones relacionadas