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