SCP Erişimi Reddedildi: Neden Oluyor ve Nasıl Düzeltilir?
SCP, SSH üzerinden dosya aktarımı için kullanılan açık kaynaklı bir araçtır. Linux ve diğer desteklenen işletim sistemlerinde SSH üzerinden dosya aktarımı için kullanılabilir. İki sunucu arasında SSH bağlantısı kullanarak dosya aktarımı yapmak için kullanılabilir.

SCP'de "erişim reddedildi" hatası , yanlış tanımlanmış yollar veya yazma izni hatası gibi çeşitli nedenlerden kaynaklanabilir . Bu hatanın bazı nedenlerini ve nasıl çözüleceğini inceleyeceğiz.
Sebep: Yazma izni eksikliği
Bu hatanın nedenlerinden biri, kullanıcınızın dosyaları yazmaya çalıştığınız sunucudaki belirli dizin için yazma iznine sahip olmamasıdır. Bu izinleri kontrol etmek için, yazma izinlerini görüntüleyecek olan 'ls -l' komutunu kullanabilirsiniz .

Çıktının ilk sütunundaki ilk dört karakter arasında 'w' harfini arayın . Eğer görürseniz, kullanıcınızın o dizin için yazma izni vardır. Alternatif olarak, o dizinde touch komutunu kullanarak her zaman bir dosya oluşturabilirsiniz. 'İzin reddedildi' gibi herhangi bir hata almazsanız, kullanıcınızın yazma izni vardır.
Örnek:
Diyelim ki SCP kullanarak uzak bir sunucuya dosya kopyalamak istiyorsunuz ve yazma izinleri nedeniyle "erişim reddedildi" hatası alıyorsunuz.
scp abcd.txt user@127.0.0.1:/home/abcduser/abcd.txt
Çözüm 1: Dosyaları aktarmak için root hesabını kullanın.
Bu hatayı düzeltmek için, kullanıcınıza o dizine yazma izni vermeniz gerekir . Bu nedenle, root veya sudo ayrıcalıklarına ihtiyacınız vardır. Yapabileceğiniz başka bir şey ise dosyayı, kullanıcınızın yazma iznine sahip olduğu bir dizine kopyalamaktır.
Bu durumda, ya mevcut kullanıcının /home/abcduser dizinine yazma izni vermeniz ya da bu dosyayı kopyalamak için root kullanıcı hesabını kullanmanız gerekir.
Bir root kullanıcısının scp kullanarak dosya kopyalamasına izin vermek için, güvenlik nedenleriyle önerilmeyen ancak yine de bu tür senaryolarda kullanıp daha sonra devre dışı bırakabileceğiniz SSH üzerinden root oturum açma izni vermeniz gerekir.
Bunu yapmak için, uzak sunucudaki /etc/ssh/sshd_config dizinindeki openssh yapılandırma dosyasını açın ve bir metin düzenleyici kullanarak PermitRootLogin satırının yorum satırını kaldırın .

Ardından, uzak sunucuya root hesabını kullanarak bağlanın.
Ardından komutu aşağıdaki gibi çalıştırın:
scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt
Ya da kısaca, bu işinizi görecektir.
scp abcd.txt 127.0.0.1:/abcduser/abcd.txt
Çünkü bunlar birbirinin aynısı.
Çözüm 2: Kullanıcınızı yazma izinleri grubuna ekleyin:
Linux'ta bir kullanıcının bir dizine/dosyaya yazabilmesi için, ya kullanıcıyı dizinin veya dosyanın sahibi olan gruba eklemeniz ya da dosyanın sahipliğini o kullanıcıya vermeniz gerekir.
Örneğimizde, uzak sistemdeki /home/ dizininde ls -l komutunu çalıştırarak /home/abcd dosyasının hangi gruba ait olduğunu buluyoruz.
`ls -l` komutu size bir çıktı verecektir; bu çıktının dördüncü sütununda ilgili dizinin/dosyanın sahibi olan grup yer almaktadır.

Örneğimizde, `abcduser` grubu `/home/abcduser` dizininin sahibidir ve bu nedenle şunları yapabiliriz:
Uzak sistemde bu komutu çalıştırmanız yeterli.
sudo groupadd user abcd
Kullanıcımızın 'abcd' grubuna dahil olmasını istiyoruz ve grubunu değiştirmek istediğimiz kullanıcı ise 'user' adlı kullanıcıdır.
`ls -l` komutunu tekrar çalıştırın ve çıktının ilk sütununda altıncı konumda 'w' harfini görürseniz , bu, grubun bu dizinde yazma iznine sahip olduğu anlamına gelir.
Ardından komutu tekrar çalıştırın; bizim örneğimizde bu komut şu şekilde olacaktır:
scp abcd.txt user@somepc:/home/abcduser/abcd.txt
Çözüm 3: Bu dizinin sahibi olan kullanıcıyı kullanarak dosyayı kopyalayın.
En basit çözüm, bu dizinin sahibi olan kullanıcının dosyayı bu dizine kopyalamasıdır.
Dizin üzerinde `ls -l` komutunu çalıştırmanız yeterlidir. Bizim örneğimizde bu şu şekilde olacaktır:
ls -l /home/

Üçüncü sütunun çıktısı, ilgilendiğiniz dizin adına karşılık gelen dizinin sahibi olan kullanıcı olacaktır. Bizim örneğimizde, yukarıdaki ekran görüntüsünde gösterildiği gibi `abcduser` kullanıcısı `/home/abcduser` dizininin sahibidir.
Ardından, dosyayı `scp` komutuyla uzak sunucuya kopyalarken bu belirli hesabı kullanın.
Bizim durumumuzda, komutu şu şekilde çalıştırıyoruz:
scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt
Sebep 2: Uzak sunucuda o kullanıcıya ait özel anahtar bulunmamaktadır.
Sunucular arasında dosya aktarımı yapmaya çalışırken "scp izni reddedildi" (genel anahtar) hatası alabilirsiniz.
Bu, `ssh` için bir kimlik doğrulama sorunudur ve bunun nedeni, `scp` çalışırken ona özel bir anahtar eklememiş olmanızdır.
Örnek:
scp somefile user@127.0.0.1:/home/user/somefile.txt
Çözüm:
Bunun basit çözümü, `scp` komutunu `-i` bayrağıyla çalıştırmak ve böylece uzak sunucuya bağlanmak ve dosya aktarmak istediğiniz kullanıcının özel anahtarını eklemektir.
Öncelikle o kullanıcıya ait özel anahtara sahip olduğunuzdan emin olmalısınız; eğer sahip değilseniz, uzak makinede bir anahtar oluşturmanız ve ardından `scp` aracının bu anahtarı `-i` etiketiyle kullanmasını sağlamanız gerekir.
Bizim durumumuzda çözüm şöyle olurdu:
scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt
Burada `key.pem`, 'user' kullanıcısının özel anahtar dosyasıdır.
Not: Burada uzak sunucu olarak yalnızca örnek amaçlı olarak `127.0.0.1` kullanılmıştır ; sizin durumunuzda uzak sunucu büyük olasılıkla yerel makineniz değil, uzaktaki bir makine olacaktır.
Yoruma kapalı.