screen -D -R ...원격 분리 및 로그아웃이 필요한 경우 - 여기서 "원격 로그아웃"의 목적은 무엇입니까?

screen -D -R ...원격 분리 및 로그아웃이 필요한 경우 - 여기서 "원격 로그아웃"의 목적은 무엇입니까?

현재 직장에서 사용하고 있는 사용 사례 screenssh서버, su기술 사용자 계정, 그리고 screen -RD. 시간 초과로 인해 세션이 자동으로 끊어 지면 ssh이 단계를 반복하여 서버에 있는 기술 계정의 "터미널 상태"가 연결 재설정이 발생하지 않은 것처럼 보이도록 합니다.

-RD플래그 등의 중요성을 알고 싶습니다 .스크린 매뉴얼 페이지나는 읽었습니다(강조):

-D -R

즉시 첨부하세요. 자세히 말하면 세션이 실행 중이면 다시 연결하라는 의미입니다. 필요한 경우 제거하고원격 로그아웃첫 번째. 실행 중이 아닌 경우 이를 생성하고 사용자에게 알립니다. 작가가 가장 좋아하는 작품입니다.

웹 검색을 시도했는데 logout remotely screen관련성이 가장 높은 결과는https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/, 나는 이별에 대해 읽었습니다.

스크린을 분해하세요

원격 세션에서 로그아웃하고 싶지만 해당 컴퓨터에서 생성된 세션을 활성 상태로 유지하려는 경우 더 이상 제어 터미널이 없도록 터미널에서 화면을 분리하기만 하면 됩니다. 이 작업이 완료되면 안전하게 로그아웃할 수 있습니다.

SE에서 찾았습니다다른 터미널에서 원격으로 화면을 분리하는 방법그리고https://askubuntu.com/questions/526972/remotely-log-out-of-graphical-gnome-session그러나 이것은 다른 구체적인 문제입니다.

로그인, 로그아웃 등에 대한 Wikipedia를 읽어보았지만 여전히 명확하지 않습니다. 어떤 세션에서 원격으로 로그아웃할 수 있나요? 저는 서버에서 실행 중입니다 screen. 어쩌면 이 플래그가 내 특정 사용 사례와 관련이 없을 수도 있습니까? -RD(원격 로그아웃) 가장 일반적인 사용 사례는 무엇입니까?

답변1

서버에서 실행 하면 screen실제로 동시에 두 개의 터미널 세션이 있습니다. 첫 번째는 SSH를 통해 연결하는 세션이고 두 번째는 명령으로 관리되는 "로컬" 세션입니다 screen. 첫 번째 세션이 어떤 이유로든 제대로 종료되지 않고 종료되면 두 세션이 자동으로 서로 분리되어 screen새 SSH 세션을 설정할 때 screen기존 두 번째 세션에 다시 연결할 수 있습니다 .

연결 끊기 시간 초과가 비활성으로 인해 기존 연결을 끊는 방화벽과 유사한 경우 문제는 방화벽이 연결의 어느 쪽 끝에든 끊김 신호를 보낼 수 없다는 것입니다.문제가 있는 쪽이 뭔가를 보내려고 할 때까지끊어진 연결을 덮어씁니다.

따라서 방화벽이 SSH 연결을 끊고 SSH 연결에 문자 하나라도 입력하면 방화벽은 TCP 재설정을 SSH 클라이언트로 다시 보내며 연결이 끊어진 것을 확인할 수 있습니다.그러나 SSH 서버가 반드시 이를 인식하는 것은 아닙니다.서버가 사용자에게 아무 것도 보내려고 하지 않으면 TCP 연결에서 사용자의 입력을 기다리고 있을 수 있습니다. 서버가 아는 한 이 연결은 여전히 ​​연결되어 있지만 유휴 상태입니다.

-D이 특별한 경우에는 이전 SSH 세션이 여전히 연결되어 있다고 생각하더라도 해당 세션을 삭제하는 옵션이 필요합니다 .screen -DRscreenscreen

부작용으로 인해 서버는 screen초기의 끊어진 SSH 세션에서 출력("연결 끊김" 메시지 및 새 셸 프롬프트)을 보내려고 시도하고 방화벽은 TCP 재설정 등을 다시 보냅니다. sshd결국 네트워크 수준에서 끊어진 오래된 SSH 연결에 대한 정보를 얻고 정리합니다.

그러나 SSH 세션 시간 초과의 원인이 서버의 무언가로 인해 첫 번째 SSH 세션이 종료되는 경우, 예를 들어 서버 관리자는 ClientAliveCountMax0 sshd_configClientAliveInterval0이 아닌 값을 해킹으로 설정하여 비활성 상태일 때 효과를 얻습니다. 시간 초과가 시작되면 sshd이전 SSH 세션의 연결이 완전히 끊어지고 screen세션이 이미 분리된 상태에서 기다리고 있습니다. 이 경우에는 screen -R다시 연결하면 충분하지만... -D이 경우에는 옵션을 추가로 지정해도 나쁠 것이 없습니다.


그런데 이런 식으로 남용 ClientAliveInterval하고 ClientAliveCountMax설정하는 것은 sshd_config사용자 비활성 시간 초과를 설정하는 매우 신뢰할 수 없는 방법입니다.클라이언트는 자신이 수행 중인지 알지 못한 채 문제를 해결할 수 있습니다.. ClientAliveInterval이는 실제 사용자 활동이 아닌 SSH 연결 수준 활동을 모니터링하는 것이기 때문입니다 .

SSH 클라이언트 사용자가 네트워크 시간 초과를 경험하는 경우 ServerAliveInterval설정 ~/.ssh/config(또는 비OpenSSH 클라이언트의 경우 이에 상응하는 설정)에서 이를 설정할 수 있습니다. 클라이언트의 ServerAliveInterval설정이 방화벽의 연결 비활성 시간 초과보다 짧은 경우 SSH 클라이언트는 비활성 상태에서 암호화된 SSH "아직 거기에 있습니까?" 패킷을 자동으로 보내고 sshd서버는 이에 응답하여 비활성을 재설정합니다. 방화벽 타이머.

그러나 클라이언트를 더 짧은 시간 초과 값으로 설정하면 ServerAliveIntervalSSH 연결이 실제로 작동하는 동안 서버가 시간 초과에 도달하지 않으므로 소위 "사용자 비활성 시간 초과"가 해제됩니다.ClientAliveInterval

불행하게도 일부 보안 강화 표준에는 이러한 사용자 비활성 시간 초과 기반 해킹이 포함된 것으로 보이 ClientAliveInterval므로 일부 보안 감사자는 의도된 목적에 실제로 적합하지 않더라도 이를 요구할 수 있습니다.

관련 정보