SSH를 통해 로컬 시스템으로 scp

SSH를 통해 로컬 시스템으로 scp

내 로컬 컴퓨터에서는 원격 컴퓨터의 파일을 복사할 수 있습니다.

scp remote:/some/file/path ~

하지만 이미 SSH를 통해 원격 컴퓨터에 연결되어 있다면 어떻게 될까요? 내가 이런 걸 할 수 있을까?

ssh remote
cd /some/file
scp path local:~

local어떻게 든 SSH를 통해 연결된 컴퓨터로 확인됩니다 .~에서. 로컬 컴퓨터가 SSH 서버를 실행하고 있고 원격 컴퓨터가 SSH 서버에 연결하도록 구성된 경우 이는 확실히 가능하지만 항상 가능한 것은 아닙니다.

그런 일이 가능합니까?

답변1

의견에서 언급했듯이 다음을 사용하는 것이 좋습니다 sftp.

$ sftp remote
user@remote's password: 
Connected to remote.
sftp> pwd
Remote working directory: /home/user
sftp> cd /etc
sftp> get fstab
Fetching /etc/fstab to fstab
/etc/fstab                                 100%  435     0.4KB/s   00:00    
sftp> 

다소...해킹적인 또 다른 접근 방식은 nc(일명 netcat)과 결합된 SSH의 포트 전달 기능을 남용하는 것입니다. 네트워킹 기능을 갖춘 도구 nc인 "네트워킹의 스위스 군용 칼"(더 작은 것...그리고 socatMultiTool®과 더 비슷함) 입니다 cat.

아이디어: ssh원격 시스템의 원격 포트를 클라이언트의 로컬 포트로 전달하고 이 연결을 사용하여 데이터를 파이프하도록 지시합니다 nc.

  1. 연결 $remote설정 원격 포트 전달:

    client:~> ssh -R 8888:localhost:8888 $remote
    

    그러면 에 대한 정상적인 연결이 설정되지만 추가로 원격 측이 수신 대기 중인 포트도 $remote알려줍니다 . 원격 측 포트 에 무언가가 연결되면 클라이언트(즉, 클라이언트) 포트에 대한 연결이 열리고 원격 측 포트로 전송되는 모든 내용이 이 포트로 전달됩니다.ssh88888888sshlocalhost88888888

  2. 클라이언트를 수신하는 포트를 사용하십시오 8888(따라서 ssh연결할 것이 있습니다) nc. 나중에 스트림을 보낼 nc것이기 때문에 출력(클라이언트)을 파이프로 받습니다 .tartar

    client:~> nc --recv-only -l -p 8888 | tar xvf -
    
  3. 원격 측에서 현재 작업 디렉터리를 원하는 위치로 변경합니다.

  4. 올바른 위치에 있다면 tar복사하려는 파일을 수집하고 다음을 사용하여 (원격 측)로 전송하십시오 nc.

    server:~> cd /path/with/those/files
    server:files> tar cvf - ./some/files | nc --send-only 127.0.0.1 8888
    
  5. Magic™이 발생합니다.

노트:AFAIK 만 약간씩 다른 구현이 세 가지 이상 있습니다 nc.--send-only--recv-only넷캣 6. 구현이 이러한(또는 유사한) 옵션을 지원하지 않는 경우 발신자가 tar종료되고 Ctrl- 에 도달하는지 확인해야 합니다. 일반적으로 영원히 기다렸다가 처리하지 않습니다(처리하고 자동으로 연결을 닫도록 지시합니다).CncEOF--send-only

또 다른 참고사항:직접 사용할 수도 있지만 포트 전달을 nc사용하면 ssh데이터가 SSH 연결을 통해 전달되므로 두 가지 문제를 방지할 수 있습니다. 첫째, 데이터가 여전히 암호화되어 전송되고 둘째, 클라이언트가 NAT 뒤에 있는 경우 이는 다음에도 적용됩니다. 에서 직접 액세스할 수 없는 방화벽이나 기타 서비스 $remote.

관련 정보