如何使用phpseclib从我的PHP服务器上传文件 - > someOther服务器?

问题描述:

我想从我的PHP服务器上传文件到一些其他的服务器 (我的工作是很不够跛脚阻止SSH流量)如何使用phpseclib从我的PHP服务器上传文件 - > someOther服务器?

无论如何,这里就是我想要做的事: (在: /public_html/manage.php

<?php 

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib/phpseclib'); 
include('Net/SSH2.php'); 
include('Net/SFTP.php'); 

$ssh = new Net_SSH2('SomeServer',22); //starting the ssh connection to localhost 
if (!$ssh->login('root', '12345')) { //if you can't log on... 
    exit('ssh Login Failed'); 
} 
$sftp = new Net_SFTP('SomeServer',22); 
if (!$sftp->login('root', '12345')) { //if you can't log on... 
    exit('sftp Login Failed'); 
} 
echo $sftp->pwd(); 

$output = $sftp->put('/root/1_yum_stuff.sh', '1_yum_stuff.txt'); 
echo $output; 
$output = $ssh->exec('ls -a'); 
//$output = $ssh->exec('./1_yum_stuff.sh & 1>1.txt'); 
echo $output; 
$output = $ssh->exec('pwd'); 
echo $output; 
echo("3rd try!"); 
?> 

的事情是,文件 “1_yum_stuff.txt” 位于我的PHP服务器/的public_html /文件夹,SFTP就不能走动的文件。

无论如何,这是使用phpseclib的sftp模块的正确方法吗?(例如放?)

谢谢:)!

+2

难道是你必须使用put方法的第三个参数,如下所述:http://*.com/a/9578377/1427878这样lib就知道它是你想要上传的本地文件了吗? – CBroe 2013-03-20 09:42:56

我会重写你的代码。例如:

<?php 

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib/phpseclib'); 
include('Net/SSH2.php'); 
include('Net/SFTP.php'); 

$sftp = new Net_SFTP('SomeServer',22); 
if (!$sftp->login('root', '12345')) { //if you can't log on... 
    exit('sftp Login Failed'); 
} 
echo $sftp->pwd(); 

$output = $sftp->put('/root/1_yum_stuff.sh', '1_yum_stuff.txt'); 
echo $output; 
$output = $sftp->exec('ls -a'); 
//$output = $sftp->exec('./1_yum_stuff.sh & 1>1.txt'); 
echo $output; 
$output = $sftp->exec('pwd'); 
echo $output; 
echo("3rd try!"); 
?> 

Net_SFTP扩展了Net_SSH2,因此它继承了所有的方法。此外,CBroe是正确的 - 如果没有第三个参数$sftp->put(),phpseclib会创建/root/1_yum_stuff.sh,其中有15个字节(即strlen("1_yum_stuff.txt"))。