Autorizzazione SCP negata: perché succede e come risolverlo

SCP è uno strumento open source per il trasferimento di file tramite SSH. È possibile utilizzarlo su Linux e altri sistemi operativi supportati per trasferire file tramite SSH. Può essere utilizzato per trasferire file tra due host tramite una connessione SSH.

In SCP, un errore di "permesso negato" può verificarsi per diversi motivi, come percorsi definiti in modo errato o un errore di autorizzazione di scrittura . Analizzeremo alcune delle cause di questo errore e come risolverlo.

Motivo: mancanza di permessi di scrittura

Una delle cause di questo errore è che il tuo utente non dispone dei permessi di scrittura per la directory specificata sull'host in cui stai tentando di scrivere i file. Per verificare questi permessi, puoi utilizzare il comando 'ls -l' , che visualizzerà i permessi di scrittura.

Cerca la lettera 'w' tra i primi quattro caratteri della prima colonna dell'output. Se la trovi, il tuo utente ha i permessi di scrittura per quella directory. In alternativa, puoi sempre creare un file in quella directory usando il comando touch. Se non ricevi alcun errore, come ad esempio 'permesso negato', il tuo utente ha i permessi di scrittura.

Esempio:

Supponiamo che tu voglia copiare un file su un host remoto tramite SCP e che tu riceva un errore "autorizzazione negata" a causa dei permessi di scrittura.

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

Soluzione 1: utilizzare l'account root per trasferire i file

Per risolvere questo errore, è necessario concedere al proprio utente i permessi di scrittura per quella directory. Pertanto, sono necessari i privilegi di root o sudo. In alternativa, è possibile copiare il file in una directory in cui l'utente dispone dei permessi di scrittura.

In uno scenario del genere, è necessario concedere all'utente corrente i permessi di scrittura su /home/abcduser oppure è possibile utilizzare l'account utente root per copiare questo file.

Per consentire a un utente root di copiare un file tramite scp, è necessario consentire l'accesso root tramite ssh, operazione sconsigliata per motivi di sicurezza, ma che è comunque possibile utilizzare in tali scenari e disabilitare in seguito.

Per fare ciò, apri il file di configurazione di OpenSSH in /etc/ssh/sshd_config e rimuovi il commento dalla riga PermitRootLogin utilizzando un editor di testo sull'host remoto.

Quindi, connettiti all'host remoto utilizzando il suo account root.

Quindi eseguire il comando come segue:

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

Oppure, semplicemente, questo farà al caso tuo.

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

Perché sono identici.

Soluzione 2: aggiungi il tuo utente al gruppo con autorizzazioni di scrittura:

Affinché un utente possa scrivere in una directory/file in Linux, è necessario aggiungere l'utente al gruppo proprietario della directory o del file oppure rendere il file di proprietà di quell'utente.

Nel nostro esempio, eseguiamo ls -l sulla directory /home/ sul sistema remoto per scoprire quale gruppo è proprietario di /home/abcd.

Il comando `ls -l` fornirà un output in cui il contenuto della quarta colonna è il gruppo proprietario della directory/file corrispondente.

Nel nostro esempio, il gruppo `abcduser` possiede la directory `/home/abcduser`, e quindi possiamo

Basta eseguire questo comando sul sistema remoto.

sudo groupadd utente abcd

Vogliamo che il nostro utente entri a far parte del gruppo 'abcd' , e l'utente di cui vogliamo cambiare il gruppo è 'user'.

Esegui nuovamente il comando `ls -l` e, se nella sesta posizione dell'output, nella prima colonna, compare la lettera 'w', significa che il gruppo dispone dei permessi di scrittura su questa directory.

Quindi esegui nuovamente il comando, che nel nostro caso sarà:

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

Soluzione 3: utilizzare l'utente proprietario di questa directory per copiare il file.

La soluzione più semplice è che l'utente proprietario di questa directory copi il file al suo interno.

Basta eseguire `ls -l` sulla directory. Nel nostro caso, sarà:

ls -l /home/

L'output della terza colonna sarà l'utente proprietario della directory corrispondente al nome della directory che ti interessa. Nel nostro caso, `abcduser` è proprietario della directory `/home/abcduser`, come mostrato nello screenshot qui sopra.

Quindi utilizzare questo account specifico durante la copia del file tramite `scp` sull'host remoto.
Nel nostro caso, eseguiamo il comando come segue:

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

Motivo 2: l'host remoto non dispone di una chiave privata per quell'utente.

Potresti ricevere un errore che indica "autorizzazione scp negata" (chiave pubblica) quando tenti di trasferire file tra host.

Si tratta di un problema di autenticazione per `ssh` e il motivo è che non hai aggiunto una chiave privata a `scp` mentre era in esecuzione.

Esempio:

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

الحل:

La soluzione più semplice è eseguire il comando `scp` con l'opzione `-i` , aggiungendo così la chiave privata dell'utente a cui si desidera connettersi all'host remoto e trasferire i file.

Devi assicurarti di avere la chiave privata per quell'utente e, in caso contrario, devi crearla sul computer remoto e poi fare in modo che lo strumento `scp` la utilizzi con il tag `-i`.

Nel nostro caso la soluzione sarebbe:

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

Dove `key.pem` è il file della chiave privata per l'utente 'user'.

Nota: nell'esempio abbiamo utilizzato `127.0.0.1` come host remoto; nel tuo caso, è più probabile che l'host remoto sia una macchina remota e non la tua macchina locale.

 

I commenti sono chiusi.