scp는 읽기 전용 파일을 강제로 덮어씁니다.

scp는 읽기 전용 파일을 강제로 덮어씁니다.

scp일부 파일을 이동하고 대상 서버에 있는 해당 파일의 기존 인스턴스를 덮어쓰는 데 사용하고 싶습니다 . 그 중 일부는 읽기 전용일 수 있으며 물론 scp"권한 거부"로 인해 실패합니다. --force에 대한 유형 스위치를 찾을 수 없는 것 같습니다 . scp이것이 가능합니까?

알고 있지만 rsync현재 대상 서버에서는 사용할 수 없습니다.

답변1

쓰기 권한이 없으면 파일을 수정/덮어쓸 수 없으며 scp파일을 변경할 수 있는 옵션도 없습니다.

이 문제를 해결하려면 먼저 서버에 연결( ssh예: 사용)하고 파일의 권한을 수정해야 합니다. 무엇을 해야할지 모르는 경우 문제를 해결하기 위한 간단한 명령은 다음과 같습니다.

chmod +w /path/to/your/file

몇 가지 참고사항:

  • 아마도 이러한 파일이 읽기 전용인 이유가 있을 것입니다. 어떤 작업을 수행하기 전에 왜 이 설정을 변경해도 문제가 발생하거나 보안 허점이 발생하지 않는지 확인하세요.

  • 필요한 경우 명령을 실행한 후 쓰기 권한을 제거할 수 있습니다 scp( chmod -w /path/to/file: 사용).

  • 읽기 전용 권한이 있는 파일이 너무 많으면 해당 파일을 찾아야 합니다. find(적어도 대부분의 Linux 배포판에서 사용 가능한 GNU 버전) -perm사용할 수 있는 테스트가 있습니다( man find자세히 알아보기).

  • 누군가는 루트로 연결하거나 를 사용하라고 제안할 수도 있습니다 sudo. 하지만 맙소사, 그렇지 않습니다. 이것이 얼마나 잘못된 것인지는 말할 수 없습니다.

답변2

서버에서 SFTP를 사용할 수 있는 경우(일반적으로 사용 가능) 다음을 사용할 수 있습니다.SSHFS. 이를 통해 클라이언트에 원격 파일을 마운트할 수 있습니다. 서버에 SFTP 데몬을 설치해야 합니다.퓨즈클라이언트에서.

mkdir /net/myserver
sshfs myserver:/ /net/server

그런 다음 파일이 로컬인지 원격인지에 대해 걱정하지 않고 cp, chmod, 등과 같은 로컬 명령을 사용할 수 있습니다 . 를 rsync사용하여 대역폭 절약 델타 전송 알고리즘(rsync가 두 경로를 모두 로컬로 간주하면 꺼짐)을 사용하도록 지시하는 옵션을 rsync전달합니다 .--no-whole-file

rsync -a --no-whole-file somedir /net/myserver/somewhere

답변3

Rsync는 대상 서버에 있을 필요가 없습니다.

# rsync -avz -e ssh /path/to/files/ [email protected]:/tmp/ 

이에 대한 정보는 다음과 같습니다.

http://troy.jdmz.net/rsync/index.html

이전에 말했듯이 읽기 전용 파일을 가볍게 여기지 마십시오. 자신이 수행하는 작업이 무엇인지 정확히 알고 있다고 가정합니다. 또 다른 방법은 파일을 대상 서버의 /tmp/blah 디렉터리로 scp 또는 rsync한 다음 쓴 후 이동하는 것입니다.

답변4

scp가 특정 파일에 대해 "권한 거부 오류"를 표시하는 경우(그러나 ssh -v에 인증 성공이 표시됨) 문제는 기존 파일을 다른 권한 집합으로 덮어쓰려고 하거나 파일에 다른 소유자가 있을 수 있다는 것입니다. (기타 권한 집합).

원본 파일을 삭제해 보세요. 그런 다음 후속 scps를 덮어씁니다.

관련 정보