소켓 파일을 사용할 수 있는지 확인

소켓 파일을 사용할 수 있는지 확인

다음과 같이 SSH 명령과 함께 contromaster 옵션을 사용합니다.

ssh -i id_rsa -o ControlMaster=auto -o ControlPath='~/.ssh/controlmasters/%r@%h' -o ControlPersist=3600 user@hostname

이를 통해 이전 연결을 재사용하고 더 빠르게 로그인할 수 있습니다. WiFi 연결이 끊어지고 10분 후에 다시 연결을 시도하면 더 이상 동일한 소켓 파일을 재사용할 수 없다는 것을 알았습니다.

소켓 파일이 여전히 존재하는지 확인하는 프로그래밍 방식이 있습니까? 궁극적으로 기존 소켓 파일을 사용할 수 있는지 확인하는 if 문을 만들고 싶습니다. 그렇다면 계속하고, 그렇지 않으면 새 파일을 만듭니다.

답변1

SSH -O check명령을 사용하십시오.

$ ssh -O check user@hostname || ssh -Nf user@hostname

관련 메모에서 다양한 설정을 ~/.ssh/config의 섹션으로 이동하여 ssh 명령을 단순화할 수 있습니다. 여기에서는 :%pssh 포트 번호를 소켓 파일 이름의 일부로 만드는 패턴을 ControlPath에 추가했습니다 .

host user@hostname
    IdentitiesOnly yes
    ControlPath ~/.ssh/controlmasters/%r@%h:%p
    ControlMaster auto
    ControlPersist 3600

그러면 명령이 간단해집니다.

ssh -i id_rsa user@hostname

항상 동일한 ID 파일을 사용하는 경우 ~/.ssh/config에서 매개변수를 사용하여 이를 지정할 수도 있습니다 IdentityFile. Ubuntu 22.04에서는 id_rsa이것이 시도되는 기본 목록의 첫 번째 항목이므로 명령줄에서 간단히 제거할 수 있습니다. 자세한 내용은 ssh_config(5) 맨페이지를 참조하십시오.

관련 정보