내 로컬 컴퓨터에서는 원격 컴퓨터의 파일을 복사할 수 있습니다.
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
인 "네트워킹의 스위스 군용 칼"(더 작은 것...그리고 socat
MultiTool®과 더 비슷함) 입니다 cat
.
아이디어: ssh
원격 시스템의 원격 포트를 클라이언트의 로컬 포트로 전달하고 이 연결을 사용하여 데이터를 파이프하도록 지시합니다 nc
.
연결
$remote
설정 원격 포트 전달:client:~> ssh -R 8888:localhost:8888 $remote
그러면 에 대한 정상적인 연결이 설정되지만 추가로 원격 측이 수신 대기 중인 포트도
$remote
알려줍니다 . 원격 측 포트 에 무언가가 연결되면 클라이언트(즉, 클라이언트) 포트에 대한 연결이 열리고 원격 측 포트로 전송되는 모든 내용이 이 포트로 전달됩니다.ssh
8888
8888
ssh
localhost
8888
8888
클라이언트를 수신하는 포트를 사용하십시오
8888
(따라서ssh
연결할 것이 있습니다)nc
. 나중에 스트림을 보낼nc
것이기 때문에 출력(클라이언트)을 파이프로 받습니다 .tar
tar
client:~> nc --recv-only -l -p 8888 | tar xvf -
원격 측에서 현재 작업 디렉터리를 원하는 위치로 변경합니다.
올바른 위치에 있다면
tar
복사하려는 파일을 수집하고 다음을 사용하여 (원격 측)로 전송하십시오nc
.server:~> cd /path/with/those/files server:files> tar cvf - ./some/files | nc --send-only 127.0.0.1 8888
Magic™이 발생합니다.
노트:AFAIK 만 약간씩 다른 구현이 세 가지 이상 있습니다 nc
.--send-only
--recv-only
넷캣 6. 구현이 이러한(또는 유사한) 옵션을 지원하지 않는 경우 발신자가 tar
종료되고 Ctrl- 에 도달하는지 확인해야 합니다. 일반적으로 영원히 기다렸다가 처리하지 않습니다(처리하고 자동으로 연결을 닫도록 지시합니다).Cnc
EOF
--send-only
또 다른 참고사항:직접 사용할 수도 있지만 포트 전달을 nc
사용하면 ssh
데이터가 SSH 연결을 통해 전달되므로 두 가지 문제를 방지할 수 있습니다. 첫째, 데이터가 여전히 암호화되어 전송되고 둘째, 클라이언트가 NAT 뒤에 있는 경우 이는 다음에도 적용됩니다. 에서 직접 액세스할 수 없는 방화벽이나 기타 서비스 $remote
.