나는 ssh를 사용하여 다른 시스템에 로그인하고 거기에서 스크립트를 실행하여 새 시스템을 만들고 몇 가지 설정을 수행했습니다. 약 7~8시간 정도 소요됩니다. 따라서 SSH 연결이 계속 끊어지고 스크립트 실행 실패로 인해 항상 시간 초과가 발생합니다.
이제 SSH 연결에 이 매개변수를 사용합니다.
ssh -o ServerAliveInterval=60 user@host ....
이 SSH는 여러 번 생성됩니다. 문제는 몇 번의 SSH 연결 후에 오류가 발생한다는 것입니다.
too many logins of user
그리고 SSH 연결은 로그인 성공 후 즉시 종료됩니다.
이것도 같은 행동인가요?서버 활동 간격, 원격 시스템의 ssh 사용자 로그인 세션은 ssh 작업이 종료된 후에도 활성 상태로 유지됩니다. 그래서 추가 로그인이 끊어지는 이유는 무엇입니까?
답변1
클라이언트의 연결이 끊어지면 세션이 계속 유지되지 않을 것이라고 생각합니다. 아마도 서버측 옵션은 다음과 같습니다.
살아있는 최대 클라이언트 수
sshd(8)가 클라이언트로부터 메시지를 받지 않고 보낼 수 있는 클라이언트 활성 메시지 수를 설정합니다. 클라이언트 활동 메시지를 보내는 동안 이 임계값에 도달하면 sshd는 클라이언트 연결을 끊고 세션을 종료합니다. 클라이언트 활동 메시지의 사용은 TCPKeepAlive와 매우 다르다는 점에 유의해야 합니다. 클라이언트 활동 메시지는 스푸핑될 수 없도록 암호화된 채널을 통해 전송됩니다. TCPKeepAlive 활성화된 TCP keepalive 옵션은 스푸핑 가능합니다. 클라이언트 측 활성 메커니즘은 클라이언트나 서버가 연결이 비활성화되는 시기를 알아야 할 때 유용합니다.
기본값은 3입니다. ClientAliveInterval이 15로 설정되고 ClientAliveCountMax가 기본값으로 유지되면 응답하지 않는 SSH 클라이언트는 약 45초 후에 연결이 끊어집니다.
클라이언트 활동 간격
클라이언트로부터 데이터가 수신되지 않는 경우 sshd(8)가 암호화된 채널을 통해 메시지를 보내 클라이언트로부터 응답을 요청하는 시간 초과 간격(초)을 설정합니다. 기본값은 0이며, 이는 이러한 메시지가 클라이언트에 전송되지 않음을 의미합니다.
아마도 문제에 대한 실제 해결책은 터미널 멀티플렉서(예: screen 또는 tmux)를 사용하는 데 있을 것입니다. 연결이 끊어지더라도 로그인과 실행 중인 프로그램을 계속 유지합니다. 실행 중인 프로그램의 출력을 포함하여 나중에 언제든지 터미널에 다시 연결할 수 있습니다. 또한 이를 사용하여 단일 SSH 연결 내에 여러 터미널을 가질 수도 있습니다. 서버가 SSH 세션을 제한하는 것 같기 때문에 이는 유용할 수도 있습니다. 당신은 하나를 찾을 수 있습니다화면 소개는 여기, 그러나 다른 것들도 많이 있습니다.
답변2
ServerAliveInterval
따라서 ssh 작업이 종료된 후에도 ssh 사용자 로그인 세션은 원격 시스템에서 활성 상태로 유지됩니다. 이것이 추가 로그인 연결이 끊어지는 이유입니까?
습관. 이는 연결을 확인하고 SSH 이하 수준에서 자동 연결 해제를 방지하기 위해 전송되는 Keepalive 메시지입니다. 장기 실행 스크립트를 시작하려면 , 또는 를 사용해야 nohup
합니다 screen
. tmux
연결을 끊은 후에도 스크립트가 계속 실행되며 후자의 두 터미널을 사용하면 기존 터미널에 다시 연결할 수 있습니다.
답변3
ServerAliveInterval=60
연결이 계속 실행 중이기 때문에 활성화한 후에도 이러한 오류가 나타날 수 있습니다 . 이 서버에 대한 SSH 연결/명령 모드 동시 연결 누적이 서버 구성에서 허용하는 수를 초과합니다.
귀하의 연결이 사라져서 동시 연결 수가 줄어들었고 서버는 이에 만족했지만(거부된 연결 없음) 귀하는 그렇지 않았습니다.
최대 동시 연결 수에 관한 서버 구성을 찾아 해당 제한 내에서 유지하거나 서버 관리자와 협상하여 귀하(그리고 어쩌면 모든 사람의) 제한을 높이십시오.