더 긴 기간 동안 SSH 연결을 활성 상태로 유지하는 방법

Alternate Title: [SOLVED] Code doesn't get pushed since Husky pre-push takes so much time!



몇 주 전에 저는 Husky 사전 푸시 후크가 구성된 프로젝트를 진행하고 있었습니다. 며칠 동안 작업한 후 가끔 코드가 원격 저장소로 푸시되지 않는 것을 발견했습니다.

시행 착오의 두통 끝에 프리 푸시 후크가 완료하는 데 너무 많은 시간이 걸린다는 것을 깨달았습니다. 그리고 그랬을 때 터미널의 원격 저장소로 푸시되는 코드 메시지가 없었습니다. 뭔가 이상했다.

터미널과 GitHub 간의 SSH 연결은 실행할 때 시작되고git push 코드가 성공적으로 푸시되면 종료된다는 것을 배웠습니다. 그러나 일정 시간 동안 연결이 비활성화되면 시간 초과로 인해 자체적으로 종료됩니다.

Husky 사전 푸시가 작업을 완료하는 데 너무 오랜 시간이 걸리기 때문에 GitHub 서버와의 SSH 연결이 시간 초과되었습니다. 끊어진 연결로 인해 코드가 전혀 푸시되지 않았습니다.

몇 분 더 연결을 유지하는 방법이 필요했습니다. 다행히 터미널 자체에서 이 작업을 수행할 수 있습니다.

전제 조건



터미널은 SSH를 통해 GitHub 계정에 연결되어야 합니다. 자세한 정보를 찾을 수 있습니다here.

해결책



내가 말했듯이 솔루션은 허스키가 작업을 완료할 때까지 연결을 활성 상태로 유지하는 것입니다. 생각보다 쉽습니다.

터미널에서 SSH 정보를 저장하는 디렉터리로 이동합니다. 일반적으로 홈 디렉토리의 /.ssh 폴더입니다. 터미널에서 다음 명령을 실행합니다.

cd ~/.ssh


물결 기호(~)는 /home 디렉토리를 나타냅니다. 원하는 대상 폴더가 홈 디렉토리 자체에 있으므로 이 명령은 현재 작업 디렉토리를 /home/.ssh 로 변경합니다.

확장자 없이 이름이 config인 파일을 만듭니다. 파일에 다음 텍스트를 추가합니다.

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 30




호스트에 다시 한 번 연결하면 성공을 볼 수 있습니다. 그렇지 않은 경우 최적의 지점을 찾을 때까지 몇 분씩 시간을 늘립니다. 이 설정을 이해하는 방법은 다음 섹션에서 설명합니다.

설명



그러나 ServerAliveIntervalServerAliveCountMax는 실제로 무엇을 합니까?

SSH 매뉴얼에 따르면:

ServerAliveInterval:
Sets a timeout interval in seconds after which if no data has been received from the server, ssh will send a message through the encrypted channel to request a response from the server. The default is 0, indicating that these messages will not be sent to the server. This option applies to protocol version 2 only.

ServerAliveCountMax:
The default value is 3. If, for example, ServerAliveInterval is set to 15 and ServerAliveCountMax is left at the default, if the server becomes unresponsive, SSH will disconnect after approximately 45 seconds. This option applies to protocol version 2 only.



요약하자면:
  • 클라이언트는 60초, 즉 ServerAliveInterval 시간 동안 유휴 상태로 대기합니다.
  • 그런 다음 no-op null 패킷을 서버로 보내고 응답을 기대합니다.
  • 응답이 없으면 ServerAliveCountMax 로 정의된 30번까지 위의 프로세스를 계속 시도합니다. 따라서 30분인 1800초 동안 대기합니다.
  • 서버가 여전히 응답하지 않으면 클라이언트가 SSH 연결을 끊습니다.

  • 알아야 할 사항



    응답을 기다리는 사람



    우리의 경우 클라이언트는 서버의 응답을 기다리고 있습니다. 코드가 푸시되면 GitHub 서버가 응답을 다시 보내기 때문입니다. 클라이언트가 응답을 보내도록 하려면 ClientAliveIntervalClientAliveCountMax 를 사용해야 합니다.

    다른 호스트에 대한 다른 구성 설정



    별표 기호(*)는 연결된 모든 호스트에 대해 이 구성을 설정합니다. 특정 호스트 또는 하나의 호스트에 대해 이를 설정하려면 다음과 같이 할 수 있습니다.

    Host hostname1
        SSH_OPTION value
        SSH_OPTION value
    
    Host hostname2
        SSH_OPTION value
    
    Host *
        SSH_OPTION value
    


    사용 가능한 연결된 호스트 목록은 같은 디렉터리에 있는 known_hosts 파일에서 찾을 수 있습니다.

    마무리



    서버 활성 메시지는 일정 시간 동안 트래픽이 없으면 연결을 종료하도록 SSH 서버를 구성한 경우에 유용합니다. 이 두 옵션을 설정하면 최대 *ServerAliveCountMax 시간 동안 ServerAliveInterval *초마다 패킷을 전송하여 세션이 활성 상태로 유지됩니다.

    개발자로서 우리는 매일 새로운 문제에 직면합니다. 그 중 일부는 우리의 기술에 도전하고 다른 일부는 우리의 인내심에 도전합니다. 저에게 이 문제는 후자의 범주에 속합니다. 그래서 나는 그것에 관한 기사를 쓰기로 결정했습니다.

    이 기사가 도움이 되었기를 바랍니다. 안부를 전하고 싶으시다면 제 DM은 언제나 열려있습니다. 나는 , 및 Showwcase 에서 가장 활동적입니다.

    즐거운 코딩하세요! 👨‍💻

    좋은 웹페이지 즐겨찾기