У меня есть эта команда, которая создает рабочий туннель ssh для доступа к серверу MySQL:
ssh -f test@remotehost -L 127.0.0.1:3306:mysqlhost:3306 -N
Здесь удаленный хост доступен только через хост перехода, который я настроил с помощью ProxyCommand в .ssh / config:
Host somehost
Hostname jumphost-name
ForwardAgent yes
ControlPath ~/.ssh/cm-%r@%h:%p
ControlMaster auto
ControlPersist 10m
Host *.example.com
User test
StrictHostKeyChecking no
ProxyCommand ssh -X -4 test@somehost nc %h %p
Как я могу сделать то же самое с помощью инструмента expect?
expect
это структура для обработки ввода / вывода от какого-то TCP-соединения. Конечно, он может поддерживать ssh ... но точно не понимает протокол mysql. Большая часть коммуникации в самом протоколе mysql - это двоичные данные ... и в последний раз, когда я исследовал expect
, он не смог правильно проанализировать двоичные данные. Возможно, вам лучше написать обертку для mysql
клиент, который потребует от вас запуска mysql
после подключения по ssh.