나는큰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
옵션이 실제로는 단지 다음과 연결된다는 것을 보여주기 때문입니다.하나그리고로부터하나그것은 연결을 시도합니다둘. 서버가 있기 때문에 이것은 분명히 불가능합니다.하나에 연결하면 안 된다둘.
답변1
이 답변에 대한 모든 공로는https://superuser.com/a/602436/142948
-3
scp 옵션이 필요합니다 .
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
그렇지 않으면 두 번째 별칭 "two"가 확인됩니다.호스트 "one"에서, 존재하지 않을 수도 있습니다.
답변2
간단한 파이프
이 시도:
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
로 끝납니다 . 이것은 ssh 포트이므로 다른 scp, rsync 등에 사용할 수 있습니다. 에서 서버를 시작 하고 22 대신 포트 873을 전달할 수도 있습니다 . 또는 양쪽에서 임의의 포트 번호를 사용하여 원시 데이터를 전송할 수 있습니다.two
localhost
22
rsync
two
nc
위 접근 방식의 주요 이점은 단방향 파이프가 아닌 두 시스템 간에 양방향 TCP 연결이 있다는 것입니다. 이를 통해 당사자들은 정보를 교환할 수 있으며, 이는 rsync
이 경우 특히 중요합니다.
답변3
이제 원본 서버(a)에 대한 사용자 액세스 권한이 있으므로 로그인하여 해당 서버에서 scp 명령을 실행하면 됩니다. 시간이 너무 오래 걸리는 것이 걱정된다면 a에서 명령을 시작한 다음 및 screen
화면에서 분리하여 Ctrl+a d
실행할 수 있습니다.
그러나 만약 당신이~ 해야 하다워크스테이션에서 이 작업을 수행하면 원본 서버에서 대상 서버로의 SSH 키가 제대로 작동하고 명령을 scp
명령에 대한 인수로 보냅니다 ssh
. 예를 들면 다음과 같습니다.
ssh user@source 'scp /path/to/file user@destination:/path/to/file'
답변4
여기서는 "호스트 키 확인에 실패했습니다."라는 오류 메시지를 검색하는 것이 가장 쉬운 것 같습니다. askubuntu에서 다음과 같은 제목의 Q&A를 찾았습니다."호스트 키 확인 실패..." 오류가 포함된 SSH 연결 문제.
중 하나답변Q&A는 ~/.ssh/known_hosts
파일의 항목 충돌로 인해 문제가 발생했음을 나타냅니다. 텍스트 편집기를 사용하여 파일에서 문제가 되는 항목을 제거하거나 다음 명령을 사용하여 항목을 제거할 수 있습니다.
$ ssh-keygen -R hostname
이는 hostname
연결하려는 서버의 IP 주소나 이름일 수 있습니다. 위의 모든 내용은 콘솔에 있습니다.둘덧붙여서.