SSH 서버를 통해 파일을 다운로드하는 방법은 무엇입니까?


31

미국에 서버 (Linux 상자 B)와 내 홈 PC (Linux 상자 A)가 있고 웹 사이트 C에서 파일을 다운로드해야합니다.

문제는 A에서 직접 파일을 다운로드하는 것이 매우 느리므로 B에 로그인 할 때 파일을 다운로드하고 sftpA에서 파일을 가져와야한다는 것입니다.

한 줄 명령을 통해 파일을 다운로드하고 B를 프록시로 직접 사용할 수있는 방법이 있습니까?

답변:


46

(이상한 상황, 삼각형 라우팅 과 같은 것이 인터넷 라우팅에 적용되지 않습니까?)

어쨌든,에, 다음을 시도 , 로 B 로모그래퍼 인수ssh-D

ssh -D 1080 address-of-B

SOCKS5 프록시로 작동 127.0.0.1:1080하는 SOCKS5 프록시 연결을 지원하는 모든 제품에서 사용할 수 있습니다. 분명히wget 환경 변수를 사용 하여이 작업을 수행 할 수 있습니다

export SOCKS_SERVER=127.0.0.1:1080
wget http://server-C/whatever

때때로 curl더 편리 하다는 점에 유의하십시오 (즉 wget, SOCKS5를 통해 호스트 이름 조회를 수행 할 수 있는지 잘 모르겠습니다 . 또한 Firefox는 이러한 SOCKS5 프록시를 통해 완벽하게 작동 할 수 있습니다.

편집 이제 방금 한 줄 솔루션을 찾고 있음을 알았습니다 . 글쎄, 어때?

ssh address-of-B 'wget -O - http://server-C/whatever' >> whatever

즉, wget-fetched 출력을 stdout로 리디렉션하고 로컬 출력 ( 원격 ssh실행 에서 wget)을 파일로 리디렉션 합니다.

이것은 작동하는 것처럼 보이며 wget출력은 약간 혼란 스럽습니다 ( " Save to- ") . 호출 에 추가 -q하여 제거 할 수 있습니다 wget.


6
분명히 SOCKS_SERVER환경 변수는 Ubuntu 14.04에 영향을 미치지 않습니다.
kasperd 2016 년

4
에 따르면 이 다른 대답 , wget에 대한 지원이없는 SOCKS_SERVER변수. 그 대답은 curl --socks5-hostname또는 사용을 제안 curl --socks5합니다.
Denilson Sá Maia

@kasperd, 그래서 그것이 작동하지 않는 우분투입니까, 아니면 변수가 wget과 전혀 관련이 없습니까? 변수가 socksify대신 있을 수 있습니다 .
cnst

@ cnst 나는 wget의 어떤 버전이 양말을 지원한다는 증거를 보지 못했다. socksify설정이 아니라 별도의 프로그램입니다.
kasperd

따라서 기본적으로에 SOCKS_SERVER영향을 미치 려면 ports.su/security/dantewget 를 설치 한 다음 그냥 대신 실행해야 합니다.socksify wgetwget
cnst

3

다른 방법은 일반적으로 세션에 B시작하는에 로그인하는 것 screen입니다. 거기에서 wget파일을 모두 하나의 디렉토리로 만듭니다.

그리고 프로그램이 행복하게 실행될 수 있습니다. 화면에서 분리하지만 백그라운드에서 실행되도록하십시오.

다운로드가 완료된 경우 (아마도 더 일찍) 데이터 BA사용하여 rsync내 환경 설정으로 이동할 수 있습니다 .


2

다른 질문에 대한 또 다른 대답에서 영감을 얻은 proxyproxys-ng (새로운 버전의 proxychains )를 사용하는 것이 좋습니다 .

  1. proxychains-ng를 다운로드, 컴파일 및 선택적으로 설치 하십시오 .
  2. 크리에이트 proxychains.conf현재 디렉토리, 또는 파일 ~/.proxychains/proxychains.conf, 또는를 /etc/proxychains.conf.
    • 또는 다른 곳이나 다른 이름으로 하나의 파일을 작성하고 -f명령 행 인수 또는 PROXYCHAINS_CONF_FILE환경 변수 를 통해 지정 하십시오.
    • 샘플 설정 파일 이 없습니다. 가장 관련성이 높은 옵션이 맨 끝에 있습니다.
  3. 당신에 proxychains.conf파일 추가 :

    [ProxyList]
    socks5 127.0.0.1 1234
    
  4. 를 실행하십시오 ssh -D 1234 your_host_b. 이것은 ssh가 localhost의 포트 1234에서 청취하고 원격 호스트를 SOCKS 프록시로 사용하게합니다.

    • 또는 ssh -ND 1234 your_host_b대신 실행하십시오 . -Nssh가 원격 서버에서 명령을 실행하지 못하게합니다 (즉, 쉘을 열지 않습니다).
  5. 다음을 실행하십시오 proxychains4 yourcommandhere yourparametershere. 몇 가지 예를 참조하십시오.
    • proxychains4 wget -O - http://ifconfig.co/
    • proxychains4 -q links http://ifconfig.co/

2

옵션 0 :

에서 wgetSOCKS5 프록시 와 함께 사용하려면 옵션을 유틸리티 와 함께 사용하려면 패키지 ssh를 설치해야 합니다.security/danteSOCKS_SERVERsocksify

sudo pkg_add dante

후속 적으로 백그라운드에서 SSH 연결을 엽니 다.

ssh -N -C -D1080 user@hostB &

그리고 socksify를 통해 SOCKS5 프록시를 통해 wget을 사용하십시오.

env SOCKS_SERVER=127.0.0.1:1080 socksify wget http://website-C

옵션 1:

파일을 stdout서버에 파이프하고 stdin워크 스테이션 에서 파일을 읽으십시오 .

ssh -C user@hostB "wget -O- http://website-C" >> file-from-website-C

1

상자 A에서 상자 B까지 ssh 터널을 수행하고 상자 A의 라우팅 테이블에 추가하면 해당 웹 사이트 C는 터널을 통해 상자 B로 연결할 수 있습니다. 상자 B에서 패킷 전달을 허용해야합니다.

여기 당신은 아주 좋은 단계별 튜토리얼을 볼 수 있습니다 ...


1

컴퓨터 B에 터널을 만들어야합니다. 그 호출을 웹 사이트 C로 리디렉션합니다. 그러나 ISP가 일부 제한 사항이 아닌 한 이것이 더 빠른 이유에 대해 의아해합니다.

나는 oneliner를 모른다. 그러나 이것은 훨씬 더 복잡하지 않다.

기계 A에서, 당신은 (11111을 무작위로 가져갔습니다.> 1024 이상이라면 원하는 것을 취할 수 있습니다. 그렇지 않으면 루트가되어야합니다)

ssh -f -C -N -L 11111:C:80 username@B

B의 사용자 이름은 B에 연결하는 데 사용하는 사용자 이름입니다. 이렇게하면 컴퓨터 B의 포트 11111에 터널을 생성하여 컴퓨터 C의 포트 80 (HTTPS의 HTTP 사용 443에서 웹 사이트 사용)으로 리디렉션합니다. 순서 ;) )

그런 다음 컴퓨터 B를 통해 컴퓨터 A에서 직접 파일을 다운로드 할 수 있습니다. 파일이 있다고 가정하고 http://C/path/to/file다음을 사용합니다.

wget http://B:11111/path/to/file

HTTP 1.1 이름 기반 가상 호스팅없이 파일에 액세스 할 수있는 경우에만 작동하지 않습니까? wget이 발행 한 GET 요청은 호스트 이름을 C가 아닌 B로 표시하므로
CVn

@ MichaelKjörling 나는 당신에게 대답 할 충분한 지식이 없습니다.
Huygens

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.