
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

호스트에 다시 한 번 연결하면 성공을 확인할 수 있습니다. 그렇지 않은 경우 최적의 지점을 찾을 때까지 시간을 몇 분 늘리십시오. 이 설정을 이해하는 방법은 다음 섹션에서 설명합니다.
설명
그러나
ServerAliveInterval
와 ServerAliveCountMax
는 실제로 무엇을 합니까?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 andServerAliveCountMax
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.
요약하자면:
ServerAliveInterval
시간 동안 유휴 상태로 대기합니다. ServerAliveCountMax
로 정의된 30번까지 위의 프로세스를 계속 시도합니다. 따라서 30분인 1800초 동안 대기합니다. 알아야 할 사항
응답을 기다리는 사람
우리의 경우 클라이언트는 서버의 응답을 기다리고 있습니다. GitHub 서버는 코드가 푸시될 때 응답을 다시 보내기 때문입니다. 클라이언트가 응답을 보내도록 하려면
ClientAliveInterval
및 ClientAliveCountMax
를 사용해야 합니다.다른 호스트에 대한 다른 구성 설정
별표 기호(*)는 연결된 모든 호스트에 대해 이 구성을 설정합니다. 특정 호스트에 대해 설정하거나 하나의 호스트에 대해서만 설정하려면 다음과 같이 하면 됩니다.
Host hostname1
SSH_OPTION value
SSH_OPTION value
Host hostname2
SSH_OPTION value
Host *
SSH_OPTION value
사용 가능한 연결 호스트 목록은 동일한 디렉토리에 있는
known_hosts
파일에서 찾을 수 있습니다.마무리
서버 활성 메시지는 SSH 서버가 일정 시간 동안 트래픽이 없으면 연결을 닫도록 구성된 경우에 유용합니다. 이 두 옵션을 설정하면 최대 *ServerAliveCountMax 시간 동안 ServerAliveInterval *초마다 패킷을 전송하여 세션을 활성 상태로 유지합니다.
개발자로서 우리는 매일 새로운 문제에 직면합니다. 그 중 일부는 우리의 기술에 도전하고 다른 일부는 우리의 인내에 도전합니다. 나에게 이 문제는 후자의 범주에 속한다. 그래서 그것에 대한 기사를 쓰기로 결정했습니다.
이 기사가 도움이 되었기를 바랍니다. 인사하고 싶다면 내 DM은 항상 열려 있습니다. 저는 , 및 Showwcase 에서 가장 활동적입니다.
즐거운 코딩! 👨💻