具有以下内容ssh_config
:
Match all
IdentityFile /opt/ssh/id_rsa
StrictHostKeyChecking no
ServerAliveInterval 30
ServerAliveCountMax 3
ControlMaster auto
ControlPersist 300
StreamLocalBindMask 0111
StreamLocalBindUnlink yes
ExitOnForwardFailure yes
Compression yes
BatchMode yes
Host example
LocalForward /opt/ssh/soc/%n_mysql.socket 127.0.0.1:3306
ControlPath /opt/ssh/soc/%n.socket
HostName example.com
User user
Port 22
创建了两个unix-socket
文件:
# ls -1 /opt/ssh/soc
example.socket
%n_mysql.socket
显然LocalForward
指令不喜欢令牌......
我想知道为什么以及是否有其他方法可以实现这一目标?
我看到它LocalCommand
接受以下标记:%%
, %C
, %d
, %h
, %i
, %l
, %n
, %p
, %r
, %T
, 和%u
. 它可以以某种方式用于实现我想要的吗?
我尝试了以下配置,但它只创建ctrl
套接字,而不是那个mysql
。
Host example
PermitLocalCommand yes
LocalCommand ssh -F /opt/ssh/config -S /opt/ssh/sockets/%n.socket -TNL /opt/ssh/sockets/%n_mysql.socket:127.0.0.1:3306 -p %p -l %u %h
ControlPath /opt/ssh/soc/%n.socket
HostName example.com
User user
Port 22
根据我的实验,
openssh
人们似乎决定让事情变得相当复杂。以下包装脚本可能会提供一些启发: