2013-08-26 2 views
1

У меня возникли трудности с пониманием проблемы туннелирования SSH. Проблема заключается в следующем:SSH промежуточному хосту

Локальный компьютер -> Промежуточный сервер -> Сервер MySQL

сервер MySQL можно получить доступ только из промежуточного сервера. У меня есть учетная запись SSH для промежуточного сервера.

Как подключиться к серверу MySQL с локальной машины, в частности, из PHP? Я хочу иметь возможность нормально обращаться с сервером MySQL, чтобы я мог использовать PDO с ним.

Я пробовал:

  1. SSH Открытие (shell_exec ('SSH -L 3307: промежуточный сервер: 3306 имя пользователя @ промежуточного сервера')) Честно говоря, не совсем уверен, если это правильно.

  2. Подключение с использованием mysqli на порт 3307 (чтобы узнать, можно ли установить соединение).

Это не работает, я пробовал буквально все, что я могу придумать.

+0

Не работает, как? Какие ошибки. Вы видите что-нибудь в журналах сервера? Вы видите что-нибудь, если вы tcpdump на промежуточной коробке? Это должно работать нормально. Хотя имейте в виду, что mysql делает некоторые странные вещи, если вы укажете «localhost» в конфигурации клиента вместо IP-адреса. Если используется localhost, он переключается на использование unix-сокета вместо IP. – Zoredache

+0

$ output = shell_exec ('ssh -L 3307: промежуточный сервер: 3306 имя_пользователя @ промежуточный-сервер'); $ db = mysqli_connect ('mysql-host', $ env ['dbuser'], $ env ['dbpassword'], $ env ['dbname'], 3307); 'Он просто отказывается подключиться и, в конечном итоге, отключается , –

+0

Что, черт возьми, ты делаешь? Почему вы должны инициировать соединение SSH с shell_exec? Ваш ** shell_exec даже не вернется, пока соединение ssh не будет закрыто **. В этом случае вы не сможете использовать туннель, потому что он закрыт. – Zoredache

ответ

2

Неверное отображение порта ssh.

синтаксис:

<port for ssh server to listen on>:<host to forward to>:<port to forward to> 

Вы используете:

ssh -L 3307:intermediate-server:3306 [email protected] 

Вы должны использовать:

ssh -L 3307:mysql-server:3306 [email protected] 

Другими словами, промежуточный сервер должен:

  • прослушивает порт 3307
  • вперед для размещения MySQL-сервера
  • на порт 3306

Во-вторых, вы не хотите, чтобы начать SSH туннель изнутри PHP. Вы хотите сделать это отдельно в другом процессе, чтобы он всегда был включен. Либо это, либо внутри PHP, чтобы проверить, отключен ли туннель, и если он отключен и отключен ssh-соединение.

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