OS X 터미널에서 SSH 세션이 중단되는 것을 어떻게 방지 할 수 있습니까?


101

내가 언제 내 맥북을 닫습니다 터미널에 적극적으로 SSH 세션을 한 후 깨워 프롬프트가 응답하지 간다.

약 5 분 안에

Write failed: Broken pipe

종료합니다.

이것은 약 15 분 안에 터미널에 아무 것도 입력하지 않을 때도 발생합니다 .

OS X이 다음을 수행하도록 할 수 있습니까?

  1. 가능한 한 오랫동안 SSH 연결을 유지하십시오
  2. 반응이 없으면 즉시 죽이십시오

?

답변:


121

연결이 살아 유지를 들어 , 당신은에서 확인하실 수 있습니다 /etc/ssh/ssh_config그것이 말하는 라인 ServerAliveInterval즉 컴퓨터가 살아 연결을 유지하기 위해 널 패킷을 보낼 거입니다 (초) 얼마나 자주 당신을 알려줍니다. 컴퓨터에 연결을 유지하려고하지 않음을 나타내는 0이있는 경우 (비활성화 됨) 그렇지 않으면 위에서 언급 한 패킷을 보내는 빈도 (초)를 알려줍니다. 120 또는 240을 넣어보십시오. 연결이 여전히 끊어지면 5로 줄어들 수 있습니다. 해당 번호가 발생하지 않으면 라우터가 여유 메모리에 연결을 덤프하는 것일 수 있습니다.

끊어 질 때 죽이려면 ssh 이스케이프 문자를 사용할 수 있습니다.

~.

즉, 물결표를 누른 다음 작동하지 않으면 마침표를 누르기 전에 Enter 키를 누르면 연결이 즉시 종료됩니다.


3
좋아, ~.좋은 팁으로 연결을 끊을 수 있습니다 ! 그러나 실제로 무엇을합니까?
CousinCocaine

내가 혼란 스러웠던 것은 sshd를 다시 시작해야했는지
아닌지에 대한 것이지만

종종 ~. 몇 분 동안 작동하지 않습니다. 왜 그런 겁니까?
Sridhar Sarnobat

2
의 위치 ssh_config/etc/ssh/ssh_configMac OS X에 있습니다. 답변을 직접 수정하고 싶지만이 사이트에는 충분한 담당자가 없습니다.
Erik B

이것을 클라이언트 나 서버에 넣어야합니까? 나는 고객이라고 생각하지만 더 명확 할 수 있습니다.
EralpB

23

당신은 할 수 있습니다 :

모든 연결에 대해 시스템 전체의 시스템을 구성하십시오. / etc / ssh / ssh_config 를 편집 하여 다음 행을 추가하십시오.

ServerAliveInterval 10

또는 서버 당 ~ / .ssh / config

Host keepsdroppingme.com
   ServerAliveInterval 10

이것은 기본적으로 10 초마다 살아있는 패킷을 유지합니다 ...


9

멋진 mosh 프로젝트를 사용해 볼 수도 있습니다 . 네트워크 손실, 시스템 절전 등을 정상적으로 처리하고 네트워크가 다시 작동하면 연결을 행복하게 복원합니다.

또 다른 명예로운 솔루션은 원격 시스템에서 tmux 를 사용 하는 것입니다. 이 경우 여전히 파이프가 파손될 수 있지만 쉘을 다시 연결하면 응용 프로그램을 그대로두고 대기하게됩니다.


사실, 그것은 내가 지금하고있는 일입니다.
Dan

5

여기의 다양한 답변은 구성 파일의 정확한 경로와 관련하여 충돌합니다. 어쩌면 유닉스마다 다를 수 있습니까? 시스템의 매뉴얼 페이지를 읽는 것이 좋습니다!

에서 남자 SSH (1) , 텍스트를 검색 : 설정을 . 내 시스템에서는 시스템 전체 또는이 사용자 구성 파일 중 하나를 선택할 수 있습니다 (경로가 이상하게 다릅니다).

에서 남자 ssh_config를 (5) : 텍스트를 검색 살아 . 내 시스템에서는 ServerAliveIntervalServerAliveCountMax를 모두 설정해야합니다 .

macOS 10.12 Sierra에서 나를 위해 일한 것은 ~ / .ssh / config에 다음 두 줄을 넣는 것입니다.

ServerAliveInterval 20
ServerAliveCountMax 180

이제 20 * 180 초 = 1 시간 동안 연결을 끊지 않고 우분투 16.04 서버에 ssh 할 수 있습니다. 내 하루를 만들었다!


3

절전 또는 Wi-Fi 중단 후 ssh 자동 재 연결

  1. MacPorts 또는 Homebrew에서 autossh 를 설치하십시오 .brew install autossh

  2. 터미널을 열고 실행 autossh -M 20000 -f [SSH ARGUMENTS GO HERE]

  3. Wi-Fi를 연결 해제하거나 Mac을 잠자기 상태로 설정하십시오.

  4. wifi에 다시 연결하면 ssh 세션이 자동으로 다시 연결됩니다.


로그인 후 자동 ssh

Jon Stacey는 로그인시 ssh 세션 자동 활성화에 대한 블로그 게시물을 작성했습니다 .

  1. MacPorts 또는 Homebrew에서 autossh 를 설치하십시오 .brew install autossh

  2. bash 스크립트를 사용 하여 Automator 워크 플로우 를 작성하십시오 .

자동화 셸 스크립트

  1. 시스템 환경 설정 에서 로그인 항목 으로 이동하십시오 .

시스템 환경 설정> 로그인 항목

  1. 로그인 항목에 Automator 워크 플로우 를 추가하십시오 .

로그인 항목


1

이 두 줄을 다음에 추가하십시오 /etc/ssh/ssh_config.

ServerAliveInterval 60
TCPKeepAlive yes

1

이 문제를 해결하여에 다음 줄을 추가하십시오 $HOME/.ssh/config.

Host *
  ServerAliveInterval 120
  TCPKeepAlive no

설정 TCPKeepAlive no은 클라이언트가 사용자 요청에 의해 달리 입증 될 때까지 연결이 여전히 양호하다고 가정하도록합니다. 즉, ssh 용어가 백그라운드에서 유휴 상태 인 동안 일시적인 연결이 끊어지면 연결이 끊어지지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.