2013-04-16 3 views
2

Мне нужно создать 2 функции: один для загрузки файлов с использованием SFTP, а другой с помощью SCP. Я использую phpseclib и метод put; Я считаю, что у меня есть функция SFTP.Загрузка файлов с использованием SCP с использованием phpseclib

Теперь я пытаюсь выполнить функцию SCP. Per 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 и SCP не то же самое, не так ли? Правилен ли тот же код? Если нет, то как мне сделать SCP?

ответ

1

Да, SCP - это совершенно другой протокол для SFTP.

Теперь phpseclib поддерживает SCP в последних версиях (начиная с версии 0.3.5, выпущенной в июне 2013 года).

В качестве альтернативы, используйте функции PHP PECL SSH2 для загрузки SCP/скачать:
https://secure.php.net/manual/en/ref.ssh2.php

+1

Таким образом, ссылка на сайт неверна. Он выполнял SFTP (как и я), но называл его SCP. Я использовал phpseclib, чтобы избежать необходимости настраивать функциональность SSH2 (phpseclib говорит, что это чистая реализация PHP). Любые альтернативные решения для SCP? – snoopy76

+0

Извините, я не понимаю, что вы подразумеваете под «Это сделал SFTP (как и я), но назвал его SCP». Где вы хотите избежать настройки SSH2? На стороне клиента? IMO, вам не нужно ничего настраивать на стороне клиента, даже с функциями PHP PECL (ну, вам нужно установить пакет PECL, но это похоже на phpseclib). Альтернатива SCP: Это было ваше требование использовать SCP/SFTP. Если вы хотите узнать другие варианты, дайте нам свои ограничения. –

+0

Ничего себе. Он спрашивает о SCP, но в коде используется SFTP. Прочитайте одну строку CODE, вы увидите «В случае SCP», и следующая строка сообщает вам, как sftp. Во всяком случае, Neubert обновил вас :) На самом деле phpseclib - лучший способ сделать эти вещи ssh с PHP и уникальный способ, когда у вас нет доступа к ssh. – erm3nda

2

Как отмечает Нойберт, 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"); 
    } 

?> 
Смежные вопросы