양말이 아닌 ssh를 통한 http 프록시


30

질문은 간단하지만 답은 아닙니다.

ssh -D 8080 user@host

또는

ssh -gCNf -D 8080 user@host

또는

wathever with -D #

SOCKS를 지원하지 않는 임베디드 장치에서 http_proxy 변수와 함께 사용할 수있는 일종의 프록시가 필요합니다.

어떻게해야합니까?


그렇지 ssh -D user@host:8080않습니까?
ngen

나는 ssh와 함께 한동안 돌아왔다 .. vnc through ssh. 하지만 ssh를 통해 squid (http 프록시)를 사용한다고 가정 할 수 있습니다. 내가 지금 어떻게했는지를 기억할 수 없습니다. -D 'cos가 아닙니다 (알다시피 나보다 낫습니다). -D는 내가 기억하면 양말입니다.
barlop

@ngen : No. -D는 연결할 포트가 아니라 터널을 열 포트를 지정합니다. ( 호환성 때문에 연결 포트는로 지정 -p port되지 않았습니다 :port.)
grawity

답변:


33

방법 1 : SOCKS 업스트림 (예 : Polipo 또는 Privoxy) 사용을 지원하는 HTTP 프록시를 사용하십시오.

먼저 -D항상 SSH를 통해 터널을 설정 한 다음 SSH 터널을 사용하도록 HTTP 프록시를 구성하십시오 (예 : Polipo 구성).

proxyAddress = "::1"
proxyPort = 8118
socksParentProxy = "localhost:8080"
socksProxyType = socks5

마지막으로 앱을 사용하여 Polipo를 가리 킵니다 http_proxy=localhost:8118.

방법 2 :torsocks 래퍼 (또는 이전 tsocks) 내에서 프로그램을 실행하면 모든 연결이 투명하게 프록시됩니다. Tor와 함께 사용하기위한 것이지만를 포함한 모든 SOCKS 서버에서 작동합니다 ssh -D.

방법 3 : 서버 에서 HTTP 프록시 설정 한 다음이를 사용 ssh -L하여 액세스하십시오.


Privoxy가 최고의 솔루션입니다. 고마워요
Seyed Morteza

18

모든 -D결과는 SOCKS 서버입니다. 클라이언트가 SOCKS를 처리 할 수없는 경우 잊어 버리십시오 -D.

원격 호스트에서 HTTP 프록시를 실행하고 다음을 사용하여 전달해야합니다 -L.

ssh -f -N -n -L8080:127.0.0.1:8080 host

2
프록시를 실행하려면 "tinyproxy"가 매우 간단하고 기본적으로 이미 합리적으로 구성되어 있습니다. Ubuntu / etc 원격 호스트에서 "sudo apt-get install tinyproxy"를 입력 한 다음 위와 같이 포트 8888로 전달하십시오. "ssh -L8888 : 127.0.0.1 : 8888"
Jimbly

7

SSH를 통해 HTTP 프록시를 사용하려는 것과 동일한 문제가 있습니다. 많은 응용 프로그램이 HTTP 프록시 만 지원하므로 명령 줄 환경에서 HTTP 프록시를 쉽게 사용할 수 있습니다.

여러 페이지를 검색했지만 직접 수행 할 수는 없습니다 (Polipo, Privoxy 또는 tsocks와 연결할 수 있음).

며칠간의 작업 끝에 SSH를 통해 간단한 Golang 버전의 HTTP 프록시를 완성했습니다. mallory 와 함께 자유롭게 연주하십시오 .

현재 RSA 키 ($ HOME / .ssh / id_rsa에 위치) 및 비밀번호 인증 만 지원합니다.

hostSSH 서버 주소입니다 port입니다 22귀하의 관리자에 의해 변경되지 않은 경우. 서버 측은 sshd구성이 전혀없는 오래된 친구 입니다.

mallory -engine=ssh -remote=ssh://host:port

또는 사용자 이름 user

mallory -engine=ssh -remote=ssh://user@host:port

또는 사용자 이름 user과 비밀번호1234

mallory -engine=ssh -remote=ssh://user:1234@host:port

연결되면 HTTP 프록시가 localhost : 1315에서 제공됩니다.


4
ssh -L 8080:localhost:12345 user@host

그러면 로컬 시스템에서 포트 8080이 열리고 원격 시스템에서 볼 수 있듯이 모든 데이터가 localhost의 포트 12345로 전달됩니다.


2
잊지 말고, 원격 호스트에서 HTTP 프록시를 실행해야합니다. 포트 포워딩 자체는 도움이되지 않습니다.
Jonathan

2

원격 호스트에서 Privoxy를 실행 한 후 다음 -L옵션을 사용하여 SSH를 통해 Privoxy에 연결하십시오 .

-L [바인드 주소 :] 포트 : 호스트 : 호스트 포트
         로컬 (클라이언트) 호스트의 지정된 포트를 지정합니다.
         원격 호스트의 지정된 호스트 및 포트로 전달됩니다. 이
         로컬 측의 포트를 청취하기 위해 소켓을 할당하여 작동합니다.
         지정된 bind_address에 선택적으로 바인딩됩니다. 때마다
         이 포트에 연결하면 연결이 전달됩니다.
         보안 채널 및 호스트 포트에 연결
         원격 시스템에서 호스트 포트.

( 맨 페이지 소스 )


1

코르크 마개 (GPL)를 사용할 수도 있습니다

에 다음을 추가하십시오 .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p

corkscrew는 요청 된 역방향이 아닌 http 프록시를 통해 ssh를 실행합니다.
eMBee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.