Permissão SCP negada: por que isso acontece e como resolver.

O SCP é uma ferramenta de código aberto para transferência de arquivos via SSH. Você pode usá-lo no Linux e em outros sistemas operacionais compatíveis para transferir arquivos por meio de SSH. Ele permite a transferência de arquivos entre dois hosts utilizando uma conexão SSH.

Um erro de "permissão negada" no SCP pode ocorrer por diversos motivos, como caminhos definidos incorretamente ou um erro de permissão de escrita . Vamos explorar algumas das causas desse erro e como resolvê-lo.

Motivo: Falta de permissões de escrita

Um dos motivos para esse erro é que seu usuário não possui permissões de escrita para o diretório especificado no host onde você está tentando gravar os arquivos. Para verificar essas permissões, você pode usar o comando 'ls -l' , que exibirá as permissões de escrita.

Procure a letra 'w' entre os quatro primeiros caracteres da primeira coluna da saída. Se a encontrar, seu usuário tem permissão de escrita para esse diretório. Como alternativa, você sempre pode criar um arquivo usando o comando `touch` nesse diretório. Se não receber nenhum erro, como 'permissão negada', seu usuário tem permissão de escrita.

Exemplo:

Suponha que você queira copiar um arquivo para um host remoto usando o SCP e receba um erro de "permissão negada" devido a problemas de permissão de escrita.

scp abcd.txt user@127.0.0.1:/home/abcduser/abcd.txt

Solução 1: Use a conta root para transferir arquivos

Para corrigir esse erro, você precisa conceder permissões de escrita ao seu usuário nesse diretório. Portanto, você precisa de privilégios de root ou sudo. Outra coisa que você pode fazer é copiar o arquivo para um diretório onde seu usuário tenha permissões de escrita.

Nesse cenário, você precisa conceder permissões de escrita ao usuário atual em /home/abcduser ou pode usar a conta de usuário root para copiar este arquivo.

Para permitir que um usuário root copie um arquivo usando o scp, você precisa permitir o login de root via ssh, o que não é recomendado por motivos de segurança, mas você pode usá-lo mesmo assim em tais cenários e desativá-lo posteriormente.

Para fazer isso, abra o arquivo de configuração do OpenSSH em /etc/ssh/sshd_config e remova o comentário da linha PermitRootLogin em um editor de texto no host remoto.

Em seguida, conecte-se ao host remoto usando sua conta root.

Em seguida, execute o comando da seguinte forma:

scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt

Ou simplesmente, isto resolverá o problema.

scp abcd.txt 127.0.0.1:/abcduser/abcd.txt

Porque são idênticos.

Solução 2: Adicione seu usuário ao grupo com permissões de gravação:

Para que um usuário possa escrever em um diretório/arquivo no Linux, é necessário adicioná-lo ao grupo proprietário do diretório ou arquivo, ou fazer com que o arquivo pertença a esse usuário.

Em nosso exemplo, executamos o comando `ls -l` no diretório `/home/` do sistema remoto para descobrir qual grupo é o proprietário de `/home/abcd`.

O comando `ls -l` fornecerá uma saída onde o conteúdo da quarta coluna representa o grupo proprietário do diretório/arquivo correspondente.

Em nosso exemplo, o grupo `abcduser` é o proprietário do diretório `/home/abcduser` e, portanto, podemos

Basta executar este comando no sistema remoto.

sudo groupadd user abcd

O grupo ao qual queremos que nosso usuário pertença é o 'abcd' , e o usuário cujo grupo queremos alterar é o 'user'.

Execute o comando `ls -l` novamente e, se você vir a letra 'w' na sexta posição da saída na primeira coluna, isso significa que o grupo tem permissões de escrita neste diretório.

Em seguida, execute o comando novamente, que em nosso caso será:

scp abcd.txt user@somepc:/home/abcduser/abcd.txt

Solução 3: Utilize o usuário proprietário deste diretório para copiar o arquivo.

A solução mais simples de todas é que o usuário proprietário deste diretório copie o arquivo para ele.

Basta executar o comando `ls -l` no diretório. No nosso caso, será:

ls -l /home/

O resultado da terceira coluna será o usuário proprietário do diretório correspondente ao nome do diretório que você está procurando. No nosso caso, `abcduser` é o proprietário do diretório `/home/abcduser`, como mostrado na captura de tela acima.

Em seguida, utilize essa conta específica ao copiar o arquivo usando o comando `scp` para o host remoto.
No nosso caso, executamos o comando da seguinte forma:

scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt

Motivo 2: O host remoto não possui uma chave privada para esse usuário.

Você pode receber um erro informando “permissão scp negada” (chave pública) ao tentar transferir arquivos entre hosts.

Este é um problema de autenticação para o `ssh` e o motivo é que você não adicionou uma chave privada ao `scp` enquanto ele estava em execução.

Exemplo:

scp somefile user@127.0.0.1:/home/user/somefile.txt

الحل:

A solução mais simples é executar o comando `scp` com a opção `-i` , adicionando assim a chave privada do usuário ao qual você deseja se conectar ao host remoto e transferir arquivos.

Você precisa se certificar de que possui a chave privada desse usuário e, caso não a tenha, precisa criá-la na máquina remota e, em seguida, fazer com que a ferramenta `scp` a utilize com a opção `-i`.

No nosso caso, a solução seria:

scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt

Onde `key.pem` é o arquivo de chave privada do usuário 'user'.

Observação: Usamos `127.0.0.1` como host remoto apenas para o exemplo; no seu caso, o host remoto provavelmente será uma máquina remota e não sua máquina local.

 

Comentários estão fechados.