lsof 또는 퓨저를 사용하지 않고 OpenSSH 제어 기본 프로세스를 종료하는 방법은 무엇입니까?

lsof 또는 퓨저를 사용하지 않고 OpenSSH 제어 기본 프로세스를 종료하는 방법은 무엇입니까?

더 직접적으로 나가는 방법이 있나요?SSH 열기lsof프로그램 이나 프로그램에 의존하지 않고 메인 프로세스를 제어하고 소켓 파일을 삭제합니다.fuser 그리고전혀 모른다목적지허용된 답변에 표시된 호스트(연결 세부정보)질문? 나는 다음과 같은 것을 생각했습니다.

$ ssh -O exit -S ~/.ssh/7eb92b0827f3e8e1e8591fb3d1a5cd1b94b758cb.socket

내가 이것을 묻는 이유는 사용자 계정이 로그아웃될 때마다 모든 개방형 제어 마스터 연결을 종료하는 스크립트 가능한 방법을 찾고 있기 때문입니다. 그렇게 하지 않으면 나에게 불이익이 발생합니다.체계SUSE 열기컴퓨터는 아직 열려 있는 제어 마스터 연결이 강제로 종료되고 결국 전원이 꺼질 때까지 2분 동안 시간 초과를 기다립니다.

안타깝게도오픈SSH클라이언트 프로그램 ssh요구 사항목적지ControlPath소켓 파일에 대한 실제 파일 경로를 유추할 수 있도록 하는 호스트 및 파일 이름 패턴입니다. 대신 -S ctl_path프로그램 옵션을 통해 구체적인 소켓 파일을 제공하는 보다 직접적인 접근 방식을 생각했습니다 .

내 시스템 전체 글로벌 섹션에서SSH 열기내가 구성한 클라이언트 프로필오픈SSH연결 재사용 특성은 다음과 같습니다.

ControlMaster auto      
ControlPath ~/.ssh/%C.socket
ControlPersist 30m

소켓 파일의 파일 이름 패턴을 유지하고 싶습니다. 즉, token 을 사용하여 %l%h%p%r토큰 문자열을 해시합니다 %C.

어떤 아이디어가 있나요?

답변1

이것은 제어 호스트의 소켓 파일만 사용하여 나에게 효과적이었습니다.

$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>

노트:ssh -S ~/.ssh/<controlfile> ...위 형식의 더 짧은 형식을 사용할 수도 있습니다 .

다음은 원격 서버에 설정한 연결의 예입니다.

$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$

그리고 연결을 끊습니다:

$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$

아직 연결되어 있는 경우 강제로 즉시 종료됩니다.

$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$

모르겠지만, ssh 끝에 추가 매개변수가 필요하기 때문에 버그일 수도 있지만, blah제가 사용하고 있는 스위치의 맥락에서는 말이 되지 않습니다.

그것 없이는 이것을 얻습니다 :

$ ssh -S ~/.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

두 버전 모두에서 추가 더미 인수가 필요하다는 것을 확인했습니다.

업데이트 #1

OpenSSH의 잠재적인 버그로 이것을 제기업스트림에서는 다음과 같이 응답했습니다.

예 - 의도적인 것입니다.

ControlPath에는 호스트 이름이 완전히 확장되어야 하는 % 확장이 포함될 수 있습니다.

ControlPath에 실제로 이것이 필요한지 확인하고 호스트 이름을 선택 사항으로 만드는 것을 상상할 수 있지만 1) %h를 사용하는 ControlPath는 일반적이며 2) 매개 변수 구문 분석 코드를 이미 있는 것보다 더 이상 미로로 만들고 싶지 않습니다.

인용하다

답변2

SSH ControlMaster 연결 관리를 단순화하는 유틸리티를 작성했습니다. 그것은 알려져있다cmc: TimidRobot/cmc: ControlMaster Controller - SSH ControlMaster 연결 관리를 단순화합니다..

관련 정보