다음 .ssh/config
구성을 사용합니다.
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 4h
4시간 전에 영구 연결을 닫는 방법은 무엇입니까?
나는 당신이 새로운 연결을 만들 수 있다는 것을 알고 있습니다. 하지만 어떻게 그 연결을 모두 닫을 수 있습니까?
모든 지속적인 연결을 표시하고 개별적으로 처리하는 방법이 있을 수 있지만 찾을 수 없습니다.
답변1
~에서수동:
-O ctl_cmd
기본 프로세스에서 활성 연결 재사용을 제어합니다.-O
옵션이 지정 되면ctl_cmd
인수가 해석되어 기본 프로세스로 전달됩니다. 유효한 명령은 다음과 같습니다: (check
마스터 프로세스가 실행 중인지 확인),forward
(명령을 실행하지 않고 전달 요청),cancel
(전달 취소),exit
(마스터 종료 요청) 및stop
(마스터에게 추가 재사용 요청 수락을 중지하도록 요청).
이전 버전에는 check
및 만 있었지만 exit
귀하의 목적에는 충분합니다.
ssh -O check host.example.com
특정 호스트에 대한 연결뿐만 아니라 모든 연결을 한 번에 삭제하려면 각 소켓을 제어하는 SSH 클라이언트를 나열 fuser /tmp/ssh_mux_*
하거나 나열합니다. 완전히 종료하는 데 lsof /tmp/ssh_mux_*
사용합니다 fuser -HUP -k tmp/ssh_mux_*
(SIGHUP을 신호로 사용하면 클라이언트가 소켓을 적절하게 삭제할 수 있으므로 가장 좋습니다).
답변2
저는 오픈 소스 유틸리티를 작성했습니다.cmc
, ControlMaster 세션 관리:clockwork.com/cmc:
Usage: cmc [ -c HOST | -o HOST | -x HOST ]
cmc [ -L | -l | -O | -X ]
cmc -h
ControlMaster Controller - Eases management of SSH ControlMaster connections
Options:
-h show this help message and exit
-c HOST check HOST ControlMaster connection status (maybe specified more
than once)
-L list ControlMasters defined in SSH_CONFIG
-l list ControlMaster connection sockets in ~/.ssh/ and check their
connection status
-O open all ControlMasters defined in SSH_CONFIG
-o HOST open a ControlMaster session (maybe specified more than once)
-x HOST close ControlMaster session (maybe specified more than once)
-X exit all ControlMaster connections with sockets in ~/.ssh/
Notes:
* Any unopened sockets in ~/.ssh/ are removed with -l and -X
답변3
이것은 제어 호스트의 소켓 파일만 사용하여 나에게 효과적이었습니다.
$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>
예
다음은 원격 서버에 설정한 연결의 예입니다.
$ ssh -o ControlPath=~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$
그리고 연결을 끊습니다:
$ ssh -o ControlPath=~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$
아직 연결되어 있는 경우 강제로 즉시 종료됩니다.
$ ssh -o ControlPath=~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$
모르겠지만, ssh
끝에 추가 매개변수가 필요하기 때문에 버그일 수도 있지만, blah
제가 사용하고 있는 스위치의 맥락에서는 말이 되지 않습니다.
그것 없이는 나에게 이것을 제공합니다 :
$ ssh -o ControlPath=~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port]
[-Q cipher | cipher-auth | mac | kex | key]
[-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] [user@]hostname [command]
버전 정보
OSX$ ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8
센트OS 7.x
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
두 버전 모두에서 추가 더미 인수가 필요하다는 것을 확인했습니다.
인용하다
답변4
반환되는 PID를 실행 하고 fuser /tmp/ssh_mux_blablabla
(필요할 수도 있음 ) 종료할 수 있습니다. 파일을 사용하고 있는 프로세스를 표시합니다. (더 많은 내용이 있으니 확인해 보세요 .)sudo
fuser
man fuser
업데이트: Gilles의 답변을 참조하세요.