SSH 제어 소켓이 이미 존재하는 경우 어떻게 중단합니까?

SSH 제어 소켓이 이미 존재하는 경우 어떻게 중단합니까?

내 스크립트에서는 다음 줄을 사용합니다.

ssh -f -N -M -S <control socket> <host>

이는 초기 연결이 백그라운드에만 유지되며 후속 호출에 사용할 수 있음을 의미합니다 ssh.

ssh -S <control socket> <host> <command>

그러나 동일한 제어 소켓을 사용하고 "백그라운드" 호출을 모든 스크립트에 넣어야 하는 명령이 포함된 여러 스크립트가 있는 경우 ssh어느 시점에서 다음 메시지가 표시됩니다.

ControlSocket <control socket> already exists, disabling multiplexing

ssh분명히 소켓이 존재하고 후속 명령에서 사용될 수 있기 때문에 이것은 스크립트의 나머지 부분에는 영향을 미치지 않습니다 . 그러나 "백그라운드" 세션이 소켓 열기에 실패하더라도 종료되지 않고 활성 상태로 유지됩니다. 단지 멀티플렉싱되지 않았을 뿐입니다.

[ -S소켓이 존재하는지 확인 하거나 사용 ssh -O check하면 여전히 경쟁 조건이 발생할 가능성이 남아 있습니다.

"제어 소켓이 아직 없으면 열고, 있으면 종료"하려면 어떻게 해야 합니까?

답변1

당신이 찾고 있는 것은 ControlMaster auto구성 파일에 지정하거나 명령줄에서 직접 사용할 수 있다고 생각합니다 -o ControlMaster=auto.

이를 통해 연결 열기 및 사용 명령을 통합할 수 있습니다(또한 매우 유용함 ControlPersist).

관련 정보