Cómo SFTP subir archivos de PHP
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:
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.
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.
Para usar el comando system
usted tiene que:
- Configuración de ssh sin contraseña
- Ejecutar comando como
scp filename1 userid@hostname:filename2
, chequeman scp
. Puede hacer lo mismo consftp
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");
?>