역방향 SSH 터널

역방향 SSH 터널

내 로컬 네트워크에 gitlab 서버가 있고 네트워크 외부에서 SSH를 통해 액세스할 수 있는 서버가 있습니다.

다음을 사용할 때 SSH를 사용할 수 있도록 서버를 구성하는 방법이 있습니까?

ssh [email protected]

로컬 네트워크의 Gitlab 서버로 보내나요? Nginx 리버스 프록시와 비슷하지만 ssh를 사용합니다.

편집하다:

둘러보다가 뭔가 발견했어요여기이것이 내가 원하는 것 같습니다.

로드 밸런서를 통한 액세스

보다 표준적인 Git 환경을 제공하려면 지정된 GitLab 노드를 가리키도록 외부 로드 밸런서를 수동으로 설정하고 구성할 수 있습니다. 이렇게 하면 트래픽이 포트 22에서 GitLab 노드의 포트 2222로 라우팅됩니다. 그런 다음 DNS 레코드가 로드 밸런서를 가리키도록 할 수 있습니다.

이것은 내가 하고 싶은 일처럼 보이지만 어떻게 달성할 수 있습니까?

편집 2:

다음은 내가 하려는 작업을 명확히 설명하는 그림입니다.

(빨간색 선도 인터넷을 통과해야 합니다.)

차트

답변1

nginx와 같은 HTTP 서버는 요청의 HTTP/1.1 호스트 헤더로 전송되기 때문에 호스트 이름을 기반으로 프록시를 수행할 수 있습니다. SSH에는 가상 호스트 개념이 없으며 클라이언트는 호스트 이름을 전혀 보내지 않습니다.

세 가지 옵션이 있습니다:

  • 포트 전달을 사용하여 gitlab 서버를 직접 사용할 수 있게 만드세요.
  • (추가) IPv4 또는 IPv6 주소를 통해 gitlab 서버를 사용할 수 있게 만드세요.
  • 네트워크에 SSH 터널을 만들고 이 터널을 통해 Git 서버에 대한 SSH 연결을 프록시합니다.

포워드 포트

이는 아마도 "공용 서버"를 방해하는 가장 쉬운 방법일 것입니다. 포트 2222를 192.168.2.26:22로 전달하도록 게이트웨이를 설정합니다. 그런 다음 연결을 사용합니다. 의 경우 유사한 URL을 사용하세요.ssh -p2222 [email protected]gitssh://[email protected]:2222/repo.git

또는 다음을 사용하여 파일을 생성하는 경우 또는 을 사용할 수 있습니다.ssh://[email protected]/repo.git[email protected]:repo.git~/.ssh/config

Host git.example.com
    Port 2222

IPv4 또는 IPv6 주소 추가

홈 네트워크가 있는 경우 IPv4 주소를 얻는 것이 불가능할 수 있지만 일부 상용 공급자는 IPv4 주소를 얻을 수 있습니다. 네트워크가 IPv6(종단 간)을 지원하는 경우 불쾌한 프록시나 NAT 해킹 없이 일반 라우팅을 사용할 수 있습니다.

SSH 터널

ProxyCommand이 옵션을 사용하여 SSH 연결이 프록시되는 명령을 지정할 수 있습니다 git.example.com. 귀하의 경우 "공용 서버"는 프록시이므로 명령은 해당 서버에 연결되어야 합니다.

구성 조각부터 시작해 보겠습니다 ~/.ssh/config.

Host git.example.com
    ProxyCommand ssh -W %h:%p [email protected]

이 코드 조각에서 옵션은 표준 입력 및 출력을 해당 호스트(git.example.com)로 -W %h:%p확장 하고 리디렉션합니다. -W git.example.com:22이를 통해 로컬 SSH 클라이언트가 gitlab 서버와 통신할 수 있습니다. 예를 들어 임의의 URL을 다시 사용할 수 [email protected]:repo.git있으며 프록시는 git 클라이언트에 투명합니다.

관련 정보