Я пытаюсь связаться с imap через ssh в PHP.Следующий код демонстрирует, как я подключаюсь к imap через ssh:
$ssh_conn = ssh2_connect($sshIP, $sshPORT);
ssh2_auth_password($ssh_conn, $sshUSERNAME, $sshPASSWORD);
$stream = ssh2_tunnel($c, $imapSERVER, $imapPORT);
И, кажется, все в порядке, я подключаюсь к imap через ssh.Нет ошибок, и у меня есть ресурс в $ stream.
Затем я пытаюсь записать команду LOGIN в поток, например:
fwrite($stream, "A1 LOGIN username password\r\n");
Проблема в том, что сервер ничего не отвечает.
Я пытаюсь получить ответ, подобный следующему:
while (true) {
echo fread($stream, 4096);
}
Не беспокойтесь о кодах для записи и чтения данных на сервер imap, это я написал только для примера.Это не важно здесь.Проблема в том, что я не получаю никакого ответа от IMAP.Всегда пустая строка.
Я уверен, что методы записи и чтения работают хорошо, потому что я использую большую библиотеку HORDE https://dev.horde.org/imap_client/,, а когда я использую поток SOCKS5 или HTTPS - он работает хорошо!
Также я пробовал разные SSH-серверы - не удалось.
Итак, где может быть проблема?Также может быть полезна следующая информация: я получаю другую информацию при использовании stream_get_meta_data () для потоков ssh и socks5.
SSH:
array(8) {
["exit_status"]=>
int(0)
["timed_out"]=>
bool(false)
["blocked"]=>
bool(true)
["eof"]=>
bool(false)
["stream_type"]=>
string(12) "SSH2 Channel"
["mode"]=>
string(2) "r+"
["unread_bytes"]=>
int(0)
["seekable"]=>
bool(false)
}
SOCKS5:
array(8) {
["crypto"]=>
array(4) {
["protocol"]=>
string(7) "TLSv1.2"
["cipher_name"]=>
string(27) "ECDHE-RSA-AES128-GCM-SHA256"
["cipher_bits"]=>
int(128)
["cipher_version"]=>
string(7) "TLSv1.2"
}
["timed_out"]=>
bool(false)
["blocked"]=>
bool(true)
["eof"]=>
bool(false)
["stream_type"]=>
string(14) "tcp_socket/ssl"
["mode"]=>
string(2) "r+"
["unread_bytes"]=>
int(0)
["seekable"]=>
bool(false)
}
Также я уведомил важную вещь, это работает, если я использую порт 143 для сервера imap.И не работает, если я использую порт 993. Но 143 не SSL.Поэтому я даже не могу использовать команду LOGIN.Я думаю, что вызывает прикосновения с ССЛ.Но как установить ssl для туннеля ssh .....?