scp Komutu Linux: VPS'e Dosya Kopyalama (rsync, sftp)
- 14 Kasım 2026
- 09:00
- Yazar: Adrien Roche
- Eğitimler

Linux'ta scp komutu: söz dizimi ve temel aktarımlar
scp (secure copy), dosyaları makineler arasında SSH üzerinden kopyalar; dolayısıyla ssh için geçerli olan kullanıcı, anahtar ve port scp için de geçerlidir. Kalıp her zaman scp [options] SOURCE DESTINATION şeklindedir ve hangi taraf uzaksa user@host:path olarak yazılır. Çalışan bir SSH oturumu gerekir; 22 numaralı port henüz yanıt vermiyorsa önce Ubuntu'da SSH'ı etkinleştirin ve sıkılaştırın.
1. Yerelden uzağa (yükleme)
scp backup.tar.gz user@SERVER_IP:/home/user/
scp backup.tar.gz user@SERVER_IP:~/backups/renamed.tar.gz
scp *.conf user@SERVER_IP:~/nginx-conf/
Eğik çizgiyle biten bir yol, dosyayı o dizinin içine özgün adıyla bırakır; tam bir yol ise varışta dosyayı yeniden adlandırır. Hedef bir dizin olduğu sürece birden fazla yerel dosya hedeften önce sıralanabilir ve bu dizinin önceden var olması gerekir: scp üst dizinleri oluşturmaz.
2. Uzaktan yerele (indirme)
scp user@SERVER_IP:/var/log/nginx/access.log .
scp user@SERVER_IP:'/var/log/nginx/*.log' ./logs/
Nokta "buraya, aynı adla" anlamına gelir. Yerel kabuğunuzun genişletmemesi için uzak joker karakterleri tırnak içine alın. Uzaktan uzağa da çalışır: scp -3 user@HOST_A:/data/dump.sql user@HOST_B:/data/ kopyayı kendi makineniz üzerinden yönlendirir, böylece her iki sunucunun kimlik bilgilerine yalnızca sizin makinenizin sahip olması yeterlidir.
3. -r ile dizinler
scp -r ./site user@SERVER_IP:/var/www/
scp -r user@SERVER_IP:/etc/nginx ./nginx-backup
-r bir dizini ve altındaki her şeyi kopyalar. İlk komut sunucuda /var/www/site dizinini oluşturur; ikincisi ise nginx ağacının tamamını yerel bir klasöre indirir. Sembolik bağlantılar normal dosya olarak kopyalanır; rsync'in tam sistem ağaçları için daha iyi bir araç olmasının nedenlerinden biri de budur.
Gerçekten kullanacağınız scp seçenekleri: -P, -i, -C, -p
scp -P 2222 file.txt user@SERVER_IP:/home/user/ # non-default SSH port
scp -i ~/.ssh/id_ed25519 file.txt user@SERVER_IP:~/ # use a specific key
scp -C dump.sql user@SERVER_IP:~/ # compress in transit
scp -rp ./site user@SERVER_IP:/var/www/ # keep times and modes
Port bayrağı büyük harf -P'dir. Küçük harf -p "değişiklik zamanlarını, erişim zamanlarını ve izin bitlerini koru" anlamına gelir ve ssh komutunun kendisi port için -p kullandığından, bu ikisini karıştırmak en yaygın scp hatasıdır. Her çağrıda portu ve anahtarı tekrarlamamak için sunucuyu bir kez ~/.ssh/config içinde tanımlayın; scp, rsync ve sftp bu dosyayı okur:
Host vps
HostName SERVER_IP
User user
Port 2222
IdentityFile ~/.ssh/id_ed25519
İki bayrak daha: -l 8000 aktarımı 8.000 Kbit/sn (yaklaşık 1 MB/sn) ile sınırlar, -v ise kimlik doğrulama başarısız olduğunda hangi anahtarların sunulduğunu gösterir. OpenSSH 9.0'dan bu yana scp arka planda SFTP protokolünü kullanır; söz dizimi değişmedi, ancak uzak bir yola gömülen kabuk hileleri (örneğin komut ikamesi) artık sunucuda çalışmaz ve -O, yeni modu reddeden çok eski bir sunucu için eski protokolü geri getirir.
rsync: aynalar, kaldığı yerden devam eden aktarımlar ve hariç tutmalar
rsync yalnızca değişeni kopyalar. İlk çalıştırma scp -r gibi davranır; sonraki çalıştırmalar iki tarafı karşılaştırır ve yalnızca farkları gönderir: yeni dosyaları ve değişen dosyalarda yalnızca değişen blokları. Bu da onu dağıtımlar, yedeklemeler ve büyük her şey için doğru araç yapar. İki tarafta da kurulu olması gerekir (sudo apt install rsync); bazı minimal imajlar ve konteynerler onsuz gelir.
1. Günlük komut
rsync -avz --progress ./site/ user@SERVER_IP:/var/www/site/
rsync -avz --progress user@SERVER_IP:/var/www/site/ ./site-backup/
-a (archive) şuna açılır: -rlptgoD, yani özyinelemeli tarama, sembolik bağlantıları sembolik bağlantı olarak koruma, izinleri, zamanları, grubu, sahibi ve aygıt dosyalarını koruma; sahiplik yalnızca alıcı taraf root olarak çalıştığında korunur. -v dosyaları listeler, -z sıkıştırır, --progress her dosyayı gösterir.
Sondaki eğik çizgi önemlidir. ./site/ "site dizininin içeriği" demektir; ./site ise "dizinin kendisi" demektir ve bu da /var/www/site/site oluşturur. Emin değilseniz -n (--dry-run) ekleyin ve hiçbir şey yazılmadan önce dosya listesini okuyun.
2. --delete ile aynalama
rsync -avzn --delete ./site/ user@SERVER_IP:/var/www/site/ # dry run first
rsync -avz --delete ./site/ user@SERVER_IP:/var/www/site/
--delete, kaynakta artık bulunmayan hedef dosyaları siler. Gerçek bir ayna için gereklidir; aynı zamanda sondaki yanlış bir eğik çizgiyi silinmiş bir dizine dönüştüren şey de budur, bu yüzden her yeni --delete komutunu bir kez prova edin.
3. Dosyaları hariç tutma
rsync -avz --exclude='node_modules/' --exclude='.git/' --exclude='*.log' ./app/ user@SERVER_IP:/srv/app/
rsync -avz --exclude-from='.rsyncignore' ./app/ user@SERVER_IP:/srv/app/
Desenler aktarım köküne görelidir; baştaki eğik çizgi onları sabitler, yani /config.php yalnızca en üst düzeydeki dosyayı hariç tutar. --exclude-from her satırda bir desen okur.
4. Yarım kalan aktarımı sürdürme, özel port ve anahtar
rsync -avP -e 'ssh -p 2222 -i ~/.ssh/id_ed25519' ./disk.img user@SERVER_IP:/backup/
-P, --partial --progress kısaltmasıdır: bağlantı koparsa yarım dosya saklanır ve aynı komutu yeniden çalıştırmak kaldığı yerden devam eder. SSH seçenekleri -e üzerinden geçer ve burada port küçük harf -p'dir, çünkü bu rsync'in değil ssh'ın bayrağıdır; ~/.ssh/config içindeki bir Host kaydı -e dizesinin tamamını gereksiz kılar.
sftp: aynı SSH oturumu üzerinden etkileşimli aktarımlar
sftp, SSH üzerinde FTP tarzı bir komut istemi sunar; kopyalamadan önce göz atmak için pratiktir.
sftp -P 2222 -i ~/.ssh/id_ed25519 user@SERVER_IP
sftp> ls -l /var/www
sftp> lcd ~/Downloads
sftp> get /var/log/syslog
sftp> put -r ./site /var/www/
sftp> reget backup.iso
sftp> bye
l ile başlayan komutlar kendi makinenizde çalışır (lcd, lls, lpwd); geri kalanı sunucuda çalışır. put -r ve get -r dizinleri kopyalar, reget ve reput yarım kalan bir dosyayı sürdürür ve !command oturumdan çıkmadan yerel bir kabuk komutu çalıştırır. sftp -b commands.txt user@SERVER_IP, cron işleri için bu komutlardan oluşan bir dosyayı sırayla yürütür.
Windows'tan dosya kopyalama: PowerShell scp ve WinSCP
Windows 10 (1809 ve sonrası) ile Windows 11, OpenSSH istemcisiyle gelir; bu nedenle scp, sftp ve ssh PowerShell'de Linux'takiyle aynı bayraklarla kullanılabilir:
cd C:\Users\you\Projects
scp -P 2222 -i $HOME\.ssh\id_ed25519 .\site.zip user@SERVER_IP:/home/user/
scp -r user@SERVER_IP:/var/www/site $HOME\Downloads
Anahtarlar known_hosts ile birlikte C:\Users\you\.ssh\ içinde bulunur ve ssh-keygen -R SERVER_IP orada da çalışır. Bir cd sonrası göreli yollar kullanmak, sürücü harfi ile ana bilgisayar adı arasındaki karışıklığı önler. rsync dahil değildir; onu edinmenin en temiz yolu WSL'dir: wsl rsync -avz /mnt/c/Users/you/site/ user@SERVER_IP:/var/www/site/.
Arayüz için olağan tercih WinSCP'dir: SFTP ve SCP konuşur, iki panelli sürükle-bırak görünümü sunar ve Synchronize komutu kabaca rsync --delete ile aynı işi yapar. Anahtarları PuTTY'nin .ppk biçiminde bekler ve bir OpenSSH anahtarı seçtiğinizde onu dönüştürmeyi önerir. Tekrar tekrar dağıtılan her şey için bir betiğe yazılmış tek satırlık scp veya rsync komutunu incelemek ve otomatikleştirmek daha kolaydır.
scp, rsync ve sftp karşılaştırması: hangisini kullanmalı
| Görev | En iyi araç | Neden |
|---|---|---|
| Tek dosya, tek seferlik | scp | En kısa komut, kurulum gerekmez |
| Bir dizin, ilk kopya | scp -r veya rsync -a | Sonuç eşdeğer |
| Tekrarlanan dağıtımlar veya yedekler | rsync | Yalnızca değişen veri gönderilir |
| Silmelerle birlikte aynalama | rsync --delete | scp dosya silemez |
| Büyük bir dosyayı sürdürme | rsync -P veya sftp reget | scp sıfırdan başlar |
| Göz atıp dosya seçme | sftp veya WinSCP | Etkileşimli listeleme |
| Binlerce küçük dosya | rsync veya ssh üzerinden tar | scp'de dosya başına ek yük baskın gelir |
| WSL'siz Windows | PowerShell scp veya WinSCP | Yerel rsync yok |
Pratik kural: komutu ezbere yazabiliyorsanız scp, iki kez çalıştıracaksanız rsync.
Gerçekten fark yaratan hız ipuçları
- Sıkıştırma bedava değildir.
-C(scp) ve-z(rsync) metni, SQL dökümlerini ve günlükleri küçültür, ancak arşivlerde, görüntülerde ve videolarda CPU'yu boşa harcar. Aktarım sırasındatopkomutundasshd%100'de takılı görünüyorsa bayrağı kaldırın. - Çok sayıda küçük dosyayı paketleyin. Bir kaynak ağacını gönderirken dosya başına gidiş-dönüşler baskın gelir; tek bir akış daha hızlıdır:
tar czf - ./site | ssh user@SERVER_IP 'tar xzf - -C /var/www/'. - Hızlı bağlantılarda başka bir şifreleme algoritması deneyin. Darboğaz ssh sürecinin kendisi olduğunda
scp -c aes128-gcm@openssh.com, hemen hemen her modern CPU'da yerleşik AES komutlarını kullanır. - Uzun aktarımları koruyun. Kopan bir oturum kopyalamayı öldürmesin diye onları
tmuxveyascreeniçinde çalıştırın ya darsync -Pkullanıp yeniden çalıştırın. - Doğrulayın ve hızı sınırlayın. İki tarafta
sha256sum fileaynı sonucu vermelidir;scp -lveyarsync --bwlimitbir yedeklemenin uygulamayı aç bırakmasını önler.
İzinler, sahiplik ve sık karşılaşılan hatalar
Hedef yolda Permission denied
scp: /var/www//html/: Permission denied hatası, oturum açmanın başarılı olduğunu ama o kullanıcının oraya yazamadığını gösterir. Dosyaları ev dizininize kopyalayıp sudo mv ile taşıyın, hedefin sahipliğini kullanıcıya verin (sudo chown -R user:user /var/www/site) veya rsync ile --rsync-path="sudo rsync" ekleyin; bu, oturum açan kullanıcının parolasız sudo yetkisi olduğunda çalışır (kurulumu Linux'ta sudo yetkili kullanıcı oluşturma yazısında anlatılıyor). root olarak yüklemek hatayı önler ama bir web sunucusunun yazamayacağı root sahipli dosyalar bırakır: sonrasında sudo chown -R www-data:www-data /var/www/site çalıştırın.
Permission denied (publickey)
Sunucu kimlik doğrulamayı reddetti. Kullanıcı adını kontrol edin, -i ile anahtarı zorlayın, -v ekleyin; VPS üzerinde sudo journalctl -u ssh -n 30 nedenini söyler.
Remote host identification has changed
Yeniden kurulum veya IP değişikliği sonrasında beklenen bir durumdur: ana bilgisayar anahtarı artık ~/.ssh/known_hosts ile eşleşmiyordur. Sunucuyu gerçekten yeniden kurduysanız ssh-keygen -R SERVER_IP çalıştırıp yeniden bağlanın. Kurmadıysanız, herhangi bir yere parola yazmadan önce nedenini öğrenin.
No such file or directory
scp üst dizinleri oluşturmaz: önce ssh user@SERVER_IP 'mkdir -p /var/www/site' çalıştırın. rsync yalnızca son dizin bileşenini oluşturur (--mkpath, rsync 3.2.3+, üst dizinleri de oluşturur).
rsync: command not found veya protocol data stream (code 12)
rsync bir tarafta eksiktir; orada sudo apt install rsync çalıştırıp yeniden deneyin.
Çalışmayı reddeden yüklenmiş betikler
Windows'tan gelen dosyaların çalıştırma biti yoktur ve çoğu zaman CRLF satır sonları taşır; bu da bad interpreter: No such file or directory hatasına yol açar. İkisini de chmod +x deploy.sh ve sed -i 's/\r$//' deploy.sh ile düzeltin; shebang tarafı .sh dosyası nedir ve bash onu nasıl çalıştırır yazısında ele alınıyor. Son bir klasik: ana bilgisayar adından sonra iki nokta üst üste konmamış scp file.txt user@SERVER_IP komutu, sessizce user@SERVER_IP adında bir dosya oluşturan yerel bir kopyalamadır.
Bütün bunlar, SSH ile root veya sudo kullanıcısı olarak eriştiğiniz ve sınırın bir kota değil aktarımın kendisi olduğu bir sunucuyu varsayar. rdp.monster'dan bir Linux VPS tam olarak böyle bir makinedir: tam root erişimi, ayrılmış CPU ve RAM, sınırsız (adil kullanım) bant genişliği, KYC yok, kripto kabul ediliyor, ayda $8.99'dan başlayan fiyatlar ve sunucu, ödeme onaylandıktan yaklaşık 10 saniye sonra çevrimiçi oluyor; yani üzerinde çalıştıracağınız ilk şey birinci adımdaki scp komutu olabilir.
Sık sorulan sorular
scp komutu kullanımdan kaldırıldı mı?
scp komutu dosyaları bunun yerine SFTP üzerinden taşıyor. Komut, bayrakları ve user@host:path söz dizimi değişmedi, dolayısıyla mevcut betikler çalışmaya devam ediyor; yalnızca uzak yollar içindeki kabuk genişletmesi farklı davranıyor ve -O, buna ihtiyaç duyan sunucular için eski protokolü geri getiriyor. Yeni otomasyonlarda rsync veya sftp daha yetenekli seçeneklerdir, ancak tek seferlik kopyalar için scp gayet uygundur.scp'yi SSH anahtarı yerine parolayla kullanabilir miyim?
PasswordAuthentication yes tanımlıysa scp parolayı sorar ve kopyalama devam eder; parolayı komut satırında geçirecek bir bayrak yoktur ve bunu yapan sshpass gibi araçlar parolayı kabuk geçmişinizde bırakır. Sıkılaştırılmış sunucularda parolayla giriş genellikle kapalıdır; bu durumda ssh-copy-id ile bir anahtar kurana kadar scp Permission denied (publickey) hatasıyla başarısız olur. Betiklerin gözetimsiz çalışmasını sağlayan da anahtarlardır.scp mevcut dosyaları sormadan üzerine yazar mı?
-n (--dry-run) nelerin değişeceğini yazdırır, --ignore-existing zaten var olan dosyalara dokunmaz, --update hedefte daha yeni olan dosyaları atlar ve --backup --backup-dir=DIR değiştirilen sürümleri saklar. Yeri doldurulamaz her şey için, temiz bir dizine kopyalayıp sonrasında yerine geçirin.İki VPS sunucusu arasında dosyaları doğrudan nasıl kopyalarım?
rsync -avz /data/ user@OTHER_IP:/data/ (veya scp -r) çalıştırın; böylece veri hiçbir zaman ev bağlantınızdan geçmez. Bunun için ilk sunucunun, ikincisinin kabul ettiği bir anahtarı barındırması gerekir. Sunuculara anahtar koymak istemiyorsanız scp -3 user@HOST_A:/path user@HOST_B:/path yalnızca yerel kimlik bilgilerinizi kullanarak kopyayı makineniz üzerinden yapar; bunun bedeli her şeyi bir kez indirip bir kez yüklemektir.Adrien Roche, Altyapı ve Hosting Editörü
Windows Server ve Linux filolarını 10+ yıldır işleten sistem mühendisi. Adrien, rdp.monster altyapı dokümantasyonunu yönetir ve RDP, VPS hosting, sunucu yönetimi, ağ ve gizlilik araçları üzerine rehberlerimizi yazar.
İlgili yazılar




