두 번째 원격 호스트로 scp하는 방법
remote1 호스트를 통해 내 로컬 컴퓨터에서 직접 remote2 호스트의 파일을 SCP 할 수있는 방법이 있는지 궁금합니다.
네트워크는 remote1 호스트에서 remote2 호스트로의 연결 만 허용합니다. 또한 remote1 호스트도 remote2 호스트도 내 로컬 컴퓨터로 scp 할 수 없습니다.
다음과 같은 것이 있습니까?
scp user1@remote1:user2@remote2:file .
첫 번째 창 : ssh remote1
, scp remot2:file .
.
두 번째 쉘 : scp remote1:file .
첫 번째 창 : rm file; logout
이 모든 단계를 수행하는 스크립트를 작성할 수 있지만 직접적인 방법이 있으면 사용하는 것이 좋습니다.
감사.
편집 : SSH 터널을 여는 것과 같은 것을 생각하고 있지만 어디에 넣을 가치가 있는지 혼란 스럽습니다.
현재, 액세스하려면 로컬 컴퓨터에 remote1
다음이 $HOME/.ssh/config
있습니다.
Host remote1
User user1
Hostname localhost
Port 45678
일단 켜진 remote1
후 액세스 remote2
하려면 표준 로컬 DNS와 포트 22입니다. 무엇을 입히고 remote1
변경해야 localhost
합니까?
단일 명령으로 파일을 직접 복사하는 방법은 모르겠지만 포트 포워딩 터널을 열어두기 위해 백그라운드에서 SSH 인스턴스를 실행하는 것을 허용 할 수 있다면 하나의 명령으로 파일을 복사 할 수 있습니다.
이렇게 :
# First, open the tunnel
ssh -L 1234:remote2:22 -p 45678 user1@remote1
# Then, use the tunnel to copy the file directly from remote2
scp -P 1234 user2@localhost:file .
첫 번째 인스턴스가에 대한 전달 연결을 수신 대기하는 localhost의 포트 1234에 있기 때문에 user2@localhost
실제 scp
명령 에서와 같이 ssh
연결합니다 remote2
. 또한 모든 후속 파일 복사에 대해 첫 번째 명령을 실행할 필요가 없습니다. 단순히 실행 상태로 둘 수 있습니다.
더블 ssh
복잡한 경우에도 간단히 ssh
;-)를 사용하여 단일 명령 줄을 사용하여 파일 전송을 처리 할 수 있습니다 . 다음에 연결할 수없는
경우 유용합니다 .remote1
localhost
ssh user1@remote1 'ssh user2@remote2 "cat file"' > file
tar
그러나 파일 속성 (소유권, 권한 ...)이 손실됩니다.
그러나 tar
다음 파일 속성을 유지하는 것이 친구입니까?
ssh user1@remote1 'ssh user2@remote2 "cd path2; tar c file"' | tar x
네트워크 대역폭을 줄이기 위해 압축 할 수도 있습니다.
ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj file"' | tar xj
또한 tar
기본을 통해 재귀 디렉토리를 전송할 수 있습니다 ssh
.
ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj ."' | tar xj
ionice
파일이 크고 다른 중요한 네트워크 응용 프로그램을 방해하지 않으려면 및 도구에서 제공하는 네트워크 처리량 제한을 놓칠 수 있습니다 (예 : 1Mbits / 초 이상 사용하지 않음).scp
rsync
scp -l 1024 user@remote:file
그러나 해결 방법은 ionice
단일 명령 줄을 유지하는 데 사용 됩니다.
ionice -c2 -n7 ssh u1@remote1 'ionice -c2 -n7 ssh u2@remote2 "cat file"' > file
참고 : ionice
이전 배포에서는 사용할 수 없습니다.
이것은 트릭을 할 것입니다.
scp -o 'Host remote2' -o 'ProxyCommand ssh user@remote1 nc %h %p' user@remote2:path/to/file .
호스트에서 remote2
직접 파일에 SCP를 지정하려면 ~ / .ssh / config 파일에 두 가지 옵션 ( Host
및 ProxyCommand
)을 추가 합니다 ( 수퍼 유저에 대한 이 답변 참조 ). 그런 다음 다음을 실행할 수 있습니다.
scp user@remote2:path/to/file .
생각할 필요없이 로컬 컴퓨터에서 remote1
.
openssh 버전 7.3 이상을 사용하면 쉽습니다. 구성 파일에서 ProxyJump 옵션을 사용하십시오 .
# Add to ~/.ssh/config
Host bastion
Hostname bastion.client.com
User userForBastion
IdentityFile ~/.ssh/bastion.pem
Host appMachine
Hostname appMachine.internal.com
User bastion
ProxyJump bastion # openssh 7.3 version new feature ProxyJump
IdentityFile ~/.ssh/appMachine.pem. #no need to copy pem file to bastion host
로그인 또는 복사를 위해 실행할 명령
ssh appMachine # no need to specify any tunnel.
scp helloWorld.txt appMachine:. # copy without intermediate jumphost/bastion host copy.**
물론 구성 파일에 구성되지 않은 경우 ssh 명령에 "-J"옵션을 사용하여 요새 점프 호스트를 지정할 수 있습니다.
Note scp does not seems to support "-J" flag as of now. (i could not find in man pages. However above scp works with config file setting)
This configuration works nice for me:
Host jump
User username
Hostname jumphost.yourorg.intranet
Host production
User username
Hostname production.yourorg.intranet
ProxyCommand ssh -q -W %h:%p jump
Then the command
scp myfile production:~
Copies myfile to production machine.
참고URL : https://stackoverflow.com/questions/9139417/how-to-scp-with-a-second-remote-host
'Development Tip' 카테고리의 다른 글
인덱스 배열 위치가 0이 아닌 다른 일반적인 "c 유사"또는 비 "c 유사"언어가 있습니까? (0) | 2020.10.20 |
---|---|
불변 목록에서 한 요소를 "제거"하는 관용적 스칼라 방식은 무엇입니까? (0) | 2020.10.20 |
PGError : ERROR : 관계에 대한 권한이 거부되었습니다 (Heroku 사용시). (0) | 2020.10.20 |
Git : 수동으로 삭제 한 파일을 커밋하는 방법? (0) | 2020.10.20 |
string_agg ()에서 결과를 정렬하는 방법 (0) | 2020.10.20 |