SCP Permission Denied: Why It Except and How To Fix It

SCP — это инструмент с открытым исходным кодом для передачи файлов по SSH. Его можно использовать в Linux и других поддерживаемых операционных системах для передачи файлов через SSH. Он может использоваться для передачи файлов между двумя хостами с использованием SSH-соединения.

Ошибка «отказано в доступе» в SCP может возникать по нескольким причинам, например, из-за неправильно определенных путей или ошибки прав на запись . Мы рассмотрим некоторые причины этой ошибки и способы ее устранения.

Причина: Отсутствие прав на запись.

Одна из причин этой ошибки заключается в том, что у вашего пользователя нет прав на запись в конкретную директорию на хосте, куда вы пытаетесь записать файлы. Чтобы проверить эти права, вы можете использовать команду 'ls -l' , которая отобразит права на запись.

Найдите букву «w» среди первых четырех символов в первом столбце вывода. Если вы ее видите, значит, у вашего пользователя есть права на запись в этот каталог. В качестве альтернативы вы всегда можете создать файл с помощью команды touch в этом каталоге. Если вы не получаете никаких ошибок, таких как «отказано в доступе», значит, у вашего пользователя есть права на запись.

Пример:

Предположим, вы хотите скопировать файл на удаленный хост с помощью SCP, и получаете ошибку «отказано в доступе» из-за проблем с правами на запись.

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

Решение 1: Используйте учетную запись root для передачи файлов.

Для исправления этой ошибки необходимо предоставить пользователю права на запись в этот каталог. Для этого требуются права root или sudo. Другой вариант — скопировать файл в каталог, где у пользователя есть права на запись.

В подобной ситуации вам либо нужно предоставить текущему пользователю права на запись в каталог /home/abcduser, либо использовать учетную запись root для копирования этого файла.

Чтобы разрешить пользователю root копировать файл с помощью scp, необходимо разрешить вход root через SSH, что не рекомендуется по соображениям безопасности, но в подобных сценариях его можно использовать и после завершения процесса.

Для этого откройте конфигурационный файл openssh в /etc/ssh/sshd_config и раскомментируйте строку PermitRootLogin в текстовом редакторе на удаленном хосте.

Далее подключитесь к удалённому хосту, используя его учетную запись root.

Затем выполните команду следующим образом:

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

Или же, проще говоря, это сработает.

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

Потому что они идентичны.

Решение 2: Добавьте пользователя в группу с правами на запись:

Для того чтобы пользователь мог записывать данные в каталог/файл в Linux, необходимо либо добавить пользователя в группу, которая является владельцем каталога или файла, либо сделать файл собственностью этого пользователя.

В нашем примере мы запускаем команду `ls -l` в каталоге `/home/` на удаленной системе, чтобы узнать, какой группе принадлежит каталог `/home/abcd`.

Команда `ls -l` выдаст результат, в котором содержимое четвертого столбца будет представлять собой группу, которой принадлежит соответствующий каталог/файл.

В нашем примере группа `abcduser` является владельцем каталога `/home/abcduser`, поэтому мы можем

Просто выполните эту команду на удалённой системе.

sudo groupadd user abcd

Мы хотим, чтобы наш пользователь принадлежал к группе 'abcd' , а пользователь, чью группу мы хотим изменить, — это 'user'.

Снова выполните команду `ls -l`, и если в шестом месте в первом столбце вывода вы увидите букву 'w' , это означает, что у группы есть права на запись в этот каталог.

Затем снова выполните команду, которая в нашем случае будет следующей:

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

Решение 3: Используйте пользователя, которому принадлежит этот каталог, для копирования файла.

Простейшее решение — это скопировать файл в эту директорию пользователю, являющемуся её владельцем.

Просто выполните команду `ls -l` в нужном каталоге. В нашем случае это будет:

ls -l /home/

В третьем столбце отобразится пользователь, которому принадлежит каталог, соответствующий интересующему вас имени. В нашем случае, как показано на скриншоте выше, `abcduser` является владельцем каталога `/home/abcduser`.

Затем используйте эту конкретную учетную запись при копировании файла с помощью команды `scp` на удаленный хост.
В нашем случае мы выполняем команду следующим образом:

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

Причина 2: У удалённого хоста отсутствует закрытый ключ для этого пользователя.

При попытке передачи файлов между хостами может появиться ошибка «scp permission denied» (отказано в доступе к открытому ключу).

Это проблема аутентификации для `ssh`, и причина в том, что вы не добавили закрытый ключ в `scp` во время его выполнения.

Пример:

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

Решение:

Простейшее решение — запустить команду `scp` с флагом `-i` , добавив таким образом закрытый ключ пользователя, с которым вы хотите подключиться к удаленному хосту и передать файлы.

Вам необходимо убедиться, что у вас есть закрытый ключ для этого пользователя, а если его нет, то вам нужно создать его на удаленной машине, а затем настроить инструмент `scp` на его использование с параметром `-i`.

В нашем случае решение будет следующим:

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

Где `key.pem` — это файл закрытого ключа для пользователя 'user'.

Примечание: В качестве примера мы использовали `127.0.0.1` в качестве удаленного хоста; в вашем случае удаленным хостом, скорее всего, будет удаленная машина, а не ваша локальная.

 

Комментарии закрыты.