SSH ControlMaster 연결을 수동으로 닫는(종료) 방법

SSH ControlMaster 연결을 수동으로 닫는(종료) 방법

다음 .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(필요할 수도 있음 ) 종료할 수 있습니다. 파일을 사용하고 있는 프로세스를 표시합니다. (더 많은 내용이 있으니 확인해 보세요 .)sudofuserman fuser

업데이트: Gilles의 답변을 참조하세요.

관련 정보