scp komutu: Kullanımı ve seçenekleri, klasör kopyalama ve port belirtme
scp, SSH ile bağlandığınız bir sunucuyla dosya alışverişi yaparken kullanılan kopyalama aracıdır. scp komutuyla dosya gönderirken cp komutunda olduğu gibi önce kaynağı, sonra hedefi yazarsınız. AlmaLinux 9 sunucusundan Debian 12 sunucusuna dosya ve klasörleri gönderip geri aldığımızda aktarım SFTP protokolüyle gerçekleşti ve 20MB'lık bir dosya 1 saniyeden kısa sürede ulaştı.
Aşağıdaki tüm çıktılar, gönderen taraftaki root hesabında OpenSSH 9.9'un scp komutuyla alınan sonucun aynısıdır. Yalnızca sunucu adresleri ve hesap adları örnek değerlerle değiştirildi.
1️⃣ scp kullanımı ve uzak yollar
Uzak sunucudaki yolun önüne [hesap@sunucu adresi:] eklenir. İki nokta üst üste olmayan yol, komutu çalıştırdığınız sunucudaki yol olarak algılanır; bu nedenle iki noktanın bulunduğu taraf, gönderme mi alma mı olduğunu belirler.
Geçerli klasördeki report.txt dosyasını uzak sunucunun ana dizini altındaki scp-test klasörüne gönderir.
scp report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.1KB/s 00:00Aktarım bitince dosya adı, ilerleme, boyut, hız ve geçen süre tek satırda görünür. Bu ilerleme göstergesi yalnızca terminalde çalıştırıldığında çıkar. Bu yüzden çıktıyı bir dosyaya yönlendirirseniz dosyada hiçbir şey kalmaz.
Dosya alırken uzak yolu öne, kaydedilecek yerel yolu arkaya yazarsınız.
scp user@203.0.113.10:~/scp-test/report.txt ./downloads/report.txt 100% 14 2.7KB/s 00:00Hedef yol klasör yerine dosya adıyla biterse dosya o adla kaydedilir. Aşağıdaki komutla gönderdikten sonra alıcı taraftaki klasörde report.txt, report-1028.txt adıyla duruyordu.
scp report.txt user@203.0.113.10:~/scp-test/report-1028.txtreport.txt 100% 14 4.6KB/s 00:00🔲 scp komutu simülatörü
Aşağıdaki simülatörde gönderme, alma ve klasör kopyalama komutlarını kendiniz yazıp seçeneklere göre çıktıyı görebilirsiniz.
2️⃣ scp komutu seçenekleri
Seçenekler scp'nin hemen ardına, kaynağın önüne yazılır. Portu belirten -P büyük harftir, küçük -p ise zamanları ve izinleri korur; bu yüzden büyük küçük harfi karıştırırsanız başka bir işlem çalışır.
-l, aktarım hızının üst sınırını Kbit/s biriminde belirler. Seçeneksiz gönderilen 20MB'lık dosyanın aktarımı 1 saniyeden kısa sürede bitti.
scp backup.tar.gz user@203.0.113.10:~/scp-test/backup.tar.gz 100% 20MB 53.6MB/s 00:00-l 8000, saniyede yaklaşık 1,000KB'a karşılık gelir. Aynı dosyayı -l 8000 ile gönderdiğimizde ilerleme göstergesindeki hız 996.5KB/s oldu ve aktarım 20 saniye sürdü.
scp -l 8000 backup.tar.gz user@203.0.113.10:~/scp-test/backup-l.tar.gzbackup.tar.gz 100% 20MB 996.5KB/s 00:20-C, SSH bağlantısındaki verileri gzip ile aynı yöntemle sıkıştırır. Aynı cümlelerin tekrarlandığı 19MB'lık günlük dosyasını üçer kez gönderdiğimizde, bu iki sunucu arasında -C ekli gönderim biraz daha yavaş kaldı.
| Komut | Dosya | Çalışma süresi | İlerleme göstergesi hızı |
|---|---|---|---|
| scp backup.tar.gz | 20MB | 0,68 sn | 53.6MB/s |
| scp -l 8000 backup.tar.gz | 20MB | 20.82 sn | 996.5KB/s |
| scp access.log (3 kez) | 19MB | 0.79~0.89 sn | — |
| scp -C access.log (3 kez) | 19MB | 0.84~0.97 sn | — |
Çalışma süresi, komutun başlatılıp bağlanması ve aktarımın bitmesine kadar geçen süredir. ssh kılavuzu da sıkıştırmanın yavaş hatlarda işe yaradığını, hızlı ağlarda ise aktarımı yavaşlattığını açıklar.
-v, bağlantıdan aktarıma kadarki süreci debug1 satırları olarak yazdırır; bu yüzden bağlantı kurulamadığında veya kimlik doğrulamada takıldığında nedeni bulmak için kullanılır. Çıktı uzun olduğundan grep ile yalnızca kimlik doğrulama ve aktarım satırlarını seçtik.
scp -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending subsystem: sftp
Transferred: sent 2536, received 3248 bytes, in 0.1 seconds[Sending subsystem: sftp] satırı, scp'nin dosyayı SFTP protokolüyle gönderdiği anlamına gelir. OpenSSH 9.0'dan itibaren scp varsayılan olarak SFTP kullanır. -O eklenirse eski SCP protokolüyle aktarılır ve aynı yerde [Sending command: scp -v -t] görünür.
scp -O -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending command: scp -v -t ~/scp-test/
Sending file modes: C0600 14 report.txt
Transferred: sent 2328, received 3036 bytes, in 0.1 seconds📌 Başlıca seçenekler: bu yazıda çalıştırılan sonuçlar
| Seçenek | Görev | Bu yazıdaki sonuç | |
|---|---|---|---|
| -P | SSH bağlantı portunu belirtir | Port 22'de report.txt aktarımı tamamlandı, açık olmayan port 2222 [Connection timed out] ile bitti | |
| -i | Açık anahtar kimlik doğrulamasında kullanılacak özel anahtar dosyasını belirtir | ~/.ssh/id_ed25519 belirtilerek report.txt aktarımı tamamlandı | |
| -r | Klasördeki dosyaları ve alt klasörleri kopyalar | Alıcı tarafta css ve images klasörleri özgün yapıyla kalır; seçenek çıkarılırsa [not a regular file] hatasıyla aktarılmaz | |
| -p | Kaynağın değiştirilme ve erişim zamanlarını, izinlerini korur | Değiştirilme zamanı korunur; bu yazıdaki alıcı tarafta 600 izni yalnızca -O -p ile gönderilen dosyada korundu | |
| -C | SSH bağlantısındaki verileri sıkıştırır | Bu yazıdaki iki sunucu arasında 19MB'lık günlükte seçenekli gönderim biraz daha yavaştı | |
| -l | Aktarım hızının üst sınırını Kbit/s biriminde belirler | -l 8000 ile 20MB, 996.5KB/s, 20.82 saniye | |
| -v | Bağlantıdan aktarıma kadarki süreci debug1 satırları olarak yazdırır | [Sending subsystem: sftp] satırıyla SFTP aktarımı doğrulandı | |
| -3 | İki uzak sunucu arasındaki veriyi komutu çalıştıran sunucu üzerinden aktarır (OpenSSH 8.7'den itibaren varsayılan yöntem) | Aynı sunucudaki iki klasör kaynak ve hedef yapılarak report.txt aktarımı tamamlandı | |
| -O | Eski SCP protokolüyle aktarır | -v çıktısında [Sending command: scp -v -t] görünür; boşluklu yollar için ek ters eğik çizgi gerekir | |
| -o | ssh_config biçimindeki seçeneği ssh'a iletir | ConnectTimeout=10 ile bekleme süresi 10 saniyeye ayarlanıp [Connection timed out] doğrulandı |
📎 Diğer seçenekler: resmî kılavuza göre
| Seçenek | Görev | |
|---|---|---|
| -q | İlerleme göstergesini ve ssh uyarıları ile tanı iletilerini kapatır | |
| -J | Önce bir atlama sunucusuna bağlanır, oradan son hedefe TCP yönlendirmesi kurar (ProxyJump ayarının kısa yazımı, birden çok atlama virgülle ayrılır) | |
| -F | ssh'ın kullanıcıya özel yapılandırma dosyası olarak başka bir dosya belirtir (ssh'a doğrudan iletilir) | |
| -4 | Yalnızca IPv4 adreslerini kullanmaya zorlar | |
| -6 | Yalnızca IPv6 adreslerini kullanmaya zorlar |
3️⃣ scp ile klasör kopyalama ve zamanları koruma
Klasörü seçeneksiz belirtirseniz scp normal dosya olmadığını bildiren bir hata yazdırır ve aktarımı yapmaz.
scp site-files user@203.0.113.10:~/scp-test/scp: local "site-files" is not a regular file
scp: failed to upload file site-files to ~/scp-test/-r eklenirse klasördeki dosyalar ve alt klasörler kopyalanır.
scp -r site-files user@203.0.113.10:~/scp-test/logo.png 100% 48KB 4.7MB/s 00:00
style.css 100% 15 5.0KB/s 00:00
index.html 100% 15 5.2KB/s 00:00Çıktıda yalnızca dosya adları görünür. Alıcı taraftaki find çıktısında site-files altında css ve images klasörleri özgün yapıyla duruyordu.
ssh user@203.0.113.10 'cd ~/scp-test && find site-files'site-files
site-files/images
site-files/images/logo.png
site-files/index.html
site-files/css
site-files/css/style.css-r, klasördeki sembolik bağlantıları izleyip özgün dosyaları kopyalar; bu yüzden bağlantıların bağlantı olarak taşınması gereken klasörler için rsync -a daha uygundur.
-p, kaynağın değiştirilme ve erişim zamanlarını, izinlerini korur. Özgün report.txt dosyasının değiştirilme zamanını 1 Ekim 2026 00:00 (UTC), iznini 600 yaptıktan sonra gönderdik. Alıcı sunucunun saat dilimi UTC olduğundan gönderen taraftaki ls de TZ=UTC ile yazdırıldı.
TZ=UTC ls -l report.txt-rw------- 1 root root 14 Oct 1 00:00 report.txtscp -p report.txt user@203.0.113.10:~/scp-test/report-p.txtreport.txt 100% 14 4.7KB/s 00:00scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txtreport.txt 100% 14 4.2KB/s 00:00ssh user@203.0.113.10 'ls -l ~/scp-test/report.txt ~/scp-test/report-p.txt ~/scp-test/report-Op.txt'-rw------- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-Op.txt
-rw-rw-r-- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-p.txt
-rw-rw-r-- 1 user user 14 Oct 28 06:17 /home/user/scp-test/report.txt-p ile gönderilen report-p.txt ve -O -p ile gönderilen report-Op.txt özgün zamanı korudu, seçeneksiz gönderilen report.txt ise gönderim zamanıyla kaydedildi. Alıcı sunucuda SFTP ile gönderilen dosyaların izni -p eklense de 664 olarak kaydedildi, yalnızca eski SCP protokolüyle (-O) gönderilen dosyada 600 korundu.
Bu nedenle izinlerinin de kaynakla aynı olması gereken dosyalarda, gönderdikten sonra alıcı tarafta ls -l ile izinleri kontrol edersiniz.
4️⃣ scp ile port ve anahtar dosyası belirtme
Varsayılan port 22 ve varsayılan anahtarla bağlanılamayan sunucularda, göndermeden önce portu ve anahtarı kendiniz belirtirsiniz. -P SSH bağlantı portunu, -i açık anahtar kimlik doğrulamasında kullanılacak özel anahtar dosyasını belirtir.
Aşağıda port 22 ve anahtar dosyasının doğrudan belirtildiği bir örnek var. Portu değiştirilmiş bir sunucuda 22 yerine o numarayı yazarsınız.
scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.3KB/s 00:00-i olmadan çalıştırıldığında ssh gibi ~/.ssh altındaki varsayılan adlı anahtarları (id_rsa, id_ecdsa, id_ed25519 vb.) sırayla kullanır.
Aynı sunucuya sık gönderiyorsanız ~/.ssh/config dosyasına bir takma ad yazın, scp'de yalnızca takma adı girin.
Host myserver
HostName 203.0.113.10
User user
Port 22
IdentityFile ~/.ssh/id_ed25519Host satırındaki ad takma ad olur, altındaki dört satır sunucu adresi, hesap, port ve anahtar dosyasının yerini alır. Yalnızca takma ad yazılan komut da adres ve anahtarın tamamı yazıldığındaki aynı tek satırlık sonuçla bitti.
scp report.txt myserver:~/scp-test/report.txt 100% 14 4.2KB/s 00:00-P, -i ve takma adlar ssh bağlantı ayarlarını olduğu gibi kullandığından, anahtar oluşturup sunucuya kaydetme süreci de SSH komutu ile bağlanırken izlenen süreçle aynıdır.
5️⃣ scp ile sunucular arası kopyalama
Kaynak ve hedefin ikisi de uzak sunucu olsa bile tek satır scp ile kopyalayabilirsiniz. OpenSSH 8.7'den itibaren veriler komutu çalıştıran sunucu üzerinden aktarılır ve bu yöntem -3'tür. Resmî sürüm notları, varsayılan yöntemi değiştirme nedeni olarak kaynak sunucuda hedef sunucunun kimlik bilgilerini tutmanın gerekmemesini gösterir.
Aşağıdaki ölçüm, aynı sunucudaki iki klasör kaynak ve hedef yapılarak alındı. Hedef sunucu farklıysa yalnızca sondaki hesabı ve adresi değiştirin.
scp -3 user@203.0.113.10:~/scp-test/report.txt user@203.0.113.10:~/scp-test/copy3/report.txt 100% 14 2.5KB/s 00:00İki şube arasındaki evrakı merkezin alıp yeniden göndermesi gibidir.
Kaynak sunucunun hedef sunucuya doğrudan gönderdiği eski yöntem -R ile belirtilir. Bu yöntemde kaynak sunucu hedef sunucuya parolasız bağlanabilmelidir. OpenSSH 10.6'dan itibaren -R kullanılınca kullanımdan kaldırılacağına dair uyarı çıkar, sonraki sürümlerde ise bu seçenek yok sayılıp -3 yöntemiyle kopyalanacaktır.
6️⃣ scp ve rsync karşılaştırması
Birkaç dosyayı bir kez göndermek için scp yeterlidir; aynı klasörü tekrar tekrar eşitlemek veya kesilen aktarımı sürdürmek için ise rsync komutu daha uygundur. scp her çalıştırmada belirtilen dosyaların tamamını yeniden gönderir, rsync ise kaynak ve hedefi karşılaştırıp yalnızca değişen dosyaları aktarır.
| Öğe | scp | rsync |
|---|---|---|
| Aktarım kapsamı | Her çalıştırmada belirtilen dosyaların tamamı | Kaynağa göre yalnızca değişen dosyalar |
| Yarım kalan dosyaları koruma (--partial) | ❌ | ✅ |
| Kaynakta olmayan dosyaları silme (--delete) | ❌ | ✅ |
| Sembolik bağlantılar | İzleyip özgün dosyayı kopyalar | -a ile bağlantı olarak kalır |
| Alıcı tarafta gerekenler | SSH erişimi ve SFTP sunucusu | Her iki tarafta da rsync kurulu |
7️⃣ scp komutu hata mesajları ve çözümleri
scp başarısız olunca neden çıktının ilk satırında görünür. Var olmayan dosya, yazma izni ve yanlış portla bilerek oluşturduğumuz üç hatanın hepsinde neden ilk satırda çıktı, çıkış kodları da hiçbirinde 0 değildi.
🔲 No such file or directory
Uzak tarafta olmayan bir dosyayı almaya çalışırsanız yolla birlikte [No such file or directory] yazdırılır.
scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/scp: ~/scp-test/nofile.txt: No such file or directoryGönderirken hedef klasör yoksa da aynı hata çıkar. scp olmayan klasörü oluşturmaz; bu yüzden önce ssh ile mkdir -p çalıştırıp klasörü oluşturursunuz.
scp report.txt user@203.0.113.10:~/scp-test/nodir/sub/scp: dest open "scp-test/nodir/sub/": No such file or directory
scp: failed to upload file report.txt to ~/scp-test/nodir/sub/🔲 Permission denied
Alıcı taraftaki klasörde yazma izni yoksa [dest open] ardından [Permission denied] gelir. Aşağıda izni 555 olan readonly klasörüne gönderme sonucu var.
scp report.txt user@203.0.113.10:~/scp-test/readonly/scp: dest open "scp-test/readonly/report.txt": Permission denied
scp: failed to upload file report.txt to ~/scp-test/readonly/[Permission denied] önünde [hesap@sunucu adresi:] varsa ve parantez içinde publickey gibi bir kimlik doğrulama yöntemi yazıyorsa, bağlantı kimlik doğrulama aşamasında reddedilmiştir. Bu ifade, ssh programının kimlik doğrulama başarısız olduğunda verdiği biçimdir; bu yüzden önce -i ile belirtilen anahtar dosyasını ve sunucuya kayıtlı açık anahtarı kontrol edersiniz.
🔲 Connection timed out
Port numarası yanlışsa veya güvenlik duvarı o portu engellediği için yanıt gelmiyorsa, bağlantı beklenir ve [Connection timed out] ile biter. Aşağıda bekleme süresi 10 saniye yapılarak açık olmayan port 2222'ye gönderme sonucu var.
scp -P 2222 -o ConnectTimeout=10 report.txt user@203.0.113.10:~/scp-test/ssh: connect to host 203.0.113.10 port 2222: Connection timed out
scp: Connection closedBu hata çıkarsa önce -P ile yazdığınız numaranın sunucunun SSH portuyla aynı olup olmadığını kontrol edersiniz.
🔲 Yollardaki boşluklar ve tilde (~)
SFTP ile aktaran günümüz scp'sinde boşluk içeren uzak yolu tek tırnakla bir kez sarmak yeterlidir.
scp report.txt 'user@203.0.113.10:~/scp-test/my files/'report.txt 100% 14 4.7KB/s 00:00Aynı komuta -O ekleyip eski SCP protokolüyle gönderdiğimizde [ambiguous target] ile başarısız oldu. Çünkü eski SCP protokolünde uzak kabuk yolu bir kez daha yorumlar.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'scp: ambiguous targetBu durumda uzak kabukta da tek sözcük olarak okunması için boşluğun önüne ters eğik çizgi koyarsınız.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'report.txt 100% 14 4.5KB/s 00:00İki noktadan sonraki yol eğik çizgi veya tilde olmadan başlarsa uzak hesabın ana klasörüne göre işlenir.
scp report.txt user@203.0.113.10:scp-test/report-rel.txtreport.txt 100% 14 5.6KB/s 00:00Resmî kılavuz, eski bir SFTP sunucusu tilde ile başlayan yolu ana klasöre çeviremediğinde -O kullanılmasını söyler. Bu durumda yukarıdaki gibi tilde olmadan ana klasöre göre yol yazmak da aynı yere kaydeder.
🔢 SSS & önerilen içerikler











ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.