한 원격 서버에서 다른 원격 서버로 scp


15

서버에 하나의 파일이 one있고를 two사용하여 서버에 복사하고 싶습니다 scp. 키를 올바르게 설정했으며 데스크탑에서 두 서버 모두에 ssh / scp를 사용할 수 있습니다.

복사해야하는 파일이 내 워크 스테이션의 하드 디스크에있는 여유 공간보다 큽니다.

scp one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz

그러나 나는 얻었다 :

ssh: Could not resolve hostname one: Name or service not known

여기에 DNS가 없으므로 (이유를 묻지 마십시오) ~ / .ssh / config에 있습니다.

Host one
    Hostname        <IP address of server one>
    User            jspurny

Host two
    Hostname        <IP address of server two>
    User            jspurny

작은 파일로 시도 one하여 내 워크 스테이션으로 전송 한 다음로 전송하면 two정상적으로 작동합니다.

scp one:/opt/smallerfile.tar.gz .
scp smallerfile.tar.gz two:/opt/

의견에서 제안한대로 IP 주소를 직접 사용하면 다음과 같은 결과가 나타납니다.

$ scp jspurny@<one's IP>:bigfile.tar.gz jspurny@<two's ip>:bigfile.tar.gz
Host key verification failed.
lost connection

별일 아니다:

여기서 크기는 문제가되지 않습니다 bigfile.tar.gz. 워크 스테이션 에 저장할 방법이 없기 때문에이 문제에 대한 "트리거"일뿐 입니다. 파일 크기에 관계없이 문제가 발생합니다.

질문:

왜 명령이 수행됩니까?

scp oneremote:file secondremote:file

.ssh/config별명을 사용 하거나 IP 주소를 직접 사용 하는지 여부에 관계없이 오류가 발생 합니까?

해결-일종의-여전히 설명을 찾고 있습니다 -나는 큰 파일을 작은 파일로 나누고 내 워크 스테이션을 통해 하나씩 전송했습니다. 왜 여전히 작동하지 않는지 궁금합니다. 그래서 나는 아직도 무엇이 잘못되었는지에 대한 설명을 부탁드립니다 ..

실패한 이유를 찾았습니다 . 어리석은 것 같습니다. 나는 생각 명령 있음

scp one:file two:file

각 서버에 두 개의 연결을 생성하고 데이터를 수신하고 하나 즉시로 보내 따라서 중계처럼 행동.

간단한 때문에 이것은 분명히 사실이 아니다 -v옵션은 실제로 단지에 연결하는 것으로 나타났다 하나 와에서 하나 는 연결을 시도 . 서버 12 에 연결되어 있지 않기 때문에 분명히 불가능합니다 .


"scp jspurny @ ip_address_server_one : /opt/bigfile.tar.gz jspurny @ ip_address_server_two : /opt/bigfile.tar.gz"와 같이 대신 IP 주소를 사용하도록 scp 명령을 변경하려고 했습니까?

@ tchester : 지금은했지만 다른 오류가 발생합니다 (편집 된 질문 참조)
Jan Spurny


@ slm 아니오, 나는 크기에 문제가 없습니다.
Jan Spurny

오류에 대한 설명을 찾았으므로 내 답변으로 추가 / 수락하고 싶었지만 실제로 문제를 해결하지 못하기 때문에 약간 불공평 해 보입니다. 내 워크 스테이션을 릴레이로 사용하여 서버 1 에서 서버 2로 파일을 복사하는 방법에 대한 질문을 다시 바꿔야한다고 생각하십니까 ? 또는 --verbose 옵션 을 답변으로 사용하지 못하고 수용 할 수 없다는 설명을 추가해야 합니까?
Jan Spurny

답변:


6

간단한 파이프

이 시도:

ssh one 'cat file' | ssh two 'cat > file'

첫 번째는 파일 내용을 컴퓨터로 보내고 두 번째는 파일 내용을 두 번째 컴퓨터로 보내야합니다. 전송 후 양쪽 끝에서 체크섬을 계산하여 길을 잃거나 깨지는 것이 없도록합니다.

정교한 터널

보다 정교한 응용 프로그램의 경우 ssh 터널을 사용할 수 있습니다. 예를 들어 다음과 같은 것을 시도해 볼 수 있습니다.

ssh -R 5001:127.0.0.1:5002 one
ssh -L 5002:127.0.0.1:22 two

그런 다음 one머신 localhost포트 에 대한 연결을 열면 5001두 번 전달 two되어 localhost포트 에 대한 연결로 끝납니다 22. 이것은 ssh 포트이므로 다른 scp 또는 rsync 등에 사용할 수 있습니다. 당신은 또한 rsync서버를 시작할 수 있습니다two 22 대신 포트 873을 전달할 수도 있습니다 nc. 또는 임의의 포트 번호를 사용하여 원시 데이터를 전송하기 위해 양쪽에서 사용할 수 있습니다.

위의 접근 방식의 주요 이점은 단방향 파이프 대신 두 머신간에 양방향 TCP 연결이 있다는 것입니다. 그렇게하면 양 당사자가 정보를 교환 할 수 있으며,이 rsync경우 특히 중요합니다 .


1
감사! 이것은 내가 원하는 것을 정확하게하지는 않지만 실제로 필요한 것을 수행 합니다 .
Jan Spurny

16

이 답변에 대한 전체 크레딧은 /superuser//a/602436/142948 하십시오.

-3scp 옵션 이 필요합니다 :

scp -3 one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz

-3: 두 원격 호스트 사이의 사본이 로컬 호스트를 통해 전송됩니다. 이 옵션을 사용하지 않으면 데이터가 두 원격 호스트간에 직접 복사됩니다.

http://www.openbsd.org/cgi-bin/man.cgi?query=scp&sektion=1

그렇지 않으면 존재하지 않을 수있는 "one"호스트에서 두 번째 별명 "two"가 분석 됩니다 .


불행히도이 옵션은 상당히 새롭고 아직 모든 배포판에 전파 된 것으로 보입니다.
whereswalden

2

원본 서버 (하나)에 대한 사용자 액세스 당신이 너무 오래 걸릴 것이라고 걱정되면 왜 안 로그인 및 해당 서버에 대한 당신의 scp 명령을 실행 직접 ..., 다음 내부의 명령을 시작을 가지고 있기 때문에 screen다음에 화면에서 분리 Ctrl+a d하고 실행하자.

그러나 워크 스테이션에서이 작업을 수행 해야 하고 소스에서 대상 서버로의 SSH 키가 제대로 작동하면 다음 과 같이 명령 scp매개 변수로 명령 을 보내십시오 ssh.

ssh user@source 'scp /path/to/file user@destination:/path/to/file'

고맙게도 그 서버는 모두 PasswordAuthentication을 비활성화하고 키를 서로 추가 할 수 없으므로 서로 연결할 수 없다는 점을 제외하면 분명히 작동합니다.
Jan Spurny

0

"호스트 키 확인 실패"오류 메시지를 검색 중입니다. 여기서 가장 간단한 일인 것 같습니다. askubuntu에서이 Q & A를 “호스트 키 확인에 실패했습니다…”오류가있는 SSH 연결 문제입니다 .

해당 Q & A에 대한 답변 중 하나가 ~/.ssh/known_hosts파일에 충돌하는 항목이있는 문제라고 제안했습니다 . 텍스트 편집기를 사용하여 해당 파일에서 번거로운 항목을 삭제하거나이 명령을 사용하여 항목을 제거 할 수 있습니다.

$ ssh-keygen -R hostname

hostnameIP 주소 또는 연결하려는 서버의 이름이 어디에 있습니까 ? 그런데 위의 모든 것은 호스트 2 에있을 것입니다.


이해하는지 잘 모르겠습니다. 나는 에 ssh를 one하고 two아무 문제없이 내 워크 스테이션에서 서버를 .. 문제가 시작 나는 실행할 때 scp one:file two:file워크 스테이션에서. 그리고 하나 또는 known_hosts 에 파일 이 없습니다 . 방금 워크 스테이션에서 키를 2 개 ( 1 개 라도 확실하게) 제거하려고 시도 했지만 아무것도 변경되지 않았습니다 ( 확실히 y / n propt 제외).
Jan Spurny

@ JanSpurny-귀하의 워크 스테이션에 대한 언급은이 Q에서 적어도 혼란 스럽습니다. 노트북 / 데스크톱을 의미한다고 말할 때. : 당신이 "작품"는 말을 할 때이 같은 일을하고 그래서 scp workstation:file one:fileworkstation:file two:file? 분명히 "workstation : file"이라고 말하지 않아도됩니다. 대화를 위해 명시 적으로 말하고 있습니다.
slm

글쎄, 내 워크 스테이션에서 모든 명령을 실행했다는 것입니다. 그래서 더 같았다 : workstation$ scp one:file fileworkstation$ scp file two:file. 어쨌든, 나는 그것을 해결했다고 생각합니다. 내 답변으로 추가하겠습니다.
Jan Spurny

@ JanSpurny-알았어, 다행이다. 질문 BTW에 감사드립니다!
slm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.