다른 호스트를 통해서만 SSH로 연결할 수있는 호스트에서 파일을 다운로드하려면 어떻게해야합니까?


30

사무실 컴퓨터에서 랩톱으로 파일을 다운로드하고 싶습니다.

SSH를 사용하여 내 사무실 컴퓨터를 조직 서버에 연결 한 다음 서버에서 내 사무실 컴퓨터로 SSH를 연결할 수 있습니다.

조직 서버가 허용하는 유일한 명령은 ssh, ssh1 및 ssh2입니다.

서버를 통해 내 사무실 (원격) 컴퓨터에서 랩톱 (로컬) 컴퓨터로 파일을 다운로드하려면 어떻게해야합니까?


2
리버스 SSH 터널을 사용 하시겠습니까? 여기에 내 답변을보고 필요에 따라 수정하십시오. superuser.com/questions/1186905/…
Darren

1
멀티 홉 SSH?
mckenzm

답변:


37

이전 답변에서는 ProxyJump 지시문 (OpenSSH 7.3에 추가됨)을 사용하여 중간 서버 (일반적으로 요새 호스트라고 함)를 통해 연결하는 방법을 언급했지만 명령 줄 인수로 언급했습니다.

나중에 연결하지 않을 머신이 아닌 경우 가장 좋은 방법은에 머신을 구성하는 것입니다 ~/.ssh/config.

나는 다음과 같은 파일을 넣을 것이다.

Host office-machine
Hostname yochay-machine.internal.company.local
ProxyJump bastion-machine

Host bastion-machine
Hostname organization-server.company.com
...

ProxyJump를 지원하지 않는 이전 버전의 OpenSSH를 사용하는 경우 해당 버전으로 대체합니다.

ProxyCommand ssh -W %h:%p bastion-machine

로컬 ssh 버전이 실제로 지원하지 않는 고대 버전 인 경우 -W:

ssh bastion-machine nc %h %p

이 마지막 시스템은 요새 머신이 nc설치되어 있어야합니다.

ssh의 장점은 파일에서 각 대상을 구성 할 수 있으며 매우 훌륭하게 스택된다는 것입니다. 따라서 office-machine직접 연결 한 모든 도구 (ssh, scp, sftp ...)에서 호스트 이름으로 작업하게 되고 ssh_config를 기반으로 연결하는 방법을 알게됩니다. 와일드 카드 Host *.internal.company.local를 사용하여 모든 호스트가 특정 요새를 통과하는 것처럼 만들고 모든 호스트에 적용 할 수 있습니다. 올바르게 구성되면 하나의 홉 연결 또는 20 개의 연결을 수행하는 것의 유일한 차이점은 연결 시간이 느려질 것입니다.


36

최근 OpenSSH (8.0)가있는 경우 -J(점프) 스위치를 사용할 수 있습니다 .

scp -J user@intermediate user@target:/path

이전 버전 (그러나 7.3 이상)에서는 명령 행에서 ProxyJumpdirective 를 사용할 수 있습니다 .

scp -o ProxyJump=user@intermediate user@target:/path

또는 ssh_config@ Ángel의 답변이 보여주는 것처럼 파일로.


ProxyCommand이전 버전의 OpenSSH에서도 사용할 수있는 포트 포워딩 과 같은 다른 옵션 이 있습니다. 여기에서 다루는 합니까 OpenSSH를 지원 멀티 홉 로그인?


2
@yochaymaganssh -J userA@orgserv userB@officecomp cat remote/path > local/path
mosvy

4
scp의 경우
Ángel

4
scp지원하지 않더라도이 옵션 -J을 지원할만큼 충분히 새 것일 수 있습니다 ProxyJump. 이 옵션을 명시 적으로 사용하는 다른 답변 중 하나를 시도하십시오.
고든 데이비스 슨

2
이것이 정답입니다. 간단한 명령 행 옵션으로 작업을 수행하기에 충분할 때 특정 호스트에 대한 ssh수정을 제안 하는 질문에 대한 모든 답변을 무시합니다 config.
clemisch

2
"멸종"은 극단적 인 반응처럼 보인다. 물론, 구성 파일을 먼저 수정하는 것보다 명령 줄을 빠르게 수정하는 것이 더 쉬운 경우가 있습니다. 동일한 호스트에 여러 번 연결을 계획하는 경우에, 나는 것이 확실 오히려 한 번 사용보다 내 구성 파일을 업데이트 -J user@intermediate내가 연결해야 할 때마다.
chepner

10

때로는 파이프 라인 만 사용할 수도 있습니다. 그 시간은 오늘입니다.

ssh -A user@host1 ssh user@host2 cat filename > filename

당신도 업로드 할 수 있습니다

ssh -A user@host1 ssh user@host2 cat \\\> filename < filename

예, 프록시 등의 다른 솔루션이 있지만이를 수행하는 방법을 아는 것이 유용합니다.


유용한 사용 cat!
Piskvor

이것은 충분한 권한을 가진 중간 호스트 사용자에게 ssh 에이전트 및 키에 대한 액세스 권한을 제공합니다. 호스트와 host2간에 흐르는 데이터도 host1에서 암호화되지 않은 상태로 존재합니다. 프록시를 사용하여 위의 방법을 사용하면 이러한 두 가지 문제를 피할 수 있습니다.
제임스

@ 제임스 : 나는 몰라요. 이와 같은 요새 호스트는 대개 매우 신뢰할 수 있습니다.
여호수아

7

ProxyJump구성을 사용하십시오 .

ProxyJump
하나 이상의 점프 프록시를 [user @] host [: port] 또는 ssh URI로 지정합니다. 여러 개의 프록시는 쉼표로 구분되어 순차적으로 방문됩니다. 이 옵션을 설정하면 ssh (1)이 지정된 ProxyJump 호스트에 ssh (1) 연결을 만든 다음 최종 대상에 대한 TCP 전달을 설정하여 대상 호스트에 연결합니다.

scp -o ProxyJump=user@intermediate user@target:/path

2

ZMODEM 이라는 고대 프로토콜 이 있습니다. 요즘에 지원하는 프로그램은 거의 없지만 작동 할 때 매우 편리합니다.

먼저 랩톱의 터미널 프로그램이 ZMODEM을 지원하는지 확인하십시오. (예를 들어, ZMODEM을 지원하도록 iTerm2 (Mac)를 구성 할 수 있습니다. 예제 스크립트는 여기에 있습니다 .)

사무실 컴퓨터에서 다음을 실행하십시오. sudo apt install lrzsz

이제 당신이해야 할 일은 사무실 컴퓨터로 ssh하고 실행하는 것 sz (filename)입니다. 파일은 터미널을 통해 다운로드됩니다.


1

사용자의 ssh에서 구성 : ~/.ssh/config

Host *
    UserKnownHostsFile=/dev/null
    StrictHostKeyChecking=no
    ServerAliveInterval 300
    ServerAliveCountMax 2
    ForwardAgent yes


Host jump server
    HostName server.company.org
    User root

Host jump1 server1
    HostName server1.dmz.company.org
    User root
    ProxyJump jump

Host jump2 server2
    HostName server.dmz2.company.org
    User root
    ProxyJump jump1

Host *.intranet.company.org
    User user
    ProxyJump jump2

인트라넷 서버에서 3 개의 점프 서버를 통해 직접 복사 할 수 있습니다 .

scp user@server.intranet.company:/home/user/ ./*

더 이상 scp로 점프 서버를 지정할 필요가 없기 때문에 이것을 선호합니다.


0

SCP-3을 통해 :

scp -3 user1@remote1:/root/file1.txt user2@remote2:/root/file1.txt

2
-3"두 개의 원격 호스트 사이의 카피가 로컬 호스트를 통해 전송된다."라고 옵션 설명 이 질문에 따르면 로컬 호스트가 "remote2"에 액세스 할 수 없다고 생각합니다.
Jeff Schaller

2
@JeffSchaller : 중간에 컴퓨터에 연결 한 다음을 사용하십시오 -3. 그러나 이것은 중간 시스템에서 첫 번째 시스템으로 다시 연결할 수 있다고 가정합니다.

나는 이것보다 -J/의 이점을 보지 못한다 JumpHost. @Joe가 언급 한 한계가 있기 때문에 반대로.
마틴 Prikryl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.