저는 몇 달 동안 SSH를 사용하여 원격 서버에 액세스해 왔지만 최근에는 안정적인 연결을 설정하는 데 문제가 있습니다. 때때로 로그인할 수 없고 "포트 22를 통해 연결이 재설정되었습니다"라는 메시지가 표시되고, 로그인할 수 있을 때 몇 분 동안 "client_loop: 전송 연결 해제: 깨진 파이프"라는 오류 메시지가 표시됩니다(터미널이 연결되어 있음에도 불구하고). 유휴 상태가 아닙니다).
내 ~/.ssh/config 파일에는 다음이 있습니다.
Host *
ServerAliveInterval 300
ServerAliveCountMax 2
TCPKeepAlive yes
내 /etc/ssh/sshd_config 파일에는 다음이 있습니다.
#ClientAliveInterval 300
#ClientAliveCountMax 3
최근에 xfinity 계획을 더 빠른 속도로 업그레이드했는데 문제가 발생하기 시작했습니다. 하지만 엑스피니티는 문제는 나에게 있다고 주장했다. 내 룸메이트도 같은 SSH 문제를 겪고 있습니다.
내가 놓친 것이 있나요? 어떤 도움이라도 대단히 감사하겠습니다! (저는 Mac에서 실행 중입니다)
답변1
~/.ssh/config 파일을 편집하여 동일한 문제를 해결했습니다.
Host *
ServerAliveInterval 20
TCPKeepAlive no
동기 부여:
TCPKeepAlive no
이는 "서버에 연결 유지 메시지를 보내지 않음"을 의미합니다. 반대 TCPKeepAlive yes가 설정되면 클라이언트는 keepalive 메시지를 서버에 보내고연결 종료를 유지하려면 응답이 필요합니다.. 서버가 실패했는지, 다시 시작했는지 등을 감지합니다. 문제는 클라이언트와 서버 간의 연결이 짧은 시간 동안 중단되면(불안정한 네트워크 연결로 인해) Keepalive 메시지가 실패하고 클라이언트가 "깨진 파이프라인"으로 연결을 종료한다는 것입니다. .
이 설정은 TCPKeepAlive no
사용자가 연결이 여전히 양호하다는 증거를 요청할 때까지 연결이 여전히 양호하다고 가정하도록 클라이언트에 지시합니다. 즉, SSH 용어가 백그라운드에서 유휴 상태인 동안 일시적인 연결 중단이 연결을 종료하지 않는다는 의미입니다.
답변2
데이비드의 대답예, 하지만 보다 포괄적인 솔루션이 아래에 설명되어 있습니다.
이 문제는 클라이언트나 서버에서 해결할 수 있습니다.
어디서 하는지 어떻게 알 수 있나요?
SSH를 통해 여러 서버에 연결하는 경우 컴퓨터에서 설정하세요.
시스템 관리자이고 여러 사용자가 SSH 연결 끊김이 자주 발생한다고 불평하는 경우 서버에서 이를 설정할 수 있습니다.
고객
서버에 연결할 때 다음 -o
옵션을 사용하십시오.
ssh -o ServerAliveInterval=600 [email protected]
이 값은 600
600초, 즉 10분을 나타냅니다.
또는 SSH 구성 파일에 다음을 추가하세요.
- SSH 구성 파일이 없으면 작성하십시오.
touch ~/.ssh/config
- 권한 설정:
chmod 600 ~/.ssh/config
- 구성 파일에 매개변수를 설정합니다. 예를 들어:
...또는 편집기를 사용하세요.echo "ServerAliveInterval 600" >> ~/.ssh/config
서비스 터미널
- 에 있는 sshd 구성 파일을 엽니다
/etc/ssh/sshd_config
. - 매개변수
ClientAliveInterval
및ClientAliveCountMax
를 원하는 값으로 설정합니다.
예를 들어, ClientAliveInterval=200
및는 ClientAliveCountMax=3
서버가 200초 후에 활동 메시지를 보낸다는 의미입니다. 클라이언트가 응답하지 않으면 400초 후에 다른 활동 메시지를 보냅니다. 클라이언트가 여전히 응답하지 않으면 600초 후에 또 다른 연결 유지 메시지를 보냅니다. 여전히 응답이 없으면 SSH 연결이 끊어집니다.
원천:SSH 연결에 대한 깨진 파이프 오류 수정 존재하다 리눅스 매뉴얼.
답변3
Mac에서 Windows 노트북으로 SSH를 시도하는 동안 이 문제가 발생했습니다. 위의 해결 방법을 ServerAliveInterval
시도 했지만 TCPKeepAlive
작동하지 않았습니다.
왜 이런 일이 발생했는지는 잘 모르겠지만 원격 노트북 파일에서 공개 SSH 키를 삭제하여 ~/.ssh/authorized_keys
문제를 해결했습니다 . 하지만 이는 특히 이상한데, 내 ssh -v
로그에 따르면 내 공개 키가 인증에 제대로 사용되는 것 같기 때문입니다.
debug1: Authentication succeeded (publickey).
Authenticated to 192.168.1.21 ([192.168.1.21]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: filesystem full
client_loop: send disconnect: Broken pipe
어쨌든, 키를 삭제하면 오류가 사라지고 client_loop: send disconnect: Broken pipe
이제 로그인할 수 있습니다.
답변4
이 문제는 하위 시스템을 사용하는 경우 해결될 수 있습니다. 그런 다음 이러한 소유자가 다른 소유자가 아닌 루트여야 하고 권한이 제한되어야 합니다.
나는 또한이 문제에 직면했습니다
Client_loop: send disconnect: broken pipe
이슈를 생성한 다른 모든 사용자에게 모든 권한을 부여했기 때문입니다.
저를 보고 /var/log/auth.log
버그를 발견한 후 문제를 만든 모든 사용자에게 모든 권한을 부여했습니다.
권한을 변경한 후 연결에 성공했습니다. 더 적은 권한이 필요하기 때문에 이것이 놀랍습니다.
sudo chown root:root /rooted/Environment
sudo chmod 755 /rooted/Environment