두 개의 원격 호스트(둘 다 서로 다른 서브넷에 있음) 간에 대용량 파일을 전송하려고 합니다. 처음으로 작동하는 이 명령을 찾았습니다.
scp -3 root@foo:/path/to/largefile user@bar:/path/to/where/it/should/go/
이 명령은 처음에는 작동했지만 이제 다른 파일을 전송하기 위해 다시 실행하려고 하면 전송되지 않습니다. 대신 비밀번호를 묻는 메시지가 나타난 다음 종료 코드 1로 종료됩니다. 달리기는 다음 -v
을 제공합니다:
debug1: Sending command: scp -v -f /run/sr-mount/3e3a905f-28ad-01b4-d50a-1ffe151ed28a/debian-8.8.0-amd64-CD-1.iso
Sending file modes: C0644 660602880 debian-8.8.0-amd64-CD-1.iso
Sink: C0644 660602880 debian-8.8.0-amd64-CD-1.iso
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 2480, received 2372 bytes, in 0.1 seconds
Bytes per second: sent 32882.6, received 31450.6
debug1: Exit status 1
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 2904, received 2964 bytes, in 3.3 seconds
Bytes per second: sent 893.5, received 912.0
debug1: Exit status 1
이 명령이 갑자기 더 이상 작동하지 않는 이유를 알려줄 수 있는 사람이 있나요? 확인해봤는데 /var/log/syslog
아무것도 안나오더라구요..
답변1
-vvv
를 사용하여 로그에서 더 많은 정보를 얻을 수 있습니다 . 하지만 문제 -3
는 원격 측에서 오류에 대한 디버깅 정보를 합리적으로 얻을 수 없다는 것입니다(패치가 포함된 업스트림 버그). 오류 메시지는 한 쪽에서 다른 쪽으로 전송되며 이를 표시할 장소가 없습니다(복잡함을 유발하지 않음).
무엇이 잘못될 수 있는지 이해하는 가장 쉬운 방법은 소스 파일을 올바르게 읽을 수 있는지(그리고 이름에 철자 오류가 없는지) 대상 폴더에 쓸 수 있는지, 디스크 공간이 충분한지 등을 확인하는 것입니다.
ssh root@foo stat /path/to/largefile
ssh user@bar stat /path/to/where/it/should/go/
또 다른 가능성은 소스에서 OpenSSH를 빌드하고 위에 링크된 패치를 적용하는 것입니다. 클라이언트에서 오류를 인쇄해야 합니다(컴퓨터에서 이 작업을 수행하는 것만으로도 충분합니다).
또는 직접 사용하면 rsync
성능, 처리량 및 가용성이 더 좋습니다.