Вот настройка сети:
Машина A (мой ПК) SSH 22 => Машина B (Linode с корневым доступом) SSH 21343 => Машина C (сервер MySQL).
Я хочу перенаправить порт 3306 с C через B на A, поэтому я могу использовать SQL Workbench на A для выполнения команд на C.
Обратите внимание, что C доступен только через SSH-порт 21343 и только из B (мы не можем изменить брандмауэр на C, чтобы открывать больше портов, но мы можем изменить его настройки SSH).
Это возможно? Я читал о туннелях и ProxyCommand. Но мне нужен простой пошаговый пример.
На всех машинах стоит дебиан Ленни.
На машине А:
ssh -L 3307:C:3306 user@B
Это выделило сокет для прослушивания порта 3307 на A. И всякий раз, когда к этому порту устанавливается соединение, оно перенаправляется через туннель ssh на C: 3306.
Затем вы можете подключиться к серверу MySQL на C с помощью:
mysql -u <user> -p -h 127.0.0.1 -P 3307
(127.0.0.1 для подключения через TCP / IP вместо сокета)
Нет, я не могу подключиться к MySQL на C из B. Только SSH, прослушивающий 21343, открыт для B.
Если брандмауэр на C позволяет подключаться только с localhost, что-то вроде этого:
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
так что, AFAIK, нет способа сделать это. Если вы попытаетесь подключиться через туннель ssh, вы получите следующие ошибки:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
~ / .ssh / config на машине A выглядит так:
Host C
ProxyCommand ssh -q B nc %h %p
LocalForward 3306 localhost:3306
Port 21343
Host B
Hostname X.X.X.X (ip of host B)
Затем на A ssh C
и в другом терминале на пробеге mysql -h localhost
Это подключит вас к mysql на C через порт ssh вперед.
Вы можете подумать о чем-то вроде http://sourceforge.net/projects/portfwd/ на машине B, возможно, прослушивание чего-то другого, кроме TCP 22, поэтому SSH может оставаться на своем стандартном порту для машины B.