Загрузка файлов с помощью SCP с помощью phpseclib
Мне нужно создать 2 функции: одну для загрузки файлов с помощью SFTP, а другую-с помощью SCP. Я использую phpseclib и метод put
; я считаю, что у меня есть функция SFTP.
Теперь я пытаюсь выполнить функцию SCP. Пер http://adomas.eu/phpseclib-for-ssh-and-scp-connections-with-php-for-managing-remote-server-and-data-exchange/, похоже, что следующие вещи мне нужно сделать:
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 и УПП не одно и то же, верно? Является ли тот же код правильным? Если нет, то как мне сделать УПП?
3 ответа:
Да, SCP-это совершенно другой протокол к SFTP.
Phpseclib теперь поддерживает SCP в последних версиях (начиная с версии 0.3.5, выпущенной в июне 2013 года).
В качестве альтернативы используйте функции PHP PECL SSH2 для загрузки/загрузки SCP:
https://secure.php.net/manual/en/ref.ssh2.php
Phpseclib недавно добавил поддержку SCP:
Https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Net/SCP.php
Как отметил Нойберт, phpseclib теперь поддерживает SCP через класс
Net_SCP
.Вы создаете экземпляр объекта
Net_SCP
, передавая ему объектNet_SSH2
илиNet_SSH1
в конструкторе, а затем можете использовать методы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"); } ?>