첫째, 혼란을 예상하십시오. 이것은 실제로 일반적인 tmux 질문과 반대되는 질문입니다.
SSH 터널이 실패하더라도 tmux 세션이 유출되지 않도록 하는 방법동일한 SSH 세션에서 여러 셸을 실행할 때 한 터미널에서 세션과 tmux 인스턴스를 완전히 종료하면 다른 터미널에서 tmux 인스턴스가 계속 누출될 수 있습니다. 예를 들어 일부 배경 창에 숨겨진 리소스 소비 프로세스를 종료하는 것을 잊어버린 경우 이로 인해 모든 종류의 문제가 발생할 수 있습니다. 쿨하지 않아.
나는 tmux를 거의 독점적으로 터미널 에뮬레이터로 사용하며 "분리" 기능은 거의 사용하지 않습니다. 터미널의 단일 SSH 세션을 통해 동일한 시스템에 액세스하는 여러 tmux 인스턴스를 갖는 것은 드문 일이 아닙니다. 백그라운드 프로세스를 실행하려면 disown
셸에서 요청하거나 systemd에서 실행합니다. 불행하게도 제가 매일 사용하는 시스템 중 다수는 systemd로 업그레이드되지 않았으며 가까운 시일 내에 업그레이드될 가능성이 낮으므로 이는 KillUserProcesses
선택 사항이 아닙니다.
이상적으로는 명령줄 스위치를 사용하여 tmux를 호출하여 백그라운드에서 실행되는 것을 방지하고 별칭을 tmux
.
어떤 SSH 터널인가요?
하나의 OpenSSH 연결은 여러 세션을 제공합니다.
어떤 tmux 세션인가요?
SSH 세션당 하나씩 별도의 tmux 인스턴스.
무슨 누출?
tmux 인스턴스 누출. 예: SSH를 통해 머신에 연결합니다. 동일한 연결을 통해 다른 쉘 세션을 시작하십시오. 각 SSH 세션에서 tmux 인스턴스를 시작합니다. 이제 두 개의 tmux 인스턴스가 생겼습니다. 한 세션에서 tmux를 중지 <C-d>
한 후( 다시 ) SSH 연결을 중지합니다 <C-d>
. 다른 SSH 세션은 닫히지만 해당 세션에서 실행 중인 tmux 인스턴스와 모든 하위 프로세스가 유출됩니다.
설명해주세요: (1) 현재 어떤 설정이 있나요?
재고 OpenSSH, 재고 tmux, 일부 쉘.대부분 역방향 SSH 연결 마음대로 다시 만들 수는 없지만 상관없습니다.
(2) 무엇을 예방하고 싶은가?
프로세스는 다른 tmux 세션에서 활성 상태로 유지됩니다.
이는 SSH를 통해 연결된 다른 상자이므로 목표는 연결이 종료된 후 단일 tmux 인스턴스가 활성 상태로 유지되는 것을 방지하는 것입니다. 그리고 분할창과 배경창을 많이 사용하기 때문에 자식 프로세스를 꼭 모아보고 싶습니다.
답변1
새 세션으로 ssh
로깅할 때 tmux attach -d || tmux new
기존 tmux
세션을 추가하거나 세션이 없는 경우 새 세션을 생성하는 tmux
등의 방법을 사용할 수 있습니다. 이렇게 하면 연결이 끊어졌을 때 tmux
세션이 ssh
백그라운드에서 실행되는 것을 방지할 수는 없지만 이러한 버려진 세션이 누적되는 것을 방지할 수 있습니다.
답변2
다음을 사용하면 문제를 완전히 피할 수 있다고 생각합니다.모쉬.
Mosh는 간헐적인 연결을 지원하며 mosh-server
연결이 제대로 끊어지지 않은 경우(예: 서버에서 연결이 끊어지면 클라이언트를 강제로 닫는 경우)에만 인스턴스가 누출됩니다.