Как подключиться к imap через ssh в PHP - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь связаться с 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 .....?

...