시스템에 SSH로 연결하는 경우 다른 터미널이나 화면 세션을 시작하고 scp 또는 이와 유사한 작업을 수행하지 않거나 원격 시스템에서 로컬 시스템으로 다시 SSH를 사용하지 않고도 파일을 로컬 시스템으로 다시 복사할 수 있는 방법이 있습니까?
답변1
주요 연결
미리 계획을 세우면 이것이 가장 쉽습니다.
처음으로 기본 연결을 엽니다. 후속 연결의 경우 슬레이브 연결은 기존 마스터 연결을 통해 라우팅됩니다. 당신의~/.ssh/config
, 연결 공유 설정이 자동으로 수행됩니다.
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
기존 연결과 동일한 연결(사용자, 포트, 컴퓨터)로 SSH 세션을 시작하면 두 번째 세션이 첫 번째 세션을 통해 터널링됩니다. 두 번째 연결을 설정하는 데는 새로운 인증이 필요하지 않으며 매우 빠릅니다.
따라서 유효한 연결이 있으면 신속하게 다음을 수행할 수 있습니다.
scp
파일을 사용하거나 복사합니다rsync
.- sshfs를 사용하여 원격 파일 시스템 마운트.
앞으로
기존 연결을 통해 역방향 SSH 터널을 설정할 수 있습니다. SSH 명령줄에서 -R 22042:localhost:22
22042는 원격 시스템의 다른 포트 번호와 다른 무작위로 선택된 번호를 전달하여 원격 전달을 생성합니다 . 그러면 원격 컴퓨터가 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
답변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 원격