Perintah scp: Cara Pakai dan Opsi, Menyalin Folder, dan Menentukan Port
scp adalah alat salin yang digunakan untuk bertukar file dengan server yang Anda akses melalui SSH. Saat mengirim file dengan perintah scp, Anda menulis sumber lebih dulu lalu tujuan di belakangnya, seperti pada cp. Setelah kami mengirim file dan folder dari server AlmaLinux 9 ke server Debian 12 lalu mengambilnya kembali, transfer berlangsung melalui protokol SFTP dan satu file 20MB tiba dalam waktu kurang dari 1 detik.
Semua output di bawah adalah hasil apa adanya dari scp OpenSSH 9.9 yang dijalankan dengan akun root di sisi pengirim. Hanya alamat server dan nama akun yang diganti dengan nilai contoh.
1️⃣ Cara pakai scp dan path jarak jauh
Di depan path server jarak jauh, tambahkan [akun@alamat server:]. Path tanpa titik dua dikenali sebagai path di server tempat perintah dijalankan, sehingga sisi yang memakai titik dua menentukan apakah Anda mengirim atau menerima.
Mengirim report.txt dari folder saat ini ke folder scp-test di bawah home server jarak jauh.
scp report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.1KB/s 00:00Setelah transfer selesai, nama file, progres, ukuran, kecepatan, dan waktu yang dibutuhkan tampil dalam satu baris. Tampilan progres ini hanya muncul saat dijalankan di terminal. Karena itu, jika output dialihkan ke file, tidak ada apa pun yang tersimpan di file tersebut.
Saat mengambil file, tulis path jarak jauh di depan dan path lokal tempat menyimpan di belakangnya.
scp user@203.0.113.10:~/scp-test/report.txt ./downloads/report.txt 100% 14 2.7KB/s 00:00Jika path tujuan diakhiri nama file, bukan folder, file disimpan dengan nama itu. Setelah dikirim dengan perintah di bawah, report.txt ada di folder sisi penerima dengan nama report-1028.txt.
scp report.txt user@203.0.113.10:~/scp-test/report-1028.txtreport.txt 100% 14 4.6KB/s 00:00🔲 Simulator perintah scp
Di simulator bawah ini Anda dapat mengetik sendiri perintah kirim, terima, dan salin folder lalu memeriksa output tiap opsi.
2️⃣ Opsi perintah scp
Opsi ditulis tepat setelah scp, sebelum sumber. -P untuk port memakai huruf besar, sedangkan -p huruf kecil mempertahankan waktu dan izin, jadi salah menulis huruf akan menjalankan tindakan lain.
-l menetapkan batas atas kecepatan transfer dalam satuan Kbit/s. Tanpa opsi, file 20MB selesai ditransfer dalam waktu kurang dari 1 detik.
scp backup.tar.gz user@203.0.113.10:~/scp-test/backup.tar.gz 100% 20MB 53.6MB/s 00:00-l 8000 setara dengan sekitar 1,000KB per detik. Saat file yang sama dikirim dengan -l 8000, kecepatan pada tampilan progres menjadi 996.5KB/s dan transfer memakan waktu 20 detik.
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 mengompresi data pada koneksi SSH dengan cara yang sama seperti gzip. Saat file log 19MB berisi kalimat berulang dikirim masing-masing tiga kali, antara dua server ini pengiriman dengan -C sedikit lebih lambat.
| Perintah | File | Waktu eksekusi | Kecepatan pada tampilan progres |
|---|---|---|---|
| scp backup.tar.gz | 20MB | 0.68 detik | 53.6MB/s |
| scp -l 8000 backup.tar.gz | 20MB | 20.82 dtk | 996.5KB/s |
| scp access.log (3 kali) | 19MB | 0.79~0.89 dtk | — |
| scp -C access.log (3 kali) | 19MB | 0.84~0.97 dtk | — |
Waktu eksekusi adalah waktu sejak perintah dimulai, terhubung, sampai transfer selesai. Manual ssh juga menjelaskan bahwa kompresi berguna pada jalur lambat dan justru memperlambat transfer di jaringan cepat.
-v menampilkan proses dari koneksi hingga transfer sebagai baris debug1, sehingga dipakai untuk mencari penyebab saat koneksi gagal atau berhenti di autentikasi. Output-nya panjang, jadi kami hanya memilih baris autentikasi dan transfer dengan grep.
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 secondsBaris [Sending subsystem: sftp] berarti scp mengirim file dengan protokol SFTP. Mulai OpenSSH 9.0, scp memakai SFTP secara default. Jika ditambah -O, transfer memakai protokol SCP lama dan di tempat yang sama muncul [Sending command: scp -v -t].
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📌 Opsi utama: hasil dari artikel ini
| Opsi | Fungsi | Hasil di artikel ini | |
|---|---|---|---|
| -P | Menentukan port koneksi SSH | Port 22 selesai mengirim report.txt, port 2222 yang tertutup berakhir dengan [Connection timed out] | |
| -i | Menentukan file kunci privat untuk autentikasi kunci publik | Pengiriman report.txt selesai dengan menentukan ~/.ssh/id_ed25519 | |
| -r | Menyalin file dan subfolder di dalam folder | Di sisi penerima folder css dan images tetap dengan struktur aslinya; tanpa opsi ini tidak terkirim karena error [not a regular file] | |
| -p | Mempertahankan waktu modifikasi, waktu akses, dan izin sumber | Waktu modifikasi dipertahankan; di sisi penerima artikel ini, izin 600 hanya bertahan pada file yang dikirim dengan -O -p | |
| -C | Mengompresi data pada koneksi SSH | Pada log 19MB antara dua server artikel ini, pengiriman dengan opsi ini sedikit lebih lambat | |
| -l | Menetapkan batas atas kecepatan transfer dalam satuan Kbit/s | Dengan -l 8000, 20MB pada 996.5KB/s, 20.82 detik | |
| -v | Menampilkan proses dari koneksi hingga transfer sebagai baris debug1 | Transfer SFTP dipastikan dari baris [Sending subsystem: sftp] | |
| -3 | Mentransfer data antara dua server jarak jauh melalui server yang menjalankan perintah (cara default mulai OpenSSH 8.7) | Pengiriman report.txt selesai dengan dua folder di server yang sama sebagai sumber dan tujuan | |
| -O | Mentransfer dengan protokol SCP lama | Pada output -v muncul [Sending command: scp -v -t]; path berspasi perlu garis miring terbalik tambahan | |
| -o | Meneruskan opsi berformat ssh_config ke ssh | Waktu tunggu diatur 10 detik dengan ConnectTimeout=10 dan [Connection timed out] dipastikan |
📎 Opsi lainnya: menurut manual resmi
| Opsi | Fungsi | |
|---|---|---|
| -q | Mematikan tampilan progres serta peringatan dan pesan diagnostik ssh | |
| -J | Terhubung dulu ke jump host, lalu dari sana mengatur penerusan TCP ke tujuan akhir (bentuk singkat pengaturan ProxyJump, beberapa hop dipisahkan koma) | |
| -F | Menentukan file lain sebagai file konfigurasi per pengguna ssh (diteruskan langsung ke ssh) | |
| -4 | Memaksa hanya memakai alamat IPv4 | |
| -6 | Memaksa hanya memakai alamat IPv6 |
3️⃣ Menyalin folder dengan scp dan mempertahankan waktu
Jika folder ditentukan tanpa opsi, scp menampilkan error bahwa itu bukan file biasa dan tidak melakukan transfer.
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/Dengan -r, file dan subfolder di dalam folder ikut disalin.
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:00Output hanya menampilkan nama file. Pada output find di sisi penerima, folder css dan images ada di bawah site-files dengan struktur aslinya.
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 mengikuti tautan simbolik di dalam folder dan menyalin file aslinya, jadi untuk folder yang tautannya harus tetap berupa tautan, gunakan rsync -a.
-p mempertahankan waktu modifikasi, waktu akses, dan izin sumber. Sebelum dikirim, report.txt asli kami atur dengan waktu modifikasi 1 Oktober 2026 00:00 (UTC) dan izin 600. Zona waktu server penerima adalah UTC, sehingga ls di sisi pengirim juga dijalankan dengan TZ=UTC.
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.txtreport-p.txt yang dikirim dengan -p dan report-Op.txt yang dikirim dengan -O -p mempertahankan waktu asli, sedangkan report.txt yang dikirim tanpa opsi tersimpan dengan waktu pengiriman. Di server penerima, izin file yang dikirim lewat SFTP tersimpan 664 meski memakai -p, dan hanya file yang dikirim dengan protokol SCP lama (-O) yang mempertahankan 600.
Karena itu, untuk file yang izinnya harus sama dengan sumber, periksa izinnya dengan ls -l di sisi penerima setelah dikirim.
4️⃣ Menentukan port dan file kunci di scp
Untuk server yang tidak bisa diakses dengan port default 22 dan kunci default, tentukan sendiri port dan kuncinya sebelum mengirim. -P menentukan port koneksi SSH, dan -i menentukan file kunci privat untuk autentikasi kunci publik.
Di bawah ini contoh yang menentukan langsung port 22 dan file kunci. Jika port server sudah diubah, tulis nomor itu sebagai pengganti 22.
scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.3KB/s 00:00Tanpa -i, seperti ssh, scp memakai kunci bernama default di bawah ~/.ssh (id_rsa, id_ecdsa, id_ed25519, dan lainnya) secara berurutan.
Jika sering mengirim ke server yang sama, tulis alias di ~/.ssh/config dan masukkan alias saja di scp.
Host myserver
HostName 203.0.113.10
User user
Port 22
IdentityFile ~/.ssh/id_ed25519Nama pada baris Host menjadi alias, dan empat baris di bawahnya menggantikan alamat server, akun, port, dan file kunci. Perintah yang hanya memakai alias juga berakhir dengan hasil satu baris yang sama seperti saat alamat dan kunci ditulis lengkap.
scp report.txt myserver:~/scp-test/report.txt 100% 14 4.2KB/s 00:00-P, -i, dan alias semuanya memakai pengaturan koneksi ssh apa adanya, sehingga proses membuat kunci dan mendaftarkannya ke server juga sama seperti saat terhubung dengan perintah SSH.
5️⃣ Menyalin antarserver dengan scp
Meski sumber dan tujuan sama-sama server jarak jauh, Anda dapat menyalin dengan satu baris scp. Mulai OpenSSH 8.7, data ditransfer melalui server yang menjalankan perintah, dan cara ini adalah -3. Catatan rilis resmi menyebut alasan menjadikannya default adalah kredensial server tujuan tidak perlu disimpan di server sumber.
Pengukuran di bawah dijalankan dengan dua folder di server yang sama sebagai sumber dan tujuan. Jika server tujuan berbeda, ubah saja akun dan alamat di bagian belakang.
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:00Ini seperti kantor pusat menerima dokumen antara dua cabang lalu mengirimkannya kembali.
Cara lama, ketika server sumber mengirim langsung ke server tujuan, ditentukan dengan -R. Cara ini mengharuskan server sumber dapat terhubung ke server tujuan tanpa kata sandi. Mulai OpenSSH 10.6, penggunaan -R memunculkan peringatan penghentian dukungan, dan versi berikutnya direncanakan mengabaikan opsi ini lalu menyalin dengan cara -3.
6️⃣ Perbandingan scp dan rsync
Untuk mengirim beberapa file sekali saja, scp sudah cukup, sedangkan untuk menyamakan folder yang sama berulang kali atau melanjutkan transfer yang terputus, gunakan perintah rsync. scp mengirim ulang semua file yang ditentukan setiap kali dijalankan, sedangkan rsync membandingkan sumber dan tujuan lalu hanya mentransfer file yang berubah.
| Item | scp | rsync |
|---|---|---|
| Cakupan transfer | Semua file yang ditentukan setiap kali dijalankan | Hanya file yang berubah dibanding sumber |
| Menyimpan file yang baru diterima sebagian (--partial) | ❌ | ✅ |
| Menghapus file yang tidak ada di sumber (--delete) | ❌ | ✅ |
| Tautan simbolik | Mengikuti dan menyalin file aslinya | Dengan -a tetap berupa tautan |
| Yang diperlukan di sisi penerima | Akses SSH dan server SFTP | rsync terpasang di kedua sisi |
7️⃣ Pesan error perintah scp dan solusinya
Saat scp gagal, penyebabnya langsung tampil di baris pertama output. Pada tiga kasus yang sengaja kami buat dengan file yang tidak ada, izin tulis, dan port yang salah, penyebabnya selalu tampil di baris pertama dan kode keluarnya juga tidak pernah 0.
🔲 No such file or directory
Jika mencoba mengambil file yang tidak ada di sisi jarak jauh, [No such file or directory] ditampilkan bersama path-nya.
scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/scp: ~/scp-test/nofile.txt: No such file or directorySaat mengirim, error yang sama muncul jika folder tujuan tidak ada. scp tidak membuat folder yang belum ada, jadi jalankan dulu mkdir -p lewat ssh untuk membuat folder.
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
Jika folder sisi penerima tidak punya izin tulis, [Permission denied] muncul setelah [dest open]. Di bawah ini hasil pengiriman ke folder readonly dengan izin 555.
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/Jika di depan [Permission denied] ada [akun@alamat server:] dan di dalam kurung ada metode autentikasi seperti publickey, koneksi ditolak pada tahap autentikasi. Teks ini adalah format yang dikeluarkan program ssh saat autentikasi gagal, jadi periksa dulu file kunci yang ditentukan dengan -i dan kunci publik yang terdaftar di server.
🔲 Connection timed out
Jika nomor port salah atau firewall memblokir port itu sehingga tidak ada respons, koneksi ditunggu lalu berakhir dengan [Connection timed out]. Di bawah ini hasil pengiriman ke port 2222 yang tertutup dengan waktu tunggu 10 detik.
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 closedJika error ini muncul, periksa dulu apakah nomor pada -P sama dengan port SSH server.
🔲 Spasi dan tilde (~) dalam path
Pada scp saat ini yang mentransfer lewat SFTP, path jarak jauh berspasi cukup diapit sekali dengan tanda kutip tunggal.
scp report.txt 'user@203.0.113.10:~/scp-test/my files/'report.txt 100% 14 4.7KB/s 00:00Saat -O ditambahkan ke perintah yang sama untuk mengirim dengan protokol SCP lama, perintah gagal dengan [ambiguous target]. Ini karena pada protokol SCP lama shell jarak jauh menafsirkan path sekali lagi.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'scp: ambiguous targetDalam hal ini, taruh garis miring terbalik di depan spasi agar shell jarak jauh juga membacanya sebagai satu kata.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'report.txt 100% 14 4.5KB/s 00:00Jika path setelah titik dua dimulai tanpa garis miring atau tilde, path diproses relatif terhadap folder home akun jarak jauh.
scp report.txt user@203.0.113.10:scp-test/report-rel.txtreport.txt 100% 14 5.6KB/s 00:00Manual resmi menyarankan -O saat server SFTP lama tidak bisa mengubah path yang diawali tilde menjadi folder home. Dalam hal ini, menulis path relatif terhadap home tanpa tilde seperti di atas juga menyimpan ke tempat yang sama.
🔢 FAQ & Konten yang Direkomendasikan











ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.