Я довольно часто использую переадресацию портов для подключения к удаленным базам данных с помощью следующей команды:
ssh -L 3306:127.0.0.1:3306 -N foo@remote.ip
Если я считаю, что проблема связана с этим конкретным сервером, демон mysql привязан к частному IP-адресу (например, 192.168.x.x
) скорее, чем localhost
.
Это единственное, что я обнаружил, глядя на результат при туннелировании с -v -v
параметры.
Пример:
ssh -L 3306:127.0.0.1:3306 -N foo@remote.ip -v -v
И когда я пытаюсь использовать соединение локально, при отладке получаю следующее:
debug1: Connection to port 3306 forwarding to 127.0.0.1 port 3306 requested.
debug2: fd 7 setting TCP_NODELAY
debug2: fd 7 setting O_NONBLOCK
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug2: channel 2: zombie
debug2: channel 2: garbage collecting
debug1: channel 2: free: direct-tcpip: listening port 3306 for 127.0.0.1 port 3306, connect from 127.0.0.1 port 47520 to 127.0.0.1 port 3306, nchannels 3
Я не новичок в использовании переадресации портов и успешно использую его в различных других конфигурациях, но этот сервер, в частности, поставил меня в тупик.
Любая помощь приветствуется.
Редактировать: Стоит отметить, что частный IP-адрес назначается поставщиком облачных услуг и фактически не отображается в Да, на eth0: 1ifconfig/ip
вывод.
Edit2: Вывод ошибки Mysql:
200220 20:08:12 [Warning] IP address '192.168.x.x' could not be resolved: Name or service not known
Edit3:
ifconfig
вывод:
# ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:XX
inet addr:xx.xx.xx.58 Bcast:xx.xx.xx.255 Mask:255.255.255.0
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
inet6 addr: xxxx:xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8786400702 errors:0 dropped:0 overruns:0 frame:0
TX packets:8059726929 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1072200268259 (1.0 TB) TX bytes:47891146981425 (47.8 TB)
eth0:1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.xx.xx Bcast:192.168.255.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:94 errors:0 dropped:0 overruns:0 frame:0
TX packets:94 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5360 (5.3 KB) TX bytes:5360 (5.3 KB)
Вывод mysql.cnf:
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /var/tmpfs
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 192.168.xx.xx
Простое решение - установить (если у вас есть правильная версия), несколько bind-address
es:
bind-address = 192.168.x.x,127.0.0.1
Если нет, вы можете установить
bind-address = 0.0.0.0
НО - Последнее также заставит MySQL прослушивать ваш общедоступный адрес x.x.x.58, что представляет собой значительный риск для безопасности и не рекомендуется. Если необходимо, вы должны предпринять шаги, чтобы гарантировать, что подключения к этому порту заблокированы (iptables, ufw и т. Д.), И протестировать их из удаленного места.