더 긴 기간 동안 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 에서 가장 활동적입니다.
즐거운 코딩하세요! 👨💻
Reference
이 문제에 관하여(더 긴 기간 동안 SSH 연결을 활성 상태로 유지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/clumsycoder/how-to-keep-ssh-connection-alive-for-longer-durations-4f65텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)