Отказано в разрешении SCP: в чем причина? Как исправить?
SCP — это открытая утилита для передачи файлов SSH, которую вы можете использовать в Linux и других поддерживаемых операционных системах для передачи файлов по SSH. Его можно использовать для передачи файлов между двумя хостами с помощью соединения SSH.
Ошибка SCP «Отказано в доступе» может возникать по разным причинам, например, из-за неправильно указанных путей или ошибки разрешения на запись. Мы рассмотрим некоторые причины возникновения этой ошибки и способы ее устранения.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Причина: нет прав на запись
Одна из причин возникновения этой ошибки заключается в том, что у вашего пользователя нет прав на запись для определенного каталога на хосте, в который вы пытаетесь записать файлы. Чтобы проверить эти разрешения, вы можете использовать команду «ls -l», которая отобразит разрешения на запись.
Найдите букву «w» в первых четырех буквах первого столбца вывода. Если вы видите его, это означает, что у вашего пользователя есть права на запись в этот каталог. Кроме того, вы всегда можете создать файл с помощью команды touch в этом каталоге. Если вы не получаете никаких ошибок, таких как «отказано в доступе», это означает, что у вашего пользователя есть права на запись.
Пример:
Допустим, вы хотите скопировать файл на удаленный хост с помощью SCP, и вам отказывают в доступе из-за прав на запись.
scp abcd.txt пользователь@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 в текстовом редакторе на удаленном хосте.
После этого подключитесь к удаленному хосту, используя его корневую учетную запись.
Затем выполните команду следующим образом:
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 даст вам вывод, где содержимое 4-го столбца — это группа, которой принадлежит соответствующий каталог/файл.
В нашем примере это группа abcduser, которой принадлежит каталог /home/abcduser, тогда мы можем
Просто запустите эту команду на удаленной системе.
sudo groupдобавить пользователя abcd
Мы хотим, чтобы наш пользователь был частью группы «abcd», а пользователь, группу которого мы хотим изменить, называется «пользователь».
Запустите команду ls -l еще раз, и если вы увидите «w» на 6-м месте вывода в первом столбце, это означает, что у группы есть права на запись в этот каталог.
Затем снова запустите команду, которая в нашем случае будет следующей:
scp abcd.txt user@somepc:/home/abcduser/abcd.txt
Решение 3. Используйте пользователя, которому принадлежит этот каталог, для копирования файла
Самое простое решение — использовать пользователя, которому принадлежит этот каталог, для копирования в него файла.
Просто запустите ls -l в каталоге. В нашем случае это будет:
лс -л /дом/
Результатом третьего столбца будет пользователь, которому принадлежит этот каталог, соответствующий имени интересующего вас каталога. В нашем случае это abcduser, которому принадлежит каталог /home/abcduser, как показано на снимке экрана выше.
Затем используйте эту конкретную учетную запись при копировании файла с помощью scp на удаленный хост.
В нашем случае мы запускаем команду следующим образом:
scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt
Причина 2: отсутствие закрытого ключа для этого пользователя удаленного хоста
Вы можете получить сообщение об ошибке, в котором будет указано, что разрешение scp отклонено (открытый ключ), когда вы пытаетесь передать файлы между хостами.
Это проблема аутентификации ssh, и причина этого в том, что вы не добавили закрытый ключ в scp во время его запуска.
Пример:
scp некоторый файл пользователя@127.0.0.1:/home/user/somefile.txt
Решение:
Простое исправление для этого — запустить команду scp с флагом -i, тем самым добавив закрытый ключ для того пользователя, с помощью которого вы хотите подключиться к удаленному хосту и передать файлы.
Вам нужно убедиться, что у вас есть закрытый ключ для этого пользователя, и если у вас его нет, вам нужно сгенерировать его на удаленной машине, а затем утилита scp использует его с помощью флага -i.
В нашем случае решение будет таким:
scp -i key.pem какой-то файл user@127.0.0.1:/home/user/somefile.txt
Где key.pem — это файл закрытого ключа для пользователя «пользователь».
Примечание. Мы использовали 127.0.0.1 в качестве удаленного хоста только для примера, в вашем случае удаленный хост, скорее всего, будет удаленным компьютером, а не вашим локальным хостом.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)