2013-09-20 5 views
1

Недавно я попытался реализовать библиотеку phpseclib для входа в SFTP-сервер, чтобы перечислить все файлы в каталоге и загрузить их. После их загрузки переместите их на другой каталог на сервере.Неожиданное поведение при использовании phpseclib

Мне не очень повезло ... Итак, следуя коду прямо с their site, но добавил журнал.

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); 

require('Net\SSH2.php'); 
require('Crypt\RSA.php'); 

define('NET_SSH2_LOGGING', 2); 
$ssh = new Net_SSH2('host_name', 'port'); 
$key = new Crypt_RSA(); 
$key->loadKey(file_get_contents('path_to_rsa_file')); 
if (!$ssh->login('username', $key)) { 
    exit('Login Failed'); 
} 

$ssh->exec("pwd"); 

Это приводит к следующей ошибке:

Unable to request pseudo-terminal 

Правда это старая версия, я не знаю точно, какой из них, так что я подумал, что я должен обновить. После стягивания в последней версии с помощью композитора, и работает один и тот же код, как описано выше, я не получаю никаких ошибок, но я получаю это в журналах:

<- NET_SSH2_MSG_USERAUTH_SUCCESS (since last: 0.1395, network: 0.1394s) 

-> NET_SSH2_MSG_CHANNEL_OPEN (since last: 0.0006, network: 0.0005s) 
00000000 00:00:00:07:73:65:73:73:69:6f:6e:00:00:00:00:7f ....session..... 
00000010 ff:ff:ff:00:00:40:00        [email protected] 

<- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (since last: 0.1232, network: 0.1231s) 
00000000 00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:80:00 ................ 

-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0.0008, network: 0.0006s) 
00000000 00:00:00:00:00:00:00:04:65:78:65:63:01:00:00:00 ........exec.... 
00000010 03:70:77:64          .pwd 

<- NET_SSH2_MSG_CHANNEL_FAILURE (since last: 0.123, network: 0.1228s) 
00000000 00:00:00:00          .... 

Любой есть какие-нибудь идеи? Я также попытался использовать класс SFTP, но он не справился с другими проблемами «Обратите внимание: соединение закрыто преждевременно».

Спасибо за помощь!

ответ

0

Похоже, сервер просто не поддерживает exec(). Вы, возможно, лучше удачи с чтения()/запись():

http://phpseclib.sourceforge.net/ssh/examples.html#interactive

Что касается SFTP ... Я должен был бы увидеть журналы, чтобы иметь какие-либо идеи.

+0

Спасибо, neubert. Я попробовал это, прежде чем отправиться на этот маршрут, но он сломался. Я попытаюсь проверить его снова и отправить обратно с конкретной ошибкой. Было что-то в этом не могло начаться интерактивная сессия. – godjen99

+0

Сообщение об ошибке было бы полезно. Также попробуйте последнюю версию Git. Был выполнен недавний фиксатор, в котором read()/write() был выполнен, чтобы работать, даже если PTY не может быть запрошен: https://github.com/phpseclib/phpseclib/commit/df45abcda0b54ecba92775c7d873b1698c6d00d8#diff-82a5983a6daace4acbcc65edf2dfb605 Это коммит, как Я понимаю это, в основном, для получения неясных маршрутизаторов, но это может сработать и для вас. – neubert

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