원격 웹 서버에 액세스하기 위해 포트 전달에 다음 명령을 자주 사용합니다.
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 연결이 생기고 localhost
ssh 연결의 원격 부분은 해당 포트에서 연결을 설정하려고 시도합니다 localhost
( localhost
on이 remotehost
자신을 가리키므로).4567
질문의 좋은 점으로 돌아갑니다.
시스템의 포트에 다른 서비스가 있는 경우 1234
시스템에서 사용 가능한 다른 포트를 선택할 수 있습니다.