SSH 터널을 통해 wget이 작동하지 않는 이유는 무엇입니까? 프록시 블록 ssh-client는 무엇을 수행합니까?

SSH 터널을 통해 wget이 작동하지 않는 이유는 무엇입니까? 프록시 블록 ssh-client는 무엇을 수행합니까?

테스트하기 위해 랩톱에서 사이트로 로컬 SSH 터널을 설정하고 ssh-server사이트 페이지를 다운로드(또는 브라우저에서 확인)하여 이를 시도했습니다.

터널은 다음과 같이 만들어졌습니다.

$ ssh -L 9999:www.gnu.org:80 ssh-server

터널이 서버의 nc프로그램 및 캐릭터와 얼마나 잘 작동하는지 확인합니다. ssh-server 와 서버에서 ~#실행하여 http 요청을 수행할 수 있는지 확인했습니다. 둘 다 오류 없이 실행됩니다.wgetlynx

하지만 wget --no-proxy localhost:9999노트북에서 실행하면 오류 403이 발생합니다.

를 사용하여 동일한 작업을 수행할 수 있습니다 ssh ssh-server 'wget -O - http://www.gnu.org/' >> whatever. 그런데 왜 터널이 작동하지 않습니까?

그래서 정확히 무슨 일이 일어나고 있는지, 그리고 어떤 종류의 것들이 프록시에 의해 허용되지 않는지 알아내려고 노력하고 있습니다.

내 생각엔 프록시가 SSH 클라이언트가 http 요청을 수행하는 것을 특별히 방해하고 있는 것 같습니다. 그렇습니까?

그렇다면 프록시는 ssh-client와 다른 프로그램을 어떻게 구별합니까? ssh-client에서 보낸 요청과 다른 프로그램에서 보낸 요청을 구별할 수 있나요?

"ssh 클라이언트를 다른 프로그램으로 보호"하는 일반적인 방법(또는 프록시를 통과하는 다른 방법)은 무엇입니까?

폴리스티렌 누군가가 SSH 터널 및 기타 항목을 테스트하기 위해 열려 있는 무료 SSH 서버의 주소를 댓글에 썼다면 좋을 것입니다. (보통 SSH 서버는 무료 터널링을 허용하지 않습니다.)

답변1

HTTP 프록시나 SSH 터널을 설정하지 않았거나 사용하려고 시도하지 않았습니다. 대신 SSH를 통한 포트 전달을 사용합니다.

TCP 포트 전달은 HTTP에서 작동하지 않습니다. HTTP URL에 액세스하면 두 가지 다른 지점에서 URL 도메인을 사용합니다. 1 - 메시지를 보내려는 IP 주소를 찾습니다. 2 - HTTP 메시지의 호스트 헤더에 사용됩니다. 이를 통해 IP 주소는 다음 웹사이트에 서비스를 제공할 수 있습니다.많은 종류의영역.

따라서 에 액세스하면 http://localhost:9999/HTTP 메시지에 헤더 줄이 포함됩니다 Host: localhost:9999. GNU 웹 서버는 명명된 웹사이트를 제공하지 않으며 localhost:9999액세스가 거부됩니다(403).

(403은 사양을 준수합니다. 이론적으로 403은 약간 비우호적이므로 메시지가 있는 400을 선호해야 합니다. 개인적으로 저는 일반 DynDNS 사이트에서 403을 사용합니다. 사양 보안을 위한 것은 아니지만 FORBIDDEN이 너무 좋기 때문에 그렇게 되길 바랍니다. 내 웹 서버가 다른 웹 서버를 차단하는 것을 거부할 만큼 강력합니다(예: DNS 캐시 만료의 경우).

-D편리한 방법은 SOCKS 프록시를 설정하는 SSH "동적 포트 전달" 옵션을 사용하는 것입니다 . 불행하게도 wget에는 SOCKS 프록시 옵션이 없습니다( curl있지만).

관련 정보