Сделать его проще простого, на клиентской машине делаем следующее:
ssh -L 3306:remote-server.ru:3306 -f -N login@ssh-server.ru sleep 10
Где -L 3306:127.0.0.1:3306 - это порт на локальной машине, к которому будет подключен удаленный сервис; адрес удаленного сервера (либо это может быть 127.0.0.1 в случае подключения к локальному сервису машины, к которой у нас имеется ssh доступ), к которому нужно подключиться и порт на нем; -f означает переход в фоновый режим сразу после выполнения заданной команды; -N отключает требование выполнять какую-либо команду на удаленной машине; ssh-server.ru - машина, к которой мы имеем доступ по ssh, а login - логин на этой машине.
После выполнения команды она запросит пароль, его нужно ввести (либо настроить вход на сертификатах).
Далее убеждаемся, что ssh слушает необходимый нам порт:
netstat -lnpt | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 4578/ssh
tcp6 0 0 ::1:3306 :::* LISTEN 4578/ssh
Все, теперь пробуем подключиться к MySQL:
telnet 127.0.0.1 3306
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
?
5.0.51a-24+lenny4J)+;)[n8,j/KhL#hd;;Tt
В реальности же мы подключились к удаленной машине!
Теперь можно поставить MySQL клиент и проверить его работу:
apt-get install mysql-client -y
И, вуаля:
mysql --host=127.0.0.1 -uroot -p -e 'show databases;'
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
Остановка туннеля:
ps aux | grep 'ssh -L'
kill пид_нашего_процесса
А как сделать тоже самое без ssh и шифрования? Вот этим софтом:
rinetd - Internet TCP redirection server
socat - multipurpose relay for bidirectional data transfer
Спасибо за статью, дельно - помогло
ReplyDeleteИ мне помогло, спасибо!
ReplyDelete