다음과 같은 내용이 있습니다 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
답변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