SSH를 사용하여 파일을 로컬 시스템으로 다시 복사

SSH를 사용하여 파일을 로컬 시스템으로 다시 복사

시스템에 SSH로 연결하는 경우 다른 터미널이나 화면 세션을 시작하고 scp 또는 이와 유사한 작업을 수행하지 않거나 원격 시스템에서 로컬 시스템으로 다시 SSH를 사용하지 않고도 파일을 로컬 시스템으로 다시 복사할 수 있는 방법이 있습니까?

답변1

주요 연결

미리 계획을 세우면 이것이 가장 쉽습니다.

처음으로 기본 연결을 엽니다. 후속 연결의 경우 슬레이브 연결은 기존 마스터 연결을 통해 라우팅됩니다. 당신의~/.ssh/config, 연결 공유 설정이 자동으로 수행됩니다.

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

기존 연결과 동일한 연결(사용자, 포트, 컴퓨터)로 SSH 세션을 시작하면 두 번째 세션이 첫 번째 세션을 통해 터널링됩니다. 두 번째 연결을 설정하는 데는 새로운 인증이 필요하지 않으며 매우 빠릅니다.

따라서 유효한 연결이 있으면 신속하게 다음을 수행할 수 있습니다.

앞으로

기존 연결을 통해 역방향 SSH 터널을 설정할 수 있습니다. SSH 명령줄에서 -R 22042:localhost:2222042는 원격 시스템의 다른 포트 번호와 다른 무작위로 선택된 번호를 전달하여 원격 전달을 생성합니다 . 그러면 원격 컴퓨터가 ssh -p 22042 localhost원본 컴퓨터에 다시 연결되며 이를 사용하여 scp -P 22042 foo localhost:파일을 복사할 수 있습니다.

를 사용하여 이를 더욱 자동화할 수 있습니다 RemoteForward 22042 localhost:22. 문제는 여러 SSH 인스턴스를 사용하여 동일한 시스템에 연결하거나 다른 사람이 해당 포트를 사용하는 경우 전달되지 않는다는 것입니다.

처음부터 원격 전달을 활성화하지 않은 경우 기존 SSH 세션에서 수행할 수 있습니다. 유형 Enter ~C Enter -R 22042:localhost:22 Enter. 자세한 내용은 설명서의 "이스케이프 문자"를 참조하세요.

그 안에도 흥미로운 정보가 있어요이 서버 실패 스레드.

복사 및 붙여 넣기

파일이 작은 경우에는 이를 입력하고 터미널 출력에서 ​​복사하여 붙여넣을 수 있습니다. 파일에 인쇄할 수 없는 문자가 포함되어 있으면 다음과 같은 것을 사용하십시오.64비트 기반.

Remote.example.net$ base64 <myfile
(복사 출력)
local.example.net$ base64 -d >myfile
(클립보드 내용 붙여넣기)
Ctrl+D

더욱 편리하게는 X 전달이 활성화된 경우 파일을 원격 시스템에 복사하여 로컬로 붙여넣는 것입니다. 데이터를 파이프로 들어오고 나갈 수 있습니다.xclip또는xsel. 파일 이름과 메타데이터를 보존하려면 아카이브를 복사하여 붙여넣으세요.

remote.example.net$ tar -czf - myfile | xsel

local.example.net$ xsel | tar -xzf -

답변2

또 다른 (IMO) 간단한 방법은 다음과 같습니다.

# to remote host
cat localfile.conf | ssh user@hostname 'cat -> /tmp/remotefile.conf'

# from remote host
ssh user@hostname 'cat /tmp/remotefile.conf' > /tmp/localfile.conf

또는 GUI와 같은 것을 선호한다면 시도해 보십시오.자정 사령관. 그들은 이 기능을 호출합니다쉘 링크. 대부분의 배포판에는 em이 mc.

답변3

~SSH는 이스케이프 문자를 통해 일부 명령을 지원합니다(기본적으로):

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

$ ~C
ssh> help
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward
      !args                                  Execute local command

이것은 !args당신이 원하는 것에 가장 가까운 것 같습니다. 이러한 명령이 PermitLocalCommand작동 /etc/ssh_config하려면 파일에서 이러한 명령을 활성화 해야 합니다 ~C(참고자료 참조 man ssh_config).

ControlMaster설정하면 동일한 SSH 세션을 재사용할 수 있습니다 ssh_config. 이렇게 하면:

$ ~C
ssh> !scp file user@myserver:

기술적으로 SSH 세션을 종료하지 않으며 재인증할 필요도 없습니다. 아마도 당신이 원하는 것보다 더 복잡할 것입니다. 그러나 다른 쉬운 방법은 생각나지 않습니다.

답변4

  • 사용SSH-xfer, 파일 전송을 위해 기존 SSH 측 채널을 효과적으로 오버로드하는 수정된 SSH 에이전트입니다.
  • 사용제세, 실제로는 ssh를 통한 zmodem입니다. rzsz를 사용해 본 적이 있다면 매우 친숙해 보일 것입니다.
  • 다른 쪽 끝에서 수신 대기하는 일부 파일 전송 데몬이 있다고 가정하고 역방향( -R, 원격에서 로컬로) 또는 전달( , 로컬에서 원격으로) 포트에서 파일 전송을 실행합니다.-L

하지만 제 생각에는 이 중 어느 것도 실제로 필요하지 않습니다. SSH 프로토콜은 단일 연결에서 여러 채널을 지원하고 OpenSSH 클라이언트는 멀티플렉싱을 지원합니다. 당신이 가지고 있다고 가정 ControlMaster하고ControlPath 설정( ControlPersist또한 유용함),

  # 첫 번째 연결
$ SSH 원격

  # 원래 SSH에 의해 열린 동일한 연결에서 다중화됩니다.
$ SFTP 원격

관련 정보