SSH 터널에 호스트 이름을 할당하는 방법


16

ssh root@my.server.ip -g -L 4321:localhost:28017 MacBook에서 호스팅 제공 업체의 전용 서버로 터널을 설정하는 데 사용 하고 있습니다. 잘 작동한다. 이제 원격 서버의 여러 관리 사이트 (MongoDB 상태 페이지, RabbitMQ 페이지 등)가 모두 다른 포트에 액세스하려고합니다. 모두 원격 시스템에서 127.0.0.1에 바인딩됩니다. 이 ssh 명령을 어떻게 조정할 수 있습니까?

  • 터널에 이름을 지정하고 브라우저에서 "my.tunnel.name"을 사용하십시오.
  • 브라우저에서 원격 포트를 정의 할 수 있습니다. 다른 사이트를 호출 할 수 있도록 my.tunnel.name:port에 연결하고 싶습니다.

ssh로 가능합니까? 맨 페이지를 읽었고 지금 이틀 동안 구글을 검색했지만 작동하지 않는 것 같습니다.

-편집 된 2012-06-01 23 : 36-- 제공된 답변과 덕분에 포트 전달이 현재 사용 중입니다.

ssh user@remote.server -D 4321

브라우저에서 프록시로 이것을 설정할 수 있으며 브라우저는 localhost : anyport에 대한 모든 요청을 마치 원격 서버에서 이루어진 것처럼 처리합니다. 브라우저는 원격 서버 사이트 전용이므로 이름을 사용할 필요가 없습니다.

답변:


12

당신이 설명하는 것은 불가능합니다. 그러나 여전히 좋은 소식이 있습니다.

그러나 SSH 서버와의 동적 연결을 설정하는 것이 가능합니다. 브라우저의 프록시 설정을 가리키고 터널을 프록시 서버로 사용할 수있는 로컬 컴퓨터의 포트가 열립니다. 그러나 SSH 서버가있는 시스템에서 브라우저가 실행중인 것처럼 호스트 이름 / ip 및 포트를 브라우저에 입력해야합니다.

명령은 다음과 같습니다. ssh user@server.example.com -D 1234
그런 다음 브라우저의 프록시를 가리 킵니다 localhost:1234.

따라서 서버 A로 터널링하고 서버 B에 연결하려면 서버 A에서 실행중인 브라우저에 입력 할 주소를 브라우저에 입력하십시오. 서버 A에서 실행중인 브라우저가 서버 B에 연결할 수없는 경우 ( 서버 B의 프로세스는 127.0.0.1에서만 수신하지만 여전히 연결할 수 없습니다. 서버가 하나만있는 것처럼 들리지만 이것이 확실하다는 것을 확인하고 싶었습니다.

하나의 서버 만있는 경우 동적 연결을 사용하여 서버에 터널링하고 프록시를 설정하십시오. 그런 다음 브라우저에 "localhost : 1234"를 입력하면 포트 1234의 원격 서버에서 실행되는 서비스에 연결됩니다.

보안 측면 참고 : 절대 루트가 SSH로 들어갈 수있는 서버를 절대 설정하지 마십시오! 심각한 보안 결함. 일반 사용자 계정 (su 또는 sudo를 허용하는 사용자) 및 SSH를 해당 사용자로 작성하십시오.


2
-D 1234 (동적 포트 전달)를 사용해야하는 경우 -L 1234 (로컬 포트 ​​전달)를 사용하고 있습니다. 또한 -g를 사용하지 마십시오. -g는 원격 호스트가 사용자의 포워드에 연결할 수 있음을 의미하며 이는 워크 스테이션에서이 작업을 수행하는 경우 원하지 않습니다.
Mattias Ahnberg

고마워, 크리스 나는 이미 그것을 시도했다. 포트만 지정된 상태에서 ssh 명령을 사용할 수 없습니다. "잘못된 로컬 전달 사양 '1234'"를 반환합니다.
brains_at_work

@ matthias-ahnberg : 훌륭합니다. 동적 전달을 통해 이제 포트를 프록시로 사용할 수 있으며 localhost : someport 호출이 원격 서버로 전달됩니다.
brains_at_work

@MattiasAhnberg 와우, 무슨 뇌 방울. 수정 해 주셔서 감사합니다.
Chris S

이 프로세스를 따랐지만 firefox에서 "연결이 재설정되었습니다"오류가 발생했습니다.
rivu

23

루프백 어댑터가 기본적으로 127.0.0.0/8 네트워크의 모든 주소에 응답한다는 사실을 사용하여 이름을 지정할 수 있습니다.

따라서 포트 4321에 바인딩하는 대신 127.1.2.3:4321에 바인딩 할 수 있습니다. 그런 다음 사용했던 루프백 주소에 이름을 매핑하는 호스트 항목을 설정하면 foo.bar가에 매핑됩니다 127.1.2.3.

관리 워크 스테이션의 SSH 구성에는 루프백 범위의 일부 주소에 바인딩되도록 많은 터널이 구성되어 있으며 호스트 파일에 항목이 있으므로 동일한 포트를 사용하여 많은 터널을 병렬로 열고 터널을 통해 구별합니다. 이름.

이렇게 연결하면

ssh root@my.server.ip -g -L 127.1.2.3:4321:localhost:28017

그리고 호스트 파일에는 다음과 같은 줄이 있습니다.

127.1.2.3 my.tunnel.name

그런 다음 로컬 컴퓨터에서 my.tunnel.name:4321에 연결할 수 있어야합니다.

네트워크에 추가 IP 주소 공간이 있으면 ssh 클라이언트가 연결되어 있으면 이더넷 인터페이스에 보조 주소를 할당하고 실제 IP 중 하나를 사용한 다음 다른 시스템을 사용할 수있게하려면 DNS에 항목을 설정하십시오 SSH 터널을 사용합니다.

-L 옵션 -L [bind_address:]port:host:hostport을 사용하면 로컬 시스템에서 유효한 IP 주소를 사용하여 바인딩 할 수 있습니다. -g다른 호스트가 ssh 터널을 통해 연결할 수있게 하려면 옵션도 포함해야합니다 .


osx의 루프백에 IP를 추가해야했습니다. ifconfig l0 alias 127.0.1.1 255.255.255.0그렇지 않으면 좋은 팁!
devians 2018 년

1
쉘을 작성하지 않으려면 -N명령 끝에서 실행하십시오. 이렇게하면 SSH 연결이 아니라 터널이라는 것을 기억하기가 더 쉽습니다.
mlissner

사용할 때 127.1.2.3내 macbook 에서이 작업을 수행해야했습니다 : 인터페이스에 새 주소로 ifconfig lo0 alias 127.1.2.3 255.255.255.0추가 127.1.2.3됩니다 lo0.
Donn Lee

5

SSH 터널을 사용하여 동적 애플리케이션 레벨 포트 전달 (기본적으로 프록시 프록시)을 작성한 후이를 통해 애플리케이션을 지정하십시오. 동적 터널을 만들려면 다음과 같이 연결하십시오.

ssh user@host.domain.com -D 127.0.0.1:31337

그런 다음이를 SOCKSv5 프록시로 사용하도록 애플리케이션을 구성하십시오.

호스트 이름을 바인딩하려면 /etc/hosts127.0.0.1을 가리키는 항목을 추가하십시오 .하지만 첫 번째 터널에는 127.0.0.2를 추가하고 두 번째 터널에는 127.0.0.3을 추가하는 것이 더 좋은 방법입니다. 127.0.0.1에 대한 별칭을 추가하면 때때로이 별칭이 localhost의 다른 명령 조회에 혼동 될 수 있습니다!

웹 브라우저에서이를 부드럽게 사용하려면 프록시 애드온을 사용할 수 있습니다. 예를 들어 Chrome 웹 브라우저를 선호 하며이 브라우저에는 애드온을 사용합니다 Proxy Switchy!. https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj에서 다운로드 할 수 있습니다.

이 애드온을 구성 할 때 여러 개의 별도 프록시를 정의한 다음 호스트 / URL의 정규식을 바인딩하여 특정 프록시를 사용할 수 있습니다. 이렇게하면 수동으로 전환하지 않고도 항상 올바른 터널을 통해 올바르게 리디렉션됩니다. 단계에 대한 추가 설명이 필요하면 알려주십시오!


애드온 팁 감사합니다. Chrome도 사용하기 때문에 FireFox를 열어 둘 필요가 없습니다.
brains_at_work
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.