SSH: 대화형 세션 중에 무작위로 "원격 호스트에 의해 연결이 닫혔습니다."

SSH: 대화형 세션 중에 무작위로 "원격 호스트에 의해 연결이 닫혔습니다."

저는 OpenFOAM 전산유체역학 라이브러리를 사용하여 수치 시뮬레이션을 수행하는 원격 서버에서 작업하고 있습니다. 매개변수 연구를 자동화하기 위해 일련의 Python 스크립트를 구축했는데 잘 작동하는 것 같습니다.

SSH를 사용하여 서버에 연결하고 대화형 셸에서 스크립트를 실행합니다. 가끔 아직도 인식하지 못하는 상황에서 서버가 SSH 세션을 닫는 경우가 있습니다. 현재 해결 방법으로 창 관리자를 사용하고 있지만 screen여전히 문제가 됩니다. 다음은 내가 얻은 출력의 예입니다.

<lots of output before that>
Dumping up_half1 faces to "final_up_half1.obj"
Dumping cyclic match as lines between face centres to "final_up_half0up_half1_match.obj"
Writing repatched mesh to 0

End

Killing PID 32536
Connection to hpc4 closed by remote host.
Connection to hpc4 closed.
➜  ~

시뮬레이션은 아직 완료되지 않았습니다. 화면의 애플리케이션 인쇄가 종료된 후 End다른 애플리케이션이 시작되어 일부 처리를 수행해야 합니다.

그래서 질문은 이렇습니다. 이러한 연결 끊김의 원인은 무엇입니까?

답변1

을 사용하면 서버 연결 끊김 문제를 방지할 수 있습니다 nohup. nohup서버에서 명령을 실행하면 서버 연결이 끊어져도 계속 실행됩니다. 명령의 표준 출력을 nohup.out이라는 파일에 저장하지만 필요한 경우 리디렉션할 수 있습니다. 예를 들어,

nohup ./simulation > output.txt &

실행되고 ./simulation일반적으로 화면에 인쇄되는 출력을 output.txt에 넣습니다. SSH 연결이 끊어지더라도 ./simulation완료될 때까지 계속 실행됩니다.

답변2

무작위 추측:

귀하의 컴퓨터에는 아무런 문제가 없지만 TCP 연결을 추적하는 방화벽으로 "보호되는" 네트워크에 있습니다. 방화벽은 연결이 너무 오랫동안 유휴 상태였다는 것을 감지하면 연결이 끊어진 것으로 간주합니다. 이는 방화벽이 해당 연결에 속하는 TCP 세그먼트를 전달하는 것이 좋지 않다고 생각한다는 의미입니다. 방화벽의 관점에서 해당 세그먼트는 어떤 연결에도 속하지 않을 수 있고 SSH 세션은 결국 시간 초과되기 때문입니다.

이 상황을 해결하려면 SSH 클라이언트가 때때로 null 세그먼트를 보내 원격 호스트에 활성 세션이 있음을 방화벽에 알리도록 할 수 있습니다. ServerAliveInterval설명된 옵션을 사용하여 이 작업을 수행 할 수 있습니다.여기.

화면을 사용할 때: 같은 문제가 한 번 있었지만 하드 상태 표시줄에 시계를 추가했을 때 실수로 문제를 해결했습니다. 이로 인해 화면이 1분마다 자동으로 하드 상태 표시줄을 업데이트하게 되었습니다.

이 작업을 수행하기 위한 최소한의 노력은 ~/.screenrc다음과 같습니다.

hardstatus alwayslastline
hardstatus string '%=[%Y-%m-%d %c ]'

(에서 채택레드햇 매거진)

관련 정보