Write Failed: broken pipe
오류 를 방지하기 위해 클라이언트와 서버 모두에서 SSH를 구성하려면 어떻게해야 합니까? 클라이언트 컴퓨터를 잠자고 나중에 다시 시작하면 종종 발생합니다.
screen
.
Write Failed: broken pipe
오류 를 방지하기 위해 클라이언트와 서버 모두에서 SSH를 구성하려면 어떻게해야 합니까? 클라이언트 컴퓨터를 잠자고 나중에 다시 시작하면 종종 발생합니다.
screen
.
답변:
나는 이것을 /etc/ssh/ssh_config
Linux와 Mac 에서 시도했다 .
Host *
ServerAliveInterval 120
몇 초 안에 서버에 keepalive 메시지를 보내야 하는가입니다. 그래도 작동하지 않으면 작업하는 동안 2 분마다 Enter 키를 누르도록 원숭이를 훈련 시키십시오.
당신도 설정할 수 있습니다 ServerAliveInterval
에서 /etc/ssh/ssh_config
클라이언트 컴퓨터의 또는 ClientAliveInterval
에서 /etc/ssh/sshd_config
서버 컴퓨터의. 여전히 오류가 발생하면 간격을 줄이십시오.
단일 사용자에 대한 구성 ~/.ssh/config
은 서버 및 클라이언트 측 모두 에서 파일로 설정할 수 있습니다 . 파일에 올바른 권한이 있는지 확인하십시오 chmod 644 ~/.ssh/config
.
Bad configuration option: ClientAliveInterval
Bad configuration option
OSX 10.8.4에서 동일한 오류가 발생합니다.
SSH 세션은 여러 가지 불가피한 이유로 인해 중단 될 수 있습니다.
이로 인해 발생하는 문제를 완화하는 데 사용할 수있는 유용한 유틸리티를이라고 screen
합니다. Screen은 ssh 세션과 독립적으로 살아남을 여러 터미널을 제어 할 수있는 강력한 유틸리티입니다. 예를 들어, screen
ssh 세션에서 실행 하면 새 터미널이 열리고 터미널을 사용하여 작업을 실행할 수 있습니다. ssh 세션이 프로세스에서 죽었다고 가정 해 봅시다. screen -d
그런 다음 실행 screen -r
하면 마지막 세션이 다시 열리고 계속 진행할 수 있습니다. 사용하기 전에 일부 설명서 를 읽으 십시오.
screen -d -r
두십시오. 마지막 세션을 복구하기 위해 편리하게 실행할 수 있습니다 .
screen -dr
. 또는 screen -x
계획하고있는 것에 따라. 요점은 모든 스위치가 무엇을하는지 알아야하므로 적절한 스위치를 사용할 수 있고 인터넷 사람들의 제안을 맹목적으로 따르지 않아야합니다. 여기에 사용 가능한 간단한 요약이 있습니다. ss64.com/bash/screen.html
클라이언트 구성
파일을 만들어보십시오 :
~/.ssh/config
내용을 추가하십시오 :
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
이제 서버로 ssh하고 문제가 해결되었는지 확인하십시오. ClientAliveInterval 옵션은 ssh 서버 (일명 sshd)를 구성 할 때만 유용하며 ssh 클라이언트 측에서는 변경되지 않으므로 위의 구성 파일에서 사용하지 마십시오.
이전 30 초 동안 패킷이 수신되지 않은 경우 (위에 지정된대로) hello-are-you-there 신호를 서버로 보냅니다. 그러나 연속적인 hello-are-you-the-re 신호가 ServerAliveCountMax에 도달하면 ssh가 서버와의 연결이 끊어집니다. 이 값의 기본값은 3으로 설정되어 있으므로 서버 활동없이 3 * 30 = 90 초가 필요합니다. 필요에 따라 늘리십시오. .ssh / config 파일에 더 많은 구성 옵션이 있으며 다음을 읽을 수 있습니다.
다른 옵션에 대한 자세한 내용. 이 예제에 연결할 모든 서버에이 기능을 적용하지 않을 수 있습니다. 또는 줄 Host *
을 로 바꾸어 특정 서버로만 제한하십시오 Host <IP>
(IP 주소로 교체, ssh_config 매뉴얼 페이지 참조).
서버 구성
마찬가지로 서버를 클라이언트에게 부드럽게 지시 할 수 있습니다. 구성 파일은 /etc/ssh/sshd_config
입니다.
ClientAliveInterval 20
ClientAliveCountMax 5
당신은 설정하여 비활성화 할 수 있습니다 ClientAliveInterval
에 0
또는 조정할 ClientAliveInterval
및 ClientAliveCountMax
프로브에 응답하지 않고 최대 SSH 클라이언트 활동을 설정할 수 있습니다. TCPKeepAlive에 비해이 설정의 한 가지 장점은 신호가 암호화 된 채널을 통해 전송되므로 스푸핑 가능성이 낮다는 것입니다.
원격으로 Ubuntu 서버를 lucid에서 정확한 것으로 업그레이드하고 있으며 업그레이드 도중 "쓰기 실패. Brocken 파이프"메시지와 함께 ssh 연결이 끊어졌습니다. ClientAliveInterval 및 ServerAliveInterval은 아무 것도 수행하지 않았습니다. 해결책은 클라이언트 ssh에서 TCPKeepAlive 옵션을 켜는 것입니다.
TCPKeepAlive yes
...에서
/etc/ssh/ssh_config
클라이언트의 경우 다음과 같이 ~/.ssh/config
(또는 /etc/ssh/ssh_config
) 파일을 편집하십시오 .
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive- 시스템이 다른쪽에 TCP keepalive 메시지를 보낼지 여부를 지정합니다. 전송 된 경우 연결이 끊어 지거나 시스템 중 하나의 충돌이 올바르게 감지됩니다. 그러나 이것은 경로가 일시적으로 다운되면 연결이 끊어지고 일부 사람들은 성가신 것을 발견합니다 (기본값은 'yes').
ServerAliveInterval- 서버에서 데이터를 수신하지 않은 경우 ssh (1)가 서버에서 응답을 요청하기 위해 암호화 된 채널을 통해 메시지를 보내는 시간 초과 간격 (초)을 설정합니다. 기본값은 0이며 이러한 메시지가 서버로 전송되지 않음을 나타냅니다.
서버의 경우 다음 /etc/ssh/sshd_config
과 같이 편집하십시오 .
ClientAliveInterval 600
ClientAliveCountMax 0
10 분 (600 초) 후에 ssh 클라이언트가 자동으로 종료 (시간 초과)되도록하려는 경우.
ClientAliveCountMax – ssh 클라이언트로부터 응답을받지 않고 ssh 서버가 보낸 총 checkalive 메시지 수를 나타냅니다. 기본값은 3입니다.
ClientAliveInterval – 시간 제한 (초)을 나타냅니다. x 초 후 ssh 서버는 클라이언트에게 응답을 요청하는 메시지를 보냅니다. Deafult는 0입니다 (서버는 클라이언트에게 확인 메시지를 보내지 않습니다).
참조 : 옵션 ServerAliveInterval
과 ClientAliveInterval
sshd_config에서 정확히 무엇을합니까?
나는 절대적으로 Mosh를 좋아합니다. 나는 종종 서버에 ssh하고 노트북을 닫고 카페에 가서 그것을 열어서 아무것도 바뀌지 않은 것처럼 계속합니다.
모쉬 (모바일 쉘)
로밍 을 허용 하고 간헐적 인 연결을 지원하며 사용자 키 입력의 지능적인 로컬 에코 및 라인 편집 기능을 제공 하는 원격 터미널 응용 프로그램입니다 .
Mosh는 SSH를 대체합니다. 특히 Wi-Fi, 셀룰러 및 장거리 링크를 통해 더욱 강력하고 반응이 좋습니다.
Mosh는 무료 소프트웨어이며 GNU / Linux, FreeBSD, Solaris, Mac OS X 및 Android에서 사용할 수 있습니다.
나를 위해, 나는 Write failed: Broken pipe
vim이나 쉘 프롬프트에서 적극적으로 입력 할 때조차도 얻고 있었습니다. 인터넷을 로컬에서 잠시 동안 탐색 할 수도 없었습니다. (터미널을 사용하여 원격으로 우분투에 연결했습니다.)
내 네트워크의 다른 사람들은 Netflix 및 다른 곳에서 많은 비디오를 스트리밍합니다. 증명할 수 없지만 ISP 나 라우터 문제가 의심됩니다. 예를 들어 Verizon과 Netflix는 고객의 네트워크 문제에 대해 서로를 지적하고 있습니다.
전화 접속 연결이 있고 동시 SSH 또는 텔넷 연결로 비디오 또는 음악을 스트리밍하는 경우 파이프 메시지가 깨지는 것을 피할 수 없습니다. ISP의 광대역 패키지를 업그레이드하면 끊어진 연결이 덜 빈번한 것으로 보입니다.
우분투 VM이 아니기 때문에 여기에 내 답변을 게시했습니다.
ssh -o IPQoS=throughput user@host
SSH 구성 클라이언트 또는 서버에 관계없이 원격 서버에 실패하지 않는 스크립트가 있습니다.
#!/bin/bash
while true; do date; sleep 10; done;
파일을 dummy.sh 파일에 저장하고 창을 최소화하거나 다른 곳으로 이동하기 전에 빠르게 실행하십시오. 서버에 현재 시간 소인을 계속 인쇄하고 다른 이유로 연결이 끊어지지 않는 한 연결을 활성 상태로 유지합니다. 해당 터미널로 돌아 오면 Ctrl + C를 누르고 계속 작업하십시오.
top
달리기
ssh를 호출 할 때마다 다음 인수를 추가 할 수 있습니다. -o ServerAliveInterval=15 -o ServerAliveCountMax=3
이렇게하면 / etc / ssh / * config 파일을 편집 할 필요가 없습니다.
이를 쉽게하기 위해 bash 별명, 함수 또는 스크립트를 작성할 수 있습니다.
예를 들어 이러한 bash 기능을 사용하면 .bashrc에 추가 할 수 있으며 do_ssh는 수동으로 keepalives를 켭니다. do_ssh_pty는 스크립트 내에서 pty를 설정하고 프롬프트를 피하기 위해 사용됩니다.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
이제 do_ssh user@host
사용할 수 있고 do_ssh user@host <args> <command>
keepalives가 활성화됩니다.