以下の内容があります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
2つのファイルを作成します。
# 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
答え1
私の実験によると、人々はopenssh
仕事をかなり複雑にすることに決めたようです。次のラッパースクリプトはいくつかのインスピレーションを与えることができます。
#! /bin/sh --
HNAME=${1:?## Err: Please specify the host name}
CONFD="/opt/ssh"
SOCKETS="${CONFD}/soc"
ssh -fTNF "${CONFD}/config" "${HNAME}" && {
ssh -O forward -S "${SOCKETS}/${HNAME}.socket" -TNL "${SOCKETS}/${HNAME}_mysql.socket:127.0.0.1:3306" "${HNAME}" &&\
ssh -O check -S "${SOCKETS}/${HNAME}.socket" "${HNAME}"
} || exit 1