Pregunta

Estoy teniendo problemas para usar PHP para subir archivos SFTP a un servidor remoto. Cuando utilizo el enrollamiento, estoy consiguiendo el error descrito aquí:

SFTP de PHP - sin definir CURLOPT_PROTOCOLS constantes y CURLPROTO_SFTP

También probé phpseclib como se sugiere en:

SFTP desde dentro de PHP

Pero cuando intento phpseclib, me sale estos errores:

Warning: require_once(Math/BigInteger.php) [function.require-once]: failed to open stream: No such file or directory in /home/john/public_html/test/Net/SSH2.php on line 53

Fatal error: require_once() [function.require]: Failed opening required 'Math/BigInteger.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/john/public_html/test/Net/SSH2.php on line 53

A continuación, he intentado usar los comandos del sistema en php como tal, pero no pasó nada:

<?php
echo system('sftp user@ftp.domain.com');
echo system('password');
echo system('put file.csv');
?>

También probé

<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
?>

pero mi servidor php dice ss2_connect no está definido.

He intentado hacer lo siguiente desde el terminal

scp file.csv user@ftp.remote.com
password

Sin embargo, el servidor no permite comando scp. No tengo acceso a una consola para crear las claves ssh.

Todo lo que puedo hacer ahora es SFTP desde el terminal y cargar manualmente. Pero lo que realmente quiero para automatizar este modo un sitio web PHP puede hacer todo esto.

No hay muchos tutoriales sobre cómo subida con SFTP desde PHP. ¿Se debe a que es un mal que hay que hacer? Si es así, ¿qué debería hacer? El servidor que desea cargar en sólo permite conexiones SFTP.

¿Fue útil?

Solución

http://phpseclib.sourceforge.net/documentation/intro.html#intro_usage_correct

Por eso, el directorio raíz de phpseclib tiene que estar en su include_path. Desde esa página:

<?php
  set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

  include('Net/SFTP.php');
?>

Usted debe realmente familiarizarse con este tipo de técnica de incluir - es bastante estándar para las bibliotecas de pera y los Zend

.

Otros consejos

  

pero mi servidor php dice ss2_connect no está definido.

Para este error, debe instalar la extensión ssh2 en PHP de su servidor.

Utilice el incorporado en la biblioteca SSH. Uso de la función SCP será más fácil que iniciar una sesión de SFTP también.

http://www.php.net/manual /en/function.ssh2-scp-send.php

Para usar el comando system usted tiene que:

  1. Configuración de ssh sin contraseña
  2. Ejecutar comando como scp filename1 userid@hostname:filename2, cheque man scp. Puede hacer lo mismo con sftp pero con algunas otras opciones

Puede utilizar la aplicación Pure-PHP de la biblioteca SSHv2.

Estos son algunos ejemplos de cómo utilizar esta biblioteca:

<?php
include 'vendor/autoload.php';
$ssh = new \phpseclib\Net\SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>

Y:

<?php
include 'vendor/autoload.php';
$key = new \phpseclib\Crypt\RSA();
//$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
$ssh = new \phpseclib\Net\SSH2('www.domain.tld');
if (!$ssh->login('username', $key)) {
    exit('Login Failed');
}
echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n");
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top