scp forçar sobrescrever arquivos somente leitura

3

Eu estava querendo usar scp para mover alguns arquivos e sobrescrever quaisquer instâncias existentes desses arquivos no servidor de destino. Alguns deles podem ser lidos apenas, o que, naturalmente, faz com que o scp falhe com a "permissão negada". Não consegui encontrar uma opção --force type para scp ; Isso é possível?

Estou ciente de rsync , mas isso não está disponível no momento no servidor de destino.

    
por Aaron 04.02.2013 / 04:25

4 respostas

2

Você não pode modificar / sobrescrever nenhum arquivo se não tiver permissão de gravação, e nenhuma possível opção scp pode mudar isso.

Para resolvê-lo, você deve se conectar primeiro ao servidor (usando ssh , por exemplo) e modificar a permissão em seu arquivo. Se você não sabe como fazer isso, aqui está um comando simples que faz o truque:

chmod +w /path/to/your/file

Algumas notas:

  • Provavelmente, há um motivo pelo qual esses arquivos são somente leitura. Antes de fazer qualquer coisa, certifique-se de saber por que e que mudar isso não vai quebrar nada nem introduzir falhas de segurança.

  • Se necessário, você pode remover a permissão de gravação depois de executar o comando scp (com isto: chmod -w /path/to/file ).

  • Se houver muitos arquivos com permissão somente leitura, você precisará procurá-los. find (pelo menos a versão GNU disponível na maioria das distribuições Linux) tem um teste -perm que você pode usar ( man find para mais informações).

  • Alguém pode sugerir que você se conecte como root ou use sudo . Vai funcionar, mas pelo amor de Deus não. Não posso começar a dizer o quanto isso seria errado.

por 04.02.2013 / 04:41
2

Se o SFTP estiver disponível no servidor (geralmente é), você pode usar SSHFS . Isso permite montar os arquivos remotos no cliente. Você precisa de um daemon de SFTP no servidor e do FUSE no cliente.

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

Você pode usar qualquer comando local, como cp , chmod , rsync , etc., sem ter que se preocupar se os arquivos são locais ou remotos. Com rsync , passe a opção --no-whole-file para dizer a ele para usar seu algoritmo de transferência delta que economiza largura de banda (que é desligado quando o rsync acredita que ambos os caminhos são locais).

rsync -a --no-whole-file somedir /net/myserver/somewhere
    
por 05.02.2013 / 01:27
0

O Rsync não precisa estar no servidor de destino; você pode usar

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

Informações sobre isso aqui:

link

Como dito anteriormente, não use apenas arquivos de leitura; Eu suponho que você saiba exatamente o que está fazendo. Outro método é scp ou rsync os arquivos em um diretório / tmp / blah no servidor de destino e, em seguida, mova-os uma vez escritos.

    
por 05.02.2013 / 04:11
0

Se scp está lhe dando 'permissão negada erro' em um determinado arquivo (mas ssh -v mostra autenticação bem sucedida) então o problema é que você está tentando sobrescrever um arquivo existente com outro conjunto de permissões ou o arquivo pode ter outro proprietário (com outros conjuntos de permissões).

Tente remover o arquivo original. Então os scps subseqüentes irão sobrescrever.

    
por 12.05.2017 / 19:41

Tags