중간 서버로 sftp해야합니까?


11

특정 호스트에 직접 sftp를 사용할 수 없습니다. 내 홈 컴퓨터에서 호스트로 파일을 이동하려면 파일을 중간 호스트로 sftp해야합니다. 중간 호스트로 ssh; 파일을 최종 목적지로 sftp로 보냅니다. 그런 광기를 피할 수 있습니까?

답변:


28

로컬 머신에서 중간 호스트를 통해 최종 호스트까지 SSH 터널을 만들 수 있습니다.

ssh user@intermediate -L 2000:final:22 -N

그러면 중간 호스트를 통해 터널링하여 포트 22의 최종 서버에 직접 연결되는 로컬 호스트에서 포트 2000이 열립니다. 이제 다른 프롬프트에서 포트 2000의 sftp와 연결하여 최종 서버로 터널링합니다. 여기에 지정된 사용자는 최종 호스트에 대한 것입니다.

sftp -P 2000 user@localhost

이것은 superuser.com 또는 serverfault.com 에 속하는 것 같습니다 .


고마워, 나는 그것을 시도 할 것이다; 그리고 당신은 맞습니다 그것은 틀린 포럼입니다; 죄송합니다.

user @ localhost 비밀번호를 입력 한 후 메시지를 받았습니다.받은 메시지가 너무 깁니다. 1131376238
user74094

14

SFTP의 ProxyCommand 옵션을 사용하면 SSH 연결을 통해 SFTP 연결을 투명하게 터널링 할 수 있습니다 (WhiteFang34의 답변과 비슷하지만 전달 된 로컬 TCP 포트가 아닌 SSH 연결의 stdin & stdout을 통해).

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(중간 호스트에 netcat이 / usr / bin / nc로 설치되어 있다고 가정합니다. 그렇지 않은 경우 TCP 세션에서 stdin & stdout을 게이트웨이로 사용하는 동일한 방법을 찾아 설치해야 할 수도 있습니다.)

이 옵션의 가장 멋진 점은 ~ / .ssh / config 파일에 추가하여 투명하게 만들 수 있다는 것입니다.

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

이 항목을 사용하면 sftp, scp 및 ssh를 사용하여 finalhost를 만들 수 있으며 터널을 자동으로 호출합니다. 불투명하지 않은 유일한 부분은 두 개의 암호 (중간 호스트 다음에 finalhost)를 묻는 메시지가 표시되지만 SSH 키 쌍을 사용하여 암호를 제거 할 수 있습니다 ...


고든 고마워 수신 한 메시지가 너무 깁니다. 1131376238
user74094

연결의 무언가처럼 들릴 것입니다-아마도 호스트 중 하나의 로그인 스크립트, 아마도 nc는 sftp를 혼란스럽게하는 연결을 통해 여분의 텍스트를 쓰고 있습니다 ( snailbook.com의 FAQ 참조 ). 1131376238은 ASCII 문자 "Conn"의 십진 인코딩이므로 "Connecting to ..." "Connected from ..."또는 "Connection failed"와 같은 메시지 일 수 있습니다. sftp 대신 ssh로 시도해보십시오. 메시지가 눈에 띄게 인쇄되는지, 어디에서 왔는지 알 수 있습니다.
Gordon Davisson

ssh는 잘 작동했습니다. 또한이 질문에 자주 직면한다는 점을 언급해야합니다. 호스트 'xxxxx (<프록시 명령에 대한 hostip 없음>)'의 신뢰성을 설정할 수 없습니다. RSA 키 지문은 37 : 40 : d4 : c7 : etc입니다. 계속 연결 하시겠습니까 (예 / 아니요)? 예
user74094

고든, 매우 유용합니다! 커맨드 라인 fu oneliners의 텍스트 파일에 이것을 추가하고 있습니다. 엄청 고마워!
Travis Leleu이 15:12

인가 exec필요? (여기서는 그 부분 없이도 잘 작동합니다.)
equaeghe

3

시스템에서 실행중인 ssh 프로세스로 데이터를 파이프 한 다음 stdin을 읽고 적절하게 sftp로 전송하는 중간 시스템에서 명령을 실행할 수 있습니다.

ssh에 대한 인수 인용에는주의가 필요하지만 로컬 시스템의 oneliner에서 수행 할 수 있습니다. 현재 전화를 사용 중이므로 세부 정보를 입력 할 수 없습니다. 다른 사람이이 답변을 연습으로 완료 할 수 있습니다.


0

최종 호스트가 방화벽으로 설정되어 있다고 가정하고 있습니다.

예를 들어, 로컬 컴퓨터에서 ssh를 노출 한 다음 첫 번째 호스트로 ssh를, 두 번째 호스트로 ssh를, 마지막 호스트에서 컴퓨터로 sftp를 노출하십시오.


0

A와 B가 첫 번째와 두 번째 호스트라고 가정하겠습니다. 그리고 복사 될 파일은 foo입니다

sftp 대신 다음을 사용할 수 있습니다

고양이 foo | ssh "고양이-> foo"

이제이 중 2 개를 데이지 체인으로 연결할 수 있습니다

고양이 foo | ssh A "cat-| ssh B \"cat-> foo \ ""


나는 그것을 좋아해서 시도했다. A의 암호를 사용하여 호스트 키 확인에 실패했습니다.
74094
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.