RDP Monster

scp Komutu Linux: VPS'e Dosya Kopyalama (rsync, sftp)

scp Komutu Linux: VPS'e Dosya Kopyalama (rsync, sftp)

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örevEn iyi araçNeden
Tek dosya, tek seferlikscpEn kısa komut, kurulum gerekmez
Bir dizin, ilk kopyascp -r veya rsync -aSonuç eşdeğer
Tekrarlanan dağıtımlar veya yedeklerrsyncYalnızca değişen veri gönderilir
Silmelerle birlikte aynalamarsync --deletescp dosya silemez
Büyük bir dosyayı sürdürmersync -P veya sftp regetscp sıfırdan başlar
Göz atıp dosya seçmesftp veya WinSCPEtkileşimli listeleme
Binlerce küçük dosyarsync veya ssh üzerinden tarscp'de dosya başına ek yük baskın gelir
WSL'siz WindowsPowerShell scp veya WinSCPYerel 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ında top komutunda sshd %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ı tmux veya screen içinde çalıştırın ya da rsync -P kullanıp yeniden çalıştırın.
  • Doğrulayın ve hızı sınırlayın. İki tarafta sha256sum file aynı sonucu vermelidir; scp -l veya rsync --bwlimit bir 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 kaldırılmadı, ancak OpenSSH 9.0'dan bu yana aktarımı SFTP protokolü üzerinden yapıyor; çünkü özgün scp protokolü eskimiş sayıldı.
OpenSSH geliştiricileri özgün scp/rcp protokolünü eskimiş ve güvenli hale getirmesi zor olarak nitelendirdi; OpenSSH 9.0'dan (2022) itibaren 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?

Evet, sunucu hâlâ parola ile kimlik doğrulamaya izin veriyorsa; scp tıpkı ssh gibi parola sorar.
scp, o sunucu için ssh hangi kimlik doğrulamayı kullanacaksa onu kullanır. sshd üzerinde 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ı?

Evet: scp de rsync de hedefteki dosyaları sessizce değiştirir, bu yüzden tereddüt ettiğinizde rsync --dry-run ile önizleyin.
scp, hedefte aynı adı taşıyan her dosyanın üzerine hiçbir uyarı vermeden ve atlama seçeneği sunmadan yazar. rsync de üzerine yazar, ancak yalnızca kaynak farklıysa ve size denetim verir: -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?

Ya bir sunucuda diğerini hedefleyen rsync veya scp çalıştırın ya da kopyayı kendi makineniz üzerinden yönlendirmek için scp -3 kullanın.
En hızlı yol sunucudan sunucuyadır: kaynak VPS'e ssh ile bağlanıp 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.

Bayilik programımıza kaydolun

Bilgileriniz

Ad Soyad(Zorunlu)
E-posta adresinizi girin, şu adreste bir hesabınız olmalı: dashboard.rdp.monster !

Şirketiniz

Varsa web sitenizin adresini girin
Hizmetleri müşterilerinize nasıl satacağınızı kısaca anlatın; örneğin forumlarda insanlarla konuşarak.

Canavarlar bile çerezlere bayılır!

Tarama deneyiminizi geliştirmek, kişiselleştirilmiş reklam veya içerik sunmak ve trafiğimizi analiz etmek için çerez kullanıyoruz. «Kabul Et»'e tıklayarak çerez kullanımımızı onaylarsınız.