사용자 정의 호스트 이름을 사용한 SSH 포트 전달

사용자 정의 호스트 이름을 사용한 SSH 포트 전달

원격 웹 서버에 액세스하기 위해 포트 전달에 다음 명령을 자주 사용합니다.

ssh user@remotehost -L 1234:localhost:1234

그럼 이제 들어갈 수 있겠네요http://localhost:1234내 브라우저에서 원격 호스트의 웹 서버에 접속합니다. 지금 하고 싶은 것은 localhost가 아닌 다른 이름을 사용하는 것입니다. 예를 들어, 일부 매개변수를 사용하여 ssh를 호출하여 다음을 입력할 수 있습니까?http://remotealias:1234내 브라우저에서 원격 웹 서버에 액세스하시겠습니까? 이는 내 로컬 컴퓨터의 포트 1234에서 동시에 실행되는 다른 서비스가 있을 때(그리고 많은 포트:호스트-터널 매핑을 기억하고 싶지 않을 때) 특히 유용합니다.

ssh 명령만으로는 이것이 가능하지 않다면 설명된 대로 작동하도록 내 컴퓨터에서 일부 로컬 구성을 편집해야 하는 솔루션에도 관심이 있습니다.

답변1

예. 로컬 시스템의 각 호스트에 대해 IP를 생성할 수 있습니다.

ip address add 122.0.0.2/32 dev eth0
ip address add 122.0.0.3/32 dev eth0

호스트 파일을 편집하세요

echo "127.0.0.2 remotehost1.com" >> /etc/hosts
echo "127.0.0.3 remotehost2.com" >> /etc/hosts

그런 다음 각 IP는 호스트 IP로 전달됩니다(도메인을 통한 직접 액세스는 호스트 파일 변경으로 인해 중단됨).

ssh user@$remotehost1_IP -L 127.0.0.2:80:localhost:1234
ssh user@$remotehost2_IP -L 127.0.0.3:80:localhost:1234

그런 다음 평소처럼 웹 브라우저를 사용하십시오.

http://remotehost1.com
http://remotehost2.com

그러면 자체 SSH 터널을 통해 자체 로컬 IP의 각 원격 FQDN이 터널링됩니다.

답변2

당신이 할 때

ssh [email protected] -L 1234:localhost:5678

호스트 b.company.com에서는 다음이 발생합니다.

  • 호스트 B에서 ssh는 포트 1234에서 수신 대기를 시작합니다.
  • localhost호스트 A에서 포트 5678을 통해 (즉, 호스트 A에 다시 연결) 연결을 설정합니다.
  • 이 두 끝점의 트래픽은 A와 B 간의 SSH 연결을 통해 전달됩니다.

따라서 최종 결과는 호스트 A의 포트 5678이 호스트 B의 포트 1234를 통해 액세스될 수 있다는 것입니다.

이것을 입력해야 하는 이유 localhost는 호스트 A가 보호된 네트워크의 진입점인 "점프 서버"가 될 수도 있기 때문입니다. 따라서 호스트 B에서 직접 호스트 C에 액세스할 수 없지만 호스트 B에서 호스트 A에 액세스하고 호스트 A에서 호스트 C에 액세스할 수 있는 경우 다음을 수행할 수 있습니다.

ssh [email protected] -L 1234:c.company.com:5678

이렇게 하면 호스트 B와 A 사이, 호스트 A와 C 사이에 연결이 설정되어 호스트 C의 포트 5678을 호스트 A의 포트 1234로 터널링합니다.

이로 인해 두 가지 결과가 발생합니다.

  • 다른 서비스에 대해 클라이언트(호스트 B)에서 이미 포트 1234를 사용하고 있는 경우 터널에 사용할 수 없습니다. 다른 포트를 사용해야 합니다(그러나 선택할 수 있는 포트가 많습니다).

  • 브라우저에서는 항상 터널의 로컬 끝점, 즉 에 연결됩니다 localhost. 원격 호스트에 이름을 할당해도 이 내용은 변경되지 않습니다.

아니요, 그건 당신이 원하는 것이 아닙니다.

편집하다

충분히 명확하지 않은 경우 다른 포트 번호를 사용하여 매우 쉽게 로컬 서비스를 실행할 수 있습니다. 따라서 이러한 방식으로 호스트 A, B, C에 액세스하려고 하며 호스트는 모두 포트 80에서 서비스를 제공하고 있으며 포트 80에서 자체 웹 서버를 실행한다고 가정해 보겠습니다. 그러면 당신은 할 수 있습니다

ssh user@hosta -L 5000:localhost:80
ssh user@hostb -L 5001:localhost:80
ssh user@hostc -L 5002:localhost:80

이제 브라우저에 http://localhost:5000, http://localhost:5001를 입력하여 액세스 할 수 있습니다 http:/localhost:5002. 그리고 http://localhost:80여전히 자신의 로컬 서버에 액세스할 수 있습니다.

많은 수의 IP 주소나 원격 별칭을 할당하는 등 복잡한 구성이 실제로 필요하지 않습니다.

답변3

SSH를 통해 포트 전달을 설정할 때 포트 your_machine:port(컴퓨터의 관점에서)와 machine:port연결된 컴퓨터의 관점 사이에 브리지를 설정합니다.

즉, 명령을 호출하면

ssh user@remotehost -L 1234:localhost:4567

remotehost컴퓨터의 포트(주소) 에 연결하면 1234플러스에 ssh 연결이 생기고 localhostssh 연결의 원격 부분은 해당 포트에서 연결을 설정하려고 시도합니다 localhost( localhoston이 remotehost자신을 가리키므로).4567

질문의 좋은 점으로 돌아갑니다.

시스템의 포트에 다른 서비스가 있는 경우 1234시스템에서 사용 가능한 다른 포트를 선택할 수 있습니다.

관련 정보