여러 Linux 시스템 컨테이너 간의 SSH 투명 라우팅

여러 Linux 시스템 컨테이너 간의 SSH 투명 라우팅

여러 컨테이너를 실행하는 시스템이 있습니다. 각 컨테이너는 특별히 제작된 Linux 시스템이며 각 컨테이너에는 SSH 서버가 활성화되어 있습니다. 호스트에 대한 새로운 SSH 연결을 관리하고 해당 연결을 표준에 따라 특정 컨테이너로 투명하게 라우팅하는 엔터티를 만들고 싶습니다(마녀도 SSH 수신 기능을 가지고 있습니다). 예를 들어 ProxyCommand를 사용하여 컨테이너에 대한 연결을 투명하게 라우팅할 수 있다는 것을 알고 있습니다. 내 문제는 다른 조건에 따라 연결을 다른 컨테이너로 "동적으로" 재라우팅하고 싶다는 것입니다. 예를 들어 호스트가 컨테이너 A에 대한 연결을 감지하고 바이너리 다운로드를 시작하면 SSH 연결을 투명하게 컨테이너 B로 재라우팅하고 거기에서 다운로드를 시작합니다. . 나는 시스템 사용자가 시스템을 사용할 때 자신이 컨테이너에 있고 연결이 서로 다른 컨테이너 간에 라우팅된다는 사실을 깨닫지 못하는 방식으로 이 작업을 수행하고 싶습니다.

이해에 도움이 될 수 있는 완전한 예는 다음과 같습니다. 클라이언트가 SSH에 연결합니다. 이 연결은 컨테이너 A와 B가 실행 중인 호스트에 대해 이루어집니다. 호스트에는 기본적으로(또는 일부 조건에 따라) 들어오는 SSH 연결을 컨테이너 A로 리디렉션하는 프로세스가 있습니다. 호스트는 패킷을 스니핑하고 클라이언트가 전달한 명령을 검사하여 컨테이너 A에서 클라이언트가 수행한 작업을 지속적으로 분석합니다. 호스트가 특정 명령(예: "wget")을 감지하면 호스트는 SSH 연결을 컨테이너 A에서 컨테이너 B로 투명하게 다시 라우팅하고 클라이언트는 컨테이너가 변경되었음을 인식하지 못한 다음 컨테이너에서 B 다운로드를 시작합니다.

기본 조작

저는 Docker를 사용하고 있으며 연결을 교환할 컨테이너는 항상 동일한 환경(동일한 OS 및 버전)을 갖습니다.

편집하다:

다음 예와 같이 다른 상황에 적용할 수 있도록 연결을 다시 라우팅하여 이 작업을 수행하는 방법을 원합니다. 컨테이너 A가 있는 호스트 X가 있습니다. 클라이언트가 호스트 X에 연결되면 SSH 연결은 수신 SSH와 동일한 네트워크에 있는 호스트 Y로 다시 라우팅됩니다. 이전과 마찬가지로 호스트 X는 조건에 따라 사용자에게 투명하게 SSH를 호스트 Y에서 컨테이너 A로 다시 라우팅합니다.

라우팅, iptables 또는 기타 연결 리디렉션 방법을 사용하여 이를 달성하려면 어떻게 해야 합니까?

편집 2:

기본적으로 명백한 재연결 없이 SSH를 한 시스템에서 다른 시스템으로 재라우팅하는 방법이 필요합니다. 가장 간단한 경우는 클라이언트로부터의 연결을 처리하는 하나의 머신(A)입니다. 인터넷의 클라이언트는 이 컴퓨터(A)에 연결하고 ProxyCommand를 사용하여 연결을 컴퓨터(B)로 리디렉션합니다. 단순화를 위해 5분 후에 기계(A)에서 스크립트를 실행하여 마법을 작동시키는 타이머가 있다고 가정해 보겠습니다. 내가 원하는 것은 이 SSH 연결을 컴퓨터(B)에서 컴퓨터(C)로 라우팅하는 방법입니다. 까다로운 부분은 사용자(클라이언트)가 B에서 C로의 이러한 변경을 알아차리지 않기를 바라는 것입니다. 클라이언트가 라우팅된 연결과 이를 사용할 때 원래 연결했던 컴퓨터의 변경 사항을 알아차리지 않기를 바랍니다. 따라서 이 "환상"에 대해 클라이언트에 대한 원래 연결을 유지하면서 연결을 머신(A)의 B에서 C로 라우팅하고 클라이언트가 머신(C) 대신 다음 명령을 실행할 수 있는 방법이 있는지 상상해 봅니다. )는 머신(B)이 실행 중일 때 명령을 실행합니다.

답변1

아니요;

이를 견고한 방식으로 달성하는 것은 불가능합니다. 물론 스크립트로 셸을 래핑하여 무언가를 해킹할 수 있지만, 사소한 용도로 사용하면 수행 중인 작업이 즉시 드러나고 손상될 수 있습니다. 게다가 누군가가 이것을 원하는 타당한 이유가 없습니다. 궁극적으로 달성하려는 것이 무엇이든 더 나은 방법이 있습니다.

이것이 명시되지 않은 최종 목표에 맞는 경우 CRIU를 사용하여 실시간 마이그레이션을 수행할 수 있습니다. https://linuxcontainers.org/lxd/introduction/

관련 정보