@mpontes '/ @ javier의 또 다른 수정은
ssh user@remoteserver -L 9999:localhost:9999 'socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock& pid=$!; trap "kill $pid" 0; while echo -ne " \b"; do sleep 5; done'
청소기
ssh user@remoteserver -L 9999:localhost:9999 '
socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock&
pid=$!
trap "kill $pid" 0
while echo -ne " \b"; do
sleep 5
done
'
찬성
- CentOS 7과 같은 6.7 이전의 openssh에서 작동
- 원격 서버로 다시 ssh하지 않고 ssh 종료시 socat을 종료합니다.
- 비공개 ssh 로그인 허용 (ijk 솔루션과 달리)
특색
- 이
-f
옵션을 사용하지 않기 때문에 공개 키를 사용하여 백그라운드에서 실행 &
하거나 대화식으로 로그인하고 Ctrl + Z를 사용 $!
하여 pid를 저장할 수 있습니다.
단점
-f
그런 식으로 ssh의 pid를 잃어 버리기 때문에 ssh 옵션을 쉽게 사용할 수 없습니다 . 이 방법은 포 그라운드에서 실행하고 Ctrl + C를 사용하여 종료합니다.
- 훨씬 더 복잡한
설명
socat ...&
-원격 서버에서 백그라운드에서 socat을 실행하십시오.
pid=$!
-pid를 저장
trap kill\ $pid 0
kill $pid
-bash 종료시 실행
while :; sleep...
-무한 루프에 앉아
echo -ne \ \b
-에코 공간과 백 스페이스가 뒤 따릅니다. ssh가 연결 해제되는 즉시 실패합니다. A를 sleep 5
,이 수단을 그 socat
ssh를 5 초까지 실행할 수 있습니다
참고 : 실제로 고정 표시기, 포트 사용하여 테스트 2375
, /var/run/docker.sock
및 환경 변수를 DOCKER_HOST='tcp://localhost:2375'
하지만, MySQL은 모두 같은 작동한다
최신 정보
사용 SSH 제어하는 것은 , 당신이 사용할 수있는 -f
단지 다음과 같은 플래그를 추가, 내 방식을 사용하여 플래그를
-f -o ControlPath=~/.ssh/%C -o ControlMaster=auto
그리고 당신은 얻을 것이다
ssh -f -o ControlPath=~/.ssh/%C -o ControlMaster=auto user@remoteserver -L 9999:localhost:9999 'set -m; socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock& pid=$!; trap "kill $pid" 0; while echo -ne " \b"; do sleep 5; done'
이제 다음을 사용하여 모든 제어 된 세션을 종료 할 수 있습니다.
ssh -o ControlPath=~/.ssh/%C -O exit remoteserver
-o
옵션은 저장할 수 있습니다 .ssh/config
파일 또는 대신 -S를 사용할 수 있습니다 (하지만 당신은 필요 여전히거야 -o ControlMaster
)