SSH 세션에서 깨진 파이프 메시지는 무엇을 의미합니까?


103

때때로 내 SSH 세션이 Write failed: Broken pipe메시지 와 함께 연결이 끊어집니다 . 무슨 뜻인가요? 세션을 어떻게 열어 둘 수 있습니까?

에 대해 알고 screen있지만 이것이 내가 찾는 답이 아닙니다. 이것이 sshd구성 옵션 이라고 생각합니다 .

답변:


89

서버가 너무 오래 유휴 상태 인 연결을 닫을 수 있습니다. 클라이언트 ( ServerAliveInterval) 또는 서버 ( ClientAliveInterval)를 업데이트 할 수 있습니다

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) 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.

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

서버를 업데이트하려면 (그리고 다시 시작합니다 sshd)

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

또는 클라이언트 쪽 :

echo "ServerAliveInterval 60" >> ~/.ssh/config 

때때로 "* AliveInterval"이 충분하지 않은 NB stackoverflow.com/questions/10665267/…
rogerdpack

1
~/.ssh/config내 Mac 에는 없습니다 . 거기서 만들어야합니까 아니면 다른 곳에 있습니까?
AGamePlayer

5
@AwQiruiGuo 예, ~/.ssh먼저 디렉토리 ( )를 만들어야합니다 . 그래서mkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert

6

또 다른 해결책은 mosh모바일 쉘 을 사용하는 것 입니다. ssh와 달리 UDP를 통해 연결하고 로밍을 지원합니다. 집에서 세션을 시작하고, 랩탑을 일시 중지하고, 인터넷이있는 곳 어디에서나 직장 / 친구에게 가져 가거나, 랩탑을 해제하고 아무 일도없는 것처럼 계속 작동 할 수 있습니다. 인터넷 연결이 열악한 경우에 특히 유용합니다. 키 입력이 서버에 도달하지 않고 지속적으로 연결을 다시 시도하면 즉각적인 피드백을 표시합니다.

설치 및 설정은 간단합니다. 현재 모든 Linux (비 Linux 이외) 배포에 포함되어 있으며 이전 ssh 연결을 통해 세션 초기화 및 인증을 조정합니다. 따라서 mosh 패키지가 양쪽 끝에 설치되어 있으면 ssh user@server을 호출하기 만하면 mosh에 연결할 수 있습니다 mosh user@server.

연결 실패의 주요 원인은 mosh가 작동하려면 UDP 포트 (기본 범위 : 60000-61000)로 서버에 연결해야하기 때문입니다. 따라서 서버가 방화벽 뒤에있는 경우 직접 구멍을 뚫을 수 없다면 운이 좋지 않습니다 ( 보안 함의 ).


3

연결 기간을 연장하려면 클라이언트에서 다음을 추가하십시오.

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMax기본적으로 이것은 3으로 설정됩니다. 따라서 일단 ServerAliveInterval3 개의 작은 정보 팩을 서버로 전송하면 자동으로 로그 아웃됩니다. 1200으로 설정하면이 프로세스는 1200 번 이상 발생해야합니다. 즉, 최소 30 * 1200 초 (10 시간) 이상 연결해야합니다.


5
현재 사용자에게 속해 있거나 아직 존재하지 않는 파일에 sudo를 사용하는 이유는 무엇입니까?
허버트 Grzeskowiak

2

일반적으로 네트워크 (TCP) 연결이 재설정되었음을 의미합니다. 예를 들어, 인터넷 제공 업체가 귀하 또는 이와 유사한 것을 다시 연결했습니다.


1

나는 같은 문제가 있었지만 예상과 다릅니다. 같은 네트워크에서 다른 서버가 같은 IP 주소를 찾으려고하면 같은 문제가 발생합니다. 이를 해결하려면 동일한 IP 주소를 사용하는 다른 서버가 있는지 확인해야합니다. 이 arp명령을 사용하여 수행 할 수 있습니다 .

데비안을 사용하고 있으므로 다른 서버가 실제로 동일한 IP 주소를 사용하고 있는지 확인하는 데 사용하는 명령 샘플은 다음과 같습니다.

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

동일한 IP 주소를 사용하는 두 개의 mac 주소 세트를 알 수 있습니다. 하나를 다른 IP 주소로 설정하여 충돌을 피하십시오.


0

"Broken Pipe 메시지"의 또 다른 원인은 다른 시스템이 호스트와 동일한 IP를 사용하려고하기 때문입니다.

다른 사람이 해당 IP를 사용하고 있는지 테스트하는 간단한 방법 :

  1. 호스트를 끄십시오
  2. 동일한 IP를 핑하여 다른 시스템이 해당 IP를 사용 중인지 확인

네트워크에있는 머신을 찾으려면이 Unix & Linux 질문 제목을 사용하십시오. 다른 머신이 로컬 네트워크에 연결된 것을 찾는 방법 .

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