Bir sunucuyla çalışırken er ya da geç şu ana gelirsiniz: bilgisayarınızdaki bir dosyayı sunucuya göndermeniz ya da sunucudaki bir dosyayı kendi diskinize almanız gerekir. Bir yedeği indirmek, bir yapılandırma dosyasını yerinde düzenleyip geri yüklemek, sıkıştırılmış bir site arşivini karşıya atmak... Bu işler için elinizin altındaki en sade ve en güvenli araçlardan biri scp yani "secure copy"dir. Ayrı bir FTP istemcisi kurmadan, tek bir komut satırıyla, tüm trafiği şifreleyerek dosya taşımanızı sağlar.
scp'nin en büyük avantajı, zaten kurulu olan SSH altyapısının üzerine oturmasıdır. Sunucunuza SSH ile bağlanabiliyorsanız, ek bir servis çalıştırmadan, yeni bir port açmadan, üçüncü bir yazılım yüklemeden aynı kimlik bilgileriyle dosya da kopyalayabilirsiniz. Bu rehberde scp'nin temel söz dizimini, yerelden uzağa ve uzaktan yerele kopyalamayı, klasörleri özyinelemeli aktarmayı, farklı port ve anahtar kullanmayı, iki sunucu arasında doğrudan aktarımı adım adım göreceğiz. Sonunda da scp'nin sınırına geldiğiniz noktada rsync'e neden ve nasıl geçeceğinizi, sftp ile farkının ne olduğunu netleştireceğiz.
scp Nedir ve Nasıl Çalışır?#
scp, adı üstünde "güvenli kopyalama" aracıdır ve tüm veri aktarımını SSH tüneli üzerinden yapar. Yani dosyalarınız da, oturum açarken kullandığınız parolanız veya anahtarınız da baştan sona şifrelenerek taşınır. Aradaki ağı dinleyen biri paketlerinizi yakalasa dahi içeriği çözemez. Bu yönüyle scp, verinizi düz metin olarak taşıyan eski rcp ve ftp araçlarının güvenli halefidir.
Çalışma mantığı basittir: scp arka planda bir SSH bağlantısı kurar, karşı tarafta kısa süreliğine bir kopyalama süreci başlatır ve dosyayı bu şifreli kanaldan akıtır. Dolayısıyla scp'nin çalışması için sunucuda SSH servisinin (sshd) açık olması ve sizin bu sunucuya SSH ile bağlanma yetkinizin bulunması yeterlidir. SSH'in nasıl çalıştığını ve anahtar tabanlı girişin neden parolaya tercih edildiğini merak ediyorsanız, önce SSH bağlantısı ve güvenliği rehberini okumanızı öneririm; buradaki her scp komutu aynı kimlik doğrulama altyapısını kullanır.
Söz diziminin genel kalıbı şudur:
scp [seçenekler] KAYNAK HEDEF
Burada hem kaynak hem hedef ya yerel bir yol ya da kullanici@sunucu:/yol biçiminde uzak bir adres olabilir. Uzak adresi belirten şey, sunucu adından sonra gelen iki nokta işaretidir. Bu iki noktayı unutmak, scp'de yeni başlayanların en sık yaptığı hatadır; iki nokta yoksa scp adresi uzak sunucu değil, yerel bir klasör sanır.
Yerelden Uzağa Dosya Gönderme#
En yaygın senaryo, kendi bilgisayarınızdaki bir dosyayı sunucuya yüklemektir. Örneğin bir yedek arşivini sunucunun /var/www dizinine göndermek isteyelim:
scp yedek.zip [email protected]:/var/www/
Bu komut yedek.zip dosyasını sunucudaki /var/www/ klasörüne, aynı adla kopyalar. Hedef yolun sonundaki eğik çizgi, oranın bir klasör olduğunu belirtir ve iyi bir alışkanlıktır.
Dosyayı karşıya atarken adını da değiştirebilirsiniz. Bunun için hedef yolun sonuna yeni dosya adını yazmanız yeterli:
scp yedek.zip [email protected]:/var/www/site-yedegi-2026.zip
Birden fazla dosyayı tek seferde göndermek de mümkündür; kaynakları peş peşe sıralar, en sona tek bir hedef klasör yazarsınız:
scp index.html style.css script.js [email protected]:/var/www/html/
Eğer kullanıcı adınız yerel makinede ve sunucuda aynıysa, kullanici@ kısmını atlayabilirsiniz; scp o zaman mevcut kullanıcı adınızı kullanır. Yine de karışıklığı önlemek adına kullanıcı adını açıkça yazmayı tercih ederim; özellikle birden çok sunucuyla çalışırken hangi hesapla bağlandığınızı görmek hata olasılığını düşürür.
Uzaktan Yerele Dosya İndirme#
Yön tam tersine döndüğünde de mantık aynıdır: sadece kaynak ile hedefin yerini değiştirirsiniz. Bu kez uzak adres başta, yerel yol sonda olur. Sunucudaki bir günlük dosyasını kendi bilgisayarınızın masaüstüne indirmek için:
scp [email protected]:/var/log/nginx/error.log ~/Masaustu/
Yerel hedef olarak nokta (.) yazarsanız, dosya bulunduğunuz dizine iner:
scp [email protected]:/etc/nginx/nginx.conf .
Bir yapılandırma dosyasını sunucudan indirip düzenleyip geri yüklemek, günlük sistem yönetiminde çok sık başvurulan bir kalıptır. Örneğin bir Nginx yapılandırmasını yerel makinenize alıp rahatça inceleyebilir, gerekli düzenlemeyi yapıp aynı yola geri gönderebilirsiniz:
server {
listen 80;
server_name ornek.com www.ornek.com;
root /var/www/html;
index index.php index.html;
}
Uzaktaki birden çok dosyayı tek seferde indirmek için süslü parantez kalıbını kullanabilirsiniz. Aşağıdaki komut iki dosyayı tek bağlantıda çeker:
scp [email protected]:/etc/nginx/{nginx.conf,mime.types} ~/yedek/
Klasörleri Özyinelemeli Kopyalama (-r)#
scp varsayılan olarak yalnızca tek tek dosyalarla ilgilenir; bir klasörü olduğu gibi, içindeki tüm alt klasör ve dosyalarla birlikte kopyalamak isterseniz -r (recursive, özyinelemeli) bayrağını eklemeniz gerekir. Örneğin bir web sitesinin tüm dosyalarını yüklemek için:
scp -r ./site-dosyalari [email protected]:/var/www/html/
Bu komut site-dosyalari klasörünü, içindeki her şeyle birlikte sunucuya taşır. Aynı biçimde sunucudan bir klasörü indirmek de mümkündür:
scp -r [email protected]:/var/www/html/uploads ~/yerel-yedek/
Burada dikkat edilmesi gereken ince bir nokta var: kaynak klasör adının sonuna eğik çizgi koyup koymamak sonucu değiştirebilir. site-dosyalari yazarsanız klasörün kendisi hedefin içine kopyalanır; site-dosyalari/. yazarsanız yalnızca içeriği kopyalanır. Kritik aktarımlardan önce bu davranışı küçük bir test klasörüyle denemekte fayda var, çünkü büyük bir dizinde yanlışlıkla iç içe klasör oluşturmak can sıkıcı olabilir.
Özyinelemeli kopyalamada bir başka pratik ayrıntı, dosya izinlerinin ve zaman damgalarının korunmasıdır. -p bayrağı, kopyalanan dosyaların değiştirilme zamanını ve erişim izinlerini kaynaktaki gibi bırakır:
scp -rp ./proje [email protected]:/home/kullanici/
Dosya izinlerinin sunucu tarafında nasıl davrandığını ve 755 ile 644 gibi değerlerin ne anlama geldiğini Linux dosya izinleri çerçevesinde ele alıyoruz; özellikle web sunucusuna dosya atarken izinlerin doğru olması siteyi açan/açmayan farkını yaratır.
Port, Anahtar ve Diğer Faydalı Seçenekler#
Gerçek dünyada sunucular her zaman standart 22 numaralı portta çalışmaz; güvenlik için SSH portu sıklıkla değiştirilir. Ayrıca parola yerine SSH anahtarıyla giriş yapıyor olabilirsiniz. scp bu iki durumu da kolayca yönetir, ancak burada ssh komutuyla arasında bir söz dizimi tuzağı vardır.
Port belirtmek (-P): ssh komutunda port için küçük -p kullanılır; ama scp'de küçük -p izinleri korumaya ayrılmıştır. Bu yüzden scp'de port için büyük P, yani -P kullanmanız gerekir. Bu ayrımı karıştırmak çok yaygındır:
scp -P 2222 yedek.zip [email protected]:/var/www/
Anahtar dosyası belirtmek (-i): Özel bir kimlik (identity) dosyasıyla, yani belirli bir SSH anahtarıyla bağlanmak için -i bayrağını kullanırsınız:
scp -i ~/.ssh/sunucu_anahtari.pem dosya.tar.gz [email protected]:/opt/
Port ve anahtarı birlikte de kullanabilirsiniz; scp seçenekleri kaynak ve hedeften önce gelir:
scp -P 2222 -i ~/.ssh/id_ed25519 -r ./build [email protected]:/var/www/html/
Aşağıdaki tablo, günlük kullanımda en çok işinize yarayacak scp seçeneklerini ve ssh ile aralarındaki o kritik farkları özetliyor:
| Seçenek | İşlevi | Not |
|---|---|---|
-r | Klasörleri özyinelemeli kopyalar | Dizin aktarımı için zorunlu |
-P port | Bağlanılacak SSH portunu belirtir | Büyük P; ssh'te küçük p |
-i dosya | Kullanılacak özel anahtar dosyası | Anahtar tabanlı girişte |
-p | İzin ve zaman damgalarını korur | Küçük p; port değil |
-C | Aktarım sırasında sıkıştırma yapar | Yavaş hatlarda faydalı |
-l hız | Bant genişliğini sınırlar (Kbit/s) | Sunucuyu boğmamak için |
-v | Ayrıntılı çıktı; sorun gidermede | Bağlantı hatalarını gösterir |
Çok sayıda sunucuyla çalışıyorsanız, port ve anahtarı her seferinde elle yazmak yerine ~/.ssh/config dosyasına bir kısayol tanımlamak işinizi ciddi biçimde kolaylaştırır. Örneğin:
Host web1
HostName 203.0.113.10
User kullanici
Port 2222
IdentityFile ~/.ssh/id_ed25519
Bu tanımdan sonra artık uzun komut yerine sadece takma adı kullanırsınız; scp de bu ayarları otomatik okur:
scp yedek.zip web1:/var/www/
İki Uzak Sunucu Arasında Doğrudan Kopyalama#
scp'nin az bilinen ama çok işe yarayan bir yeteneği, iki farklı sunucu arasında dosya taşımaktır — üstelik dosyayı önce kendi bilgisayarınıza indirip sonra öbür sunucuya atmanıza gerek kalmadan. Kaynağın da hedefin de uzak adres olduğu bir komut yazmanız yeterlidir:
scp [email protected]:/var/www/yedek.zip [email protected]:/var/www/
Bu kalıp özellikle bir sunucudan diğerine site taşırken çok kullanışlıdır. Ancak varsayılan davranışta trafiğin sizin makineniz üzerinden aktığını bilmekte fayda var; yani veri, aracı olarak sizin bağlantınızdan geçer. Eğer iki sunucu birbirine sizden çok daha hızlı bağlıysa, -3 bayrağını atlayıp trafiği doğrudan bir sunucudan diğerine akıtacak biçimde ayarlamak yerine, çoğu zaman doğrudan hedef sunucuya SSH ile girip oradan scp veya rsync çalıştırmak daha verimlidir.
Sunucudan sunucuya büyük veri taşımaları, bir hosting sağlayıcısından diğerine geçerken sık karşılaşılan bir iştir. Bu tür kapsamlı taşımalarda tek tek komutlarla uğraşmak yerine site taşıma hizmetimizden yararlanarak süreci uzman ekibe bırakabilir, kesintisiz bir geçiş yapabilirsiniz. Kendiniz yönetmek istiyorsanız da web sitesi taşıma yaklaşımlarını farklı araçlarla karşılaştırmakta fayda var.
scp mi, rsync mi, sftp mi? Doğru Aracı Seçmek#
scp harika bir araçtır, ama her iş için doğru araç değildir. Ne zaman scp'de kalmanız, ne zaman rsync ya da sftp'ye geçmeniz gerektiğini bilmek, hem zamandan hem sinir bozukluğundan kazandırır.
scp basit, tek seferlik kopyalar için idealdir: bir dosya gönder, bir klasör indir, bitir. Öğrenmesi kolaydır, ekstra kurulum istemez ve küçük işlerde en hızlı çözümdür. Fakat scp aktarımı yarıda kesilirse baştan başlar; hangi dosyaların değiştiğini anlamaz, her seferinde her şeyi yeniden kopyalar.
rsync ise tam olarak bu noktada devreye girer. Yalnızca değişen dosyaları (hatta dosyaların değişen parçalarını) aktardığı için ikinci ve sonraki aktarımlar çok daha hızlı olur. Kesilen bir aktarımı kaldığı yerden sürdürebilir, kaynakla hedefi birebir eşitleyebilir (--delete ile fazlalıkları silebilir) ve ilerleme çubuğu gösterebilir. Büyük dizinleri, sık tekrarlanan yedekleri ve artımlı senkronizasyonları rsync ile yapmalısınız:
rsync -avz -e "ssh -p 2222" ./site-dosyalari/ [email protected]:/var/www/html/
Buradaki -a arşiv modu izin ve zaman damgalarını korur, -v ayrıntı verir, -z sıkıştırır, -e ise özel SSH portunu belirtmenizi sağlar. rsync tabanlı düzenli yedek stratejileri kurmak istiyorsanız, yedekleme çözümlerimiz ve konuyla ilgili detaylı rehberlerimiz iyi bir başlangıç noktası olur.
sftp ise farklı bir kullanım biçimidir. scp tek komutla "kopyala ve çık" mantığıyla çalışırken, sftp interaktif bir oturum açar; ls, cd, get, put, mkdir gibi komutlarla uzak dosya sistemini gezerek çalışırsınız. Ne indireceğinizi önceden tam bilmiyor, dizinleri dolaşarak karar veriyorsanız sftp daha rahattır. FileZilla gibi grafik istemcilerin arka planda kullandığı protokol de budur. sftp ile grafik istemciler arasındaki ilişkiyi ve dosya yükleme akışını FTP/SFTP dosya yükleme rehberimizde daha ayrıntılı bulabilirsiniz.
Aşağıdaki tablo üç aracın hangi durumda öne çıktığını özetliyor:
| Kullanım durumu | Önerilen araç |
|---|---|
| Tek dosya/klasör hızlı kopyalama | scp |
| Büyük ve düzenli tekrarlanan aktarım | rsync |
| Yalnızca değişenleri eşitleme | rsync |
| Kesilen aktarımı sürdürme | rsync |
| Uzak dizinde gezinerek çalışma | sftp |
| Grafik arayüz ile yükleme | sftp (FileZilla) |
Kısacası, tek seferlik ve basit işlerde scp; tekrarlı, büyük ve artımlı işlerde rsync; interaktif gezinme gerektiren işlerde sftp doğru tercihtir. İyi bir yönetici üçünü de bilir ve işe göre birini seçer.
Sık Yapılan Hatalar ve Sorun Giderme#
scp'de karşılaşacağınız hataların büyük kısmı aslında SSH kaynaklıdır, çünkü scp yalnızca SSH'in üzerine binen bir taşıyıcıdır. Yine de en sık tökezlenen noktaları bilmek çözümü hızlandırır.
"Permission denied" hatası: Genellikle hedef klasöre yazma yetkinizin olmamasından kaynaklanır. Örneğin /var/www/ gibi kök sahipliğindeki bir dizine standart bir kullanıcı olarak dosya atmaya çalışıyorsanızdır. Çözüm, önce yazma yetkiniz olan bir dizine (örneğin /home/kullanici/) kopyalayıp sunucuda sudo ile taşımak ya da hedef dizinin izinlerini düzeltmektir. Root olarak scp yapmak yerine bu dolaylı yol daha güvenlidir.
"No such file or directory": Çoğunlukla hedef yol yanlış yazılmıştır ya da o dizin henüz yoktur. scp, hedef klasörü kendisi oluşturmaz; önce sunucuda mkdir -p ile klasörü açmanız gerekebilir. Ayrıca uzak adresteki iki noktayı unutmadığınızdan emin olun.
Yanlış port veya bağlantı zaman aşımı: Sunucu 22 dışında bir port kullanıyorsa ve siz -P vermediyseniz, scp varsayılan porta bağlanmaya çalışıp takılır. -vvv bayrağıyla ayrıntılı çıktı alarak bağlantının tam olarak nerede koptuğunu görebilirsiniz.
Büyük dosyalarda sunucuyu boğmak: Çok büyük bir arşivi tam hızda gönderirken sunucunun ağını ve diskini zorlayabilirsiniz. -l bayrağıyla bant genişliğini sınırlayarak (örneğin -l 8000 ile yaklaşık 1 MB/s) canlı bir sunucuyu rahatsız etmeden aktarım yapabilirsiniz. Böyle durumlarda güçlü ve garantili kaynaklara sahip bir VDS ya da sanal sunucu üzerinde çalışmak, aktarımların diğer hizmetleri etkileme riskini azaltır.
Sıkça Sorulan Sorular#
scp ile sftp arasındaki fark nedir?#
İkisi de SSH üzerinden şifreli dosya taşır, ama kullanım biçimleri farklıdır. scp tek komutla "kopyala ve çık" mantığıyla çalışır; kaynağı ve hedefi bir kez yazar, işlem biter. sftp ise interaktif bir oturum açar ve içinde ls, cd, get, put gibi komutlarla uzak dizinlerde gezinerek çalışırsınız. Ne kopyalayacağınızı önceden biliyorsanız scp daha hızlıdır; keşfederek çalışmanız gerekiyorsa sftp daha rahattır.
scp'de port neden büyük P ile belirtiliyor?#
Bu, ssh ve scp arasındaki en can sıkıcı söz dizimi farkıdır. scp'de küçük -p bayrağı dosyaların izinlerini ve zaman damgalarını korumaya ayrılmıştır; bu yüzden port belirtmek için büyük -P kullanmak zorunlu hale gelmiştir. ssh -p 2222 çalışırken scp -p 2222 çalışmaz, doğrusu scp -P 2222 olur. Bu ayrımı unutmak, "bağlanamıyorum" derdinin en yaygın sebebidir.
Büyük veya sık tekrarlanan aktarımlarda neden rsync tercih edilmeli?#
scp her çalıştığında dosyanın tamamını baştan kopyalar ve aktarım kesilirse en baştan başlar. rsync ise yalnızca değişen dosyaları, hatta dosyaların değişen parçalarını aktarır ve kesilen işi kaldığı yerden sürdürebilir. Bu yüzden gecelik yedekler, büyük klasörlerin senkronizasyonu ve tekrarlanan aktarımlar için rsync hem çok daha hızlı hem de çok daha güvenilirdir. İlk kopyayı scp ile, sonraki güncellemeleri rsync ile yapmak yaygın bir kalıptır.
Bir klasörü tüm içeriğiyle nasıl kopyalarım?#
Klasörleri kopyalamak için -r (özyinelemeli) bayrağını eklemeniz gerekir; örneğin scp -r ./proje kullanici@sunucu:/var/www/ komutu proje klasörünü içindeki her şeyle birlikte taşır. Dosya izinlerini ve zaman damgalarını korumak isterseniz buna -p ekleyerek scp -rp biçiminde kullanabilirsiniz. Kaynak klasör adının sonuna eğik çizgi koyup koymamanın sonucu değiştirebileceğini de unutmayın.
Anahtar tabanlı SSH kullanırken scp parola sormaya devam ediyor, neden?#
Bunun en sık nedeni scp'nin doğru anahtar dosyasını bulamamasıdır. Anahtarınız standart konumda (~/.ssh/id_rsa veya ~/.ssh/id_ed25519) değilse, -i ~/.ssh/anahtar_dosyaniz bayrağıyla açıkça belirtmeniz gerekir. Ayrıca özel anahtar dosyasının izinlerinin 600 olması, açık anahtarın (.pub) da sunucudaki ~/.ssh/authorized_keys dosyasına eklenmiş olması şarttır. İzinler fazla açıksa SSH anahtarı güvenlik gereği yok sayar ve parolaya döner.
scp aktarım hızını sunucuyu yormadan nasıl sınırlarım?#
-l bayrağıyla bant genişliğini kilobit/saniye cinsinden sınırlayabilirsiniz. Örneğin scp -l 8000 buyuk.zip kullanici@sunucu:/tmp/ komutu aktarımı yaklaşık 1 MB/s ile sınırlar ve canlı bir sunucunun ağını tıkamadan dosya taşımanızı sağlar. Uzak hatlarda toplam süreyi kısaltmak için ayrıca -C bayrağıyla aktarım sırasında sıkıştırma da açabilirsiniz; metin ve yapılandırma dosyalarında bu ciddi bir hız kazancı sağlar.
Kapanış#
scp, sunucu yönetiminin en temel ve en güvenilir araçlarından biridir. Tek bir komutla, ek bir yazılım kurmadan, tüm trafiği şifreleyerek dosya taşımanızı sağlar; SSH ile bağlanabildiğiniz her yere scp ile dosya da kopyalayabilirsiniz. Temel kalıbı bir kez oturttuktan sonra, -r ile klasörleri, -P ile farklı portları, -i ile özel anahtarları rahatça yönetir; işin ölçeği büyüdüğünde de gözünüzü kapatıp rsync'e geçersiniz. Doğru aracı doğru işe eşlemek, iyi bir yöneticiyi tanımlayan alışkanlıklardan biridir.
Bu komutları güvenle deneyebileceğiniz, tam SSH erişimli ve garantili kaynaklara sahip bir altyapı arıyorsanız sanal sunucu ve VDS paketlerimiz kök erişimiyle geliyor; paylaşımlı ama SSH/SFTP destekli bir başlangıç için web hosting çözümlerimize göz atabilirsiniz. Sunucunuzun düzenli yedeklenmesini ve güvenli erişimini bize bırakmak isterseniz sunucu yönetimi ve yedekleme hizmetlerimiz tam da bu iş için tasarlandı.