SSH ControlMaster 연결을 수동으로 닫는 방법


63

다음과 같은 .ssh/config구성으로 :

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 4h

4 시간 전에 지속 연결을 닫는 방법은 무엇입니까?

새로운 연결을 만들 수 있지만 닫는 방법은 무엇입니까?

어쩌면 모든 지속 연결을 표시하고 개별적으로 처리하는 방법이 있지만 찾을 수는 없습니다.


4
그것을 죽이지 않지만 단순히 연결을 통해 사용할 수는 없습니다ssh -S none (아마도 이미 도움이 될 수 있습니다).
sr_

아니요, 원격 서버에서 사용자를 제거하려고하는데 연결이 끊어지면 작업을 수행 할 수 없습니다.
Paolo

답변:


81

로부터 수동 :

-O ctl_cmd
활성 연결 멀티플렉싱 마스터 프로세스를 제어합니다. 때 -O옵션이 지정되면, ctl_cmd인수는 해석 마스터 프로세스로 전달됩니다. 유효한 명령은 check (마스터 프로세스가 실행 중인지 확인), forward(명령 실행없이 전달 요청 ), (전달을 cancel취소), exit(마스터를 종료하도록 요청) 및 stop (다중 멀티플렉싱 요청 수신을 중지하도록 마스터 요청)입니다.

이전 버전에는 check및 만 exit있지만 목적에 충분합니다.

ssh -O check host.example.com

당신은 모든 연결을 일거에 (특정 호스트에뿐만 아니라 연결), 삭제하려는 경우 fuser /tmp/ssh_mux_*또는 lsof /tmp/ssh_mux_*각 소켓을 제어하는 SSH 클라이언트를 나열합니다. 사용 fuser -HUP -k tmp/ssh_mux_*(이것은 클라이언트가 제대로 자신의 소켓을 제거 할 수 있습니다로 신호가 최선으로 SIGHUP를 사용하여) 깨끗하게 그들 모두를 죽일.


이것은 훌륭한 답변입니다. 이것은 내가 달성하려는 것에 완벽 합니다. check내가 찾던 것보다 훨씬 유용 exit합니다. : D
엘리엇 트

5
OS X에서는 fuser신호를 보낼 수 없지만 다음과 같이 작동합니다.lsof -Fp /tmp/ssh_mux_* | cut -c 2- | xargs kill -HUP
Ori

11

cmcControlMaster 세션을 관리하기 위한 오픈 소스 유틸리티 인 ClockworkNet / 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

을 실행하고 fuser /tmp/ssh_mux_blablabla(필요한 sudo) 반환하는 PID를 종료 할 수 있습니다 . fuser파일을 사용중인 프로세스를 표시합니다. (그리고 더 많은 것을 확인하십시오 man fuser.)

업데이트 : Gilles의 답변을 확인하십시오. 훨씬 더 자세합니다.


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
CentOS 7.x
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

나는이 두 가지 버전 모두 추가적인 가짜 주장이 필요하다는 것을 확인했다.

참고 문헌

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.