在 expect 的帮助下通过 ssh 隧道转发对 mysql 的访问

在 expect 的帮助下通过 ssh 隧道转发对 mysql 的访问

我有这个命令可以创建一个有效的 ssh 隧道来访问 MySQL 服务器:

ssh -f test@remotehost -L 127.0.0.1:3306:mysqlhost:3306 -N

这里,只能通过跳转主机访问远程主机,我在 .ssh/config 中借助 ProxyCommand 配置了该主机:

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

我如何使用期望工具做同样的事情?

答案1

expect是一个用于处理来自某种 TCP 连接的输入/输出的框架。它当然可以支持 ssh……但它肯定不理解 mysql 协议。mysql 协议本身中的大多数通信都是二进制数据……上次我检查时expect,它无法正确解析二进制数据。您最好为客户mysql端编写一个包装器,这将要求您在通过 ssh 连接后启动mysql

相关内容