2016-12-15 36 views
0

Мы изменили хостинговые компании и там, где ssh2 работал, он больше не работает. У нас включен ssh2 на новом сервере, а также включен allow_url_fopen.SSH2 не работает на новом сервере

Единственное отличие, которое я вижу, это то, что старый сервер использовал PHP 5.4.45, а новый сервер использует PHP 5.6.28.

Однако теперь я получил следующую ошибку. Could not open remote file: ssh2.sftp://Resource id #337/my/directory/file.txt

Вот пример моего кода:

$remote_host = "myhostinfohere"; 
$remote_port = 22; 
$remote_user = "myuser"; 
$remote_pass = "mypassword"; 
$remote_dir = "/my/directory/"; 
$remote_file = 'file.txt'; 

try { 
    $remote_conn = ssh2_connect($remote_host, $remote_port);  
} catch (Exception $e) { 
    die("could not connect to ".$remote_host); 
} 

try { 
    ssh2_auth_password($remote_conn, $remote_user, $remote_pass); 
} catch (Exception $e) { 
    die("Password failed on ".$remote_host); 
} 

$sftp = ssh2_sftp($remote_conn); 

$fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file; 

//If I add this it says it doesn't exists for some reason even though I can see the file if I log in remotely. 
$fileExists = file_exists($fetch_string); 
if (!$fileExists) { 
    die('File does not exist'); 
} 

$stream = fopen($fetch_string, 'r'); 

if (!$stream) { 
    die("Could not open remote file: " . $fetch_string . "\n"); 
} 

Опять же, этот же код работает на старом сервере, но не на новом сервере. Что мне не хватает? Я могу легко скопировать файл на свой сервер с помощью ssh2_scp_recv(), который отлично работает, поэтому я не уверен, что происходит с функцией fopen().

+0

Можете ли вы вручную аутентифицировать использование одного и того же пользователя/прохода на новом сервере? does /my/directory/file.txt существует на новом сервере? Имеет ли он соответствующие разрешения? – ivanivan

+0

Я могу выполнить аутентификацию вручную, и соединение действительно работает. Когда я говорю о новом сервере, я имею в виду, где находится скрипт, который используется для вызова другого сервера. Другой сервер, на котором находится файл, совсем не изменился. Просто сервер, на котором размещен вышеупомянутый скрипт. – MagentoMan

+0

отключите брандмауэр и посмотрите эффект (сервер, на котором есть скрипт SSH). о, вы уже можете успешно подать запрос SSH ?. Если это так, это может быть проблема с разрешением файла, упомянутая @ivanivan. – webDev

ответ

1

Очень вероятно, связано с этой ошибкой в ​​ssh2 расширения - который я только недавно столкнулся:

https://bugs.php.net/bug.php?id=71376

И нарушающий ssh2 функции обновления в Wordpress:

https://core.trac.wordpress.org/ticket/35517

+0

Очень интересно. Спасибо! Я этого не видел до сих пор. Позвольте мне еще немного выкопать. – MagentoMan

+0

Я просто проверил, что могу использовать 'ssh2_scp_recv()' для копирования файла на мой сервер, хотя я предпочитаю использовать 'fopen()'. Есть идеи? – MagentoMan

3

После нескольких часов от попыток разных вариантов я, наконец, столкнулся с этим. http://php.net/manual/en/wrappers.ssh2.php

Я изменил это: $fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file;

Для этого: $fetch_string = "ssh2.sftp://user:[email protected]" . $remote_dir . $remote_file;

и вуаля функция fopen() начал работать.

Я не уверен, что в новых версиях, если они просто не одобряют функцию ssh2_sftp(), или если это просто ошибка, подобная @billynoah, потому что вышеупомянутая ссылка даже не использовала ее.

Я знаю, сколько боли было так, надеюсь, это поможет кому-то еще!

+0

Это довольно круто - мне придется дать ему завихрение в установке php7/wordpress и посмотреть, помогает ли это. – billynoah

0

Убедитесь, что служба SFTP включена на сервере (Powershell)

3

Здесь $ fetch_string = "ssh2.sftp: // $ SFTP". $ remote_dir. $ Remote_file;

использование intval ($ SFTP) вместо $ SFTP

+1

Это решение работает для меня. Благодаря https://bugs.php.net/bug.php?id=73597 – Chaitenya

1

Я также столкнулся с той же проблемой, и я изо всех сил много. Теперь для меня это исправлено.
Это то, что я сделал:
Моя версия PHP: 5.6.25
Скачал последнюю php_ssh2.dll от: https://phpfashion.com/php-ssh2-dll-for-php-5-6-and-7-0 (php_ssh2.dll для PHP 5.6 x64)
Заменил php_ssh2.dll в следующее местоположение: «C: \ wamp64 \ bin \ php \ php5.6.25 \ ext" & перезапустил все мои услуги.