使用phpseclib使用SCP上载文件

使用phpseclib使用SCP上载文件,php,sftp,scp,phpseclib,Php,Sftp,Scp,Phpseclib,我需要创建两个函数:一个使用SFTP上传文件,另一个使用SCP。我正在使用和put方法;我相信我已经完成了SFTP功能 现在,我正在尝试做SCP函数。Per,似乎我需要做以下几件事: In case of SCP: 1. Including the needed file: include('/path/to/needed/file/Net/SFTP.php'); 2. Creating object and making connection: $sftp = new Net_SFTP('ho

我需要创建两个函数:一个使用SFTP上传文件,另一个使用SCP。我正在使用和
put
方法;我相信我已经完成了SFTP功能

现在,我正在尝试做SCP函数。Per,似乎我需要做以下几件事:

In case of SCP:
1. Including the needed file: include('/path/to/needed/file/Net/SFTP.php');
2. Creating object and making connection:
$sftp = new Net_SFTP('host');
if (!$sftp->login('user', 'password')) { exit('Login Failed'); }
3. Reading contents of a file: $contents=$sftp->get('/file/on/remote/host.txt');
4. Copying file over sftp with php from remote to local host: $sftp->get('/file/on/remote/host.txt', '/file/on/local/host.txt');
5. Copying file over sftp with php from local to remote host: $sftp->put('/file/on/remote/host.txt', '/file/on/local/host.txt');
6. Writing contents to remote file: $sftp->get('/file/on/remote/host.txt', 'contents to write');

我需要做#5,但看起来就像我为SFTP做的一样。SFTP和SCP不一样,对吧?相同的代码正确吗?如果没有,如何执行SCP?

是的,SCP与SFTP的协议完全不同

phpseclib现在在最新版本中支持SCP(自2013年6月发布的0.3.5版起)

或者,使用PHP PECL SSH2函数进行SCP上载/下载:

phpseclib最近添加了SCP支持:


正如neubert所指出的,phpseclib现在通过
Net\u SCP
类获得了SCP支持

通过在构造函数中传递
Net\u SSH2
Net\u SSH1
对象来实例化
Net\u SCP
对象,然后可以使用
get()
put()
方法通过SCP下载或上载文件

下面是一个简单的示例脚本,演示了如何将文件从本地计算机SCPing到远程AWS实例

<?php

    set_include_path(get_include_path() .
                     PATH_SEPARATOR .
                     '/home/mark/phpseclib');

    require_once('Crypt/RSA.php');
    require_once('Net/SSH2.php');
    require_once('Net/SCP.php');

    $key = new Crypt_RSA();
    if (!$key->loadKey(file_get_contents('my_aws_key.pem')))
    {
        throw new Exception("Failed to load key");
    }

    $ssh = new Net_SSH2('54.72.223.123');
    if (!$ssh->login('ubuntu', $key))
    {
        throw new Exception("Failed to login");
    }

    $scp = new Net_SCP($ssh);
    if (!$scp->put('my_remote_file_name',
                   'my_local_file_name',
                   NET_SCP_LOCAL_FILE))
    {
        throw new Exception("Failed to send file");
    }

?>


因此引用的站点是错误的。它做了SFTP(和我一样),但称之为SCP。我使用phpseclib是为了避免配置SSH2功能(phpseclib说这是一个纯PHP实现)。SCP有其他解决方案吗?对不起,我不明白你所说的“它做了SFTP(和我一样),但称之为SCP”是什么意思。您希望在哪里避免配置SSH2?在客户端?在我看来,您不需要在客户端配置任何东西,甚至不需要使用PHP PECL函数(您需要安装PECL包,但这与phpseclib类似)。SCP的替代方案:您需要使用SCP/SFTP。如果你想知道其他的选择,给我们你的限制。哇。它询问SCP,但发布的代码使用的是SFTP。阅读代码的第一行,你们会看到“在SCP的情况下”,下一行告诉你们如何使用sftp。不管怎样,neubert已经更新了您:)事实上,phpseclib是从PHP执行ssh操作的最佳方式,并且是在您没有ssh访问权限时的独特方式。