Odmowa dostępu do SCP: dlaczego tak się dzieje i jak to naprawić
SCP to narzędzie open source do przesyłania plików przez SSH. Można go używać w systemie Linux i innych obsługiwanych systemach operacyjnych do przesyłania plików przez SSH. Umożliwia przesyłanie plików między dwoma hostami za pomocą połączenia SSH.

mogło się zdarzyć błąd „odmowa dostępu” W SCP z kilku powodów, takich jak: Nieprawidłowo zdefiniowane trasy أو Błąd w pisaniu pozwoleniaPrzyjrzymy się niektórym przyczynom prowadzącym do tego błędu i sposobom jego rozwiązania.
Powód: Brak uprawnień zapisu
Jednym z powodów występowania tego błędu jest to, że Twój użytkownik nie ma uprawnień do zapisu. Dla konkretnego katalogu na hoście, w którym próbujesz zapisać pliki. Aby sprawdzić te uprawnienia, możesz Korzystanie z polecenia „ls -l”Wyświetli uprawnienia zapisu.

Szukaj litery „w” W ciągu pierwszych czterech znaków w pierwszej kolumnie wyniku. Jeśli je widzisz, oznacza to, że Twój użytkownik ma uprawnienia do zapisu Zatem katalog. Alternatywnie, zawsze możesz utworzyć plik za pomocą polecenia touch w tym katalogu. Jeśli nie otrzymasz żadnych błędów, takich jak „odmowa dostępu”, oznacza to, że Twój użytkownik ma uprawnienia do zapisu.
Przykład:
Załóżmy, że chcesz skopiować plik na zdalny host za pomocą protokołu SCP i pojawia się błąd „odmowa dostępu” z powodu braku uprawnień do zapisu.
scp abcd.txt użytkownik@127.0.0.1:/home/abcduser/abcd.txt
Rozwiązanie 1: Użyj konta root do przesłania plików
Aby naprawić taki błąd, Musisz udzielić uprawnień do pisania Aby Twój użytkownik miał dostęp do tego katalogu, potrzebujesz uprawnień roota lub sudo. Możesz też skopiować plik do katalogu, do którego Twój użytkownik ma uprawnienia do zapisu.
W takim scenariuszu należy przyznać bieżącemu użytkownikowi uprawnienia zapisu do pliku /home/abcduser lub użyć konta użytkownika root do skopiowania tego pliku.
Aby umożliwić użytkownikowi root kopiowanie pliku za pomocą protokołu SCP, należy zezwolić na logowanie użytkownika root za pomocą protokołu SSH. Nie jest to zalecane ze względów bezpieczeństwa, ale w takich sytuacjach można z tego skorzystać, a następnie wyłączyć tę opcję.
Aby to zrobić, otwórz Plik konfiguracyjny OpenSH znajduje się w /etc/ssh/sshd_config وUsuń komentarz dotyczący PermitRootLogin W edytorze tekstu na zdalnym hoście.

Następnie połącz się ze zdalnym hostem używając jego konta root.
Następnie uruchom polecenie w następujący sposób:
scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt
Albo po prostu to załatwi sprawę.
scp abcd.txt 127.0.0.1:/abcduser/abcd.txt
Ponieważ są identyczne.
Rozwiązanie 2: Dodaj swojego użytkownika do grupy uprawnień zapisu:
Aby użytkownik mógł zapisywać do katalogu/pliku w systemie Linux, należy albo dodać użytkownika do grupy, która jest właścicielem katalogu lub pliku, albo uczynić plik właścicielem tego użytkownika.
W naszym przykładzie uruchamiamy polecenie ls -l w katalogu /home/ na systemie zdalnym, aby dowiedzieć się, która grupa jest właścicielem /home/abcd.
Polecenie `ls -l` zwróci wynik, w którym zawartością czwartej kolumny będzie grupa będąca właścicielem odpowiedniego katalogu/pliku.

W naszym przykładzie grupa `abcduser` jest właścicielem katalogu `/home/abcduser`, dlatego możemy
Wystarczy uruchomić to polecenie w systemie zdalnym.
sudo groupadd użytkownik abcd
To jest grupa 'abcd' Grupa, do której chcemy przypisać użytkownika, oraz użytkownik, którego grupę chcemy zmienić, to „użytkownik”.
Ponownie uruchom polecenie `ls -l` i jeśli Zobaczyłem literę „w” na szóstej pozycji Z wyjścia w pierwszej kolumnie wynika, że grupa ma uprawnienia do zapisu w tym katalogu.
Następnie uruchom polecenie ponownie, które w naszym przypadku będzie wyglądać następująco:
scp abcd.txt użytkownik@somepc:/home/abcduser/abcd.txt
Rozwiązanie 3: Użyj użytkownika, który jest właścicielem tego katalogu, aby skopiować plik.
Najprostszym rozwiązaniem jest skopiowanie pliku do tego katalogu przez użytkownika, który jest jego właścicielem.
Wystarczy uruchomić polecenie `ls -l` w katalogu. W naszym przypadku będzie to:
ls -l /dom/

Wynikiem z trzeciej kolumny będzie użytkownik, który jest właścicielem katalogu odpowiadającego nazwie interesującego Cię katalogu. W naszym przypadku `abcduser` jest właścicielem katalogu `/home/abcduser`, jak pokazano na powyższym zrzucie ekranu.
Następnie użyj tego konkretnego konta podczas kopiowania pliku za pomocą `scp` na zdalny host.
W naszym przypadku uruchamiamy polecenie w następujący sposób:
scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt
Powód 2: Zdalny host nie ma klucza prywatnego dla tego użytkownika.
Podczas próby przesłania plików między hostami może pojawić się komunikat o błędzie „scp permission denied” (klucz publiczny).
Jest to problem z uwierzytelnianiem dla `ssh`. Powodem jest to, że nie dodałeś klucza prywatnego do `scp` podczas jego działania.
Przykład:
scp somefile user@127.0.0.1:/home/user/somefile.txt
Rozwiązanie:
Proste rozwiązanie tego problemu jest takie: Uruchomienie polecenia `scp` z flagą `-i`Dlatego dodaj klucz prywatny dla użytkownika, którego chcesz połączyć ze zdalnym hostem i do którego chcesz przesłać pliki.
Musisz upewnić się, że masz klucz prywatny dla tego użytkownika. Jeśli go nie masz, musisz go utworzyć na komputerze zdalnym, a następnie zmusić narzędzie `scp` do jego użycia, używając tagu `-i`.
W naszym przypadku rozwiązaniem byłoby:
scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt
Gdzie `key.pem` jest plikiem klucza prywatnego dla użytkownika 'user'.
Ogłoszenie: Użyliśmy `127.0.0.1` Przykładowo, będąc hostem zdalnym, w Twoim przypadku hostem zdalnym jest najprawdopodobniej urządzenie zdalne, a nie urządzenie lokalne.
Możliwość dodawania komentarzy nie jest dostępna.