У меня есть эта команда, которая создает рабочий SSH-туннель для доступа к серверу MySQL:
ssh -f test@remotehost -L 127.0.0.1:3306:mysqlhost:3306 -N
Здесь remotehost доступен только через jump host, который я настроил с помощью 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?
решение1
expect
это фреймворк для обработки ввода/вывода из некоторого типа TCP-соединения. Он может поддерживать ssh, конечно... но он определенно не понимает протокол mysql. Большая часть коммуникации в самом протоколе mysql — это двоичные данные... и в последний раз, когда я проверял expect
, он не мог правильно анализировать двоичные данные. Вам, возможно, лучше написать обертку для mysql
клиента, которая потребует от вас запуска mysql
после подключения по ssh.