Menggunakan SCP untuk Transfer File dan Folder
SCP (Secure Copy Protocol) adalah tool berbasis command line untuk mentransfer file dan folder secara aman antara komputer lokal dan mesin remote. SCP berjalan di atas protokol SSH, sehingga seluruh proses transfer data terenkripsi secara default tanpa konfigurasi tambahan. Dalam praktik sehari-hari, SCP sangat sering dipakai engineer untuk meng-upload file dari lokal ke server, meng-download file dari server ke lokal, atau memindahkan file maupun folder antar dua server sekaligus. Tanpa perlu menginstal tool tambahan, SCP biasanya sudah tersedia secara default di Linux dan macOS, menjadikannya pilihan praktis untuk kebutuhan transfer file yang cepat dan aman.
Sintaks Dasar SCP
Struktur dasar perintah SCP cukup sederhana dan konsisten untuk segala jenis transfer:
scp [opsi] sumber tujuan
Tiga bagian ini punya peran masing-masing. opsi adalah parameter tambahan yang mengubah perilaku transfer, misalnya -r untuk folder atau -P untuk port khusus. sumber adalah file atau folder asal, yang bisa berada di lokal maupun di mesin remote. tujuan adalah lokasi tempat file akan disalin, juga bisa lokal atau remote — kombinasi sumber dan tujuan inilah yang menentukan arah transfer.
Untuk menentukan lokasi di mesin remote, SCP memakai format path khusus:
user@host:/path/tujuan
Format ini terdiri dari user (akun yang dipakai untuk autentikasi), host (alamat atau hostname mesin remote), dan /path/tujuan (lokasi file di mesin tersebut, dipisahkan dari host dengan tanda titik dua). Kalau salah satu sisi (sumber atau tujuan) tidak memakai format user@host:, SCP akan menganggap sisi tersebut sebagai path lokal di komputer tempat perintah dijalankan.
Penting untuk dipahami bahwa SCP sebenarnya bekerja dengan menjalankan SSH di balik layar untuk membuka koneksi, lalu menstransfer data lewat koneksi tersebut. Inilah sebabnya semua opsi autentikasi yang berlaku untuk SSH biasa — seperti SSH key, passphrase, atau port custom — juga berlaku untuk SCP, karena keduanya pada dasarnya memakai mekanisme transport yang sama.
flowchart LR
A[Perintah scp] --> B[Buka koneksi SSH]
B --> C{Autentikasi}
C -- Berhasil --> D[Buka channel transfer data]
D --> E[Salin file/folder]
C -- Gagal --> F[Error: Permission denied]Contoh Penggunaan SCP
Transfer File dari Lokal ke Remote
scp file.txt user@server:/home/user/
Perintah ini akan menyalin file.txt dari komputer lokal ke direktori home user di server. Karena tujuan diakhiri dengan / tanpa nama file spesifik, SCP akan memakai nama file asli (file.txt) di lokasi tujuan.
Transfer File dari Remote ke Lokal
scp user@server:/home/user/log.txt ~/Downloads/
Arahnya dibalik dari contoh sebelumnya — sumber sekarang berada di remote, dan tujuan berada di lokal. File log.txt dari server akan disalin ke folder Downloads di komputer lokal. Perhatikan bahwa posisi argumen sumber dan tujuan selalu mengikuti urutan yang sama (scp sumber tujuan), terlepas dari arah transfer-nya.
Transfer Folder Secara Rekursif
Secara default, SCP hanya bisa menyalin file tunggal, bukan folder beserta isinya. Untuk menyalin folder, gunakan opsi -r (recursive):
scp -r proyek/ user@server:/home/user/
Opsi -r memberitahu SCP untuk masuk ke dalam folder proyek/ dan menyalin seluruh file serta subfolder di dalamnya secara rekursif. Tanpa opsi ini, SCP akan menampilkan error karena tidak tahu bagaimana cara menangani sebuah direktori sebagai satu unit transfer.
Transfer Antar Dua Server
SCP juga bisa memindahkan file langsung antar dua mesin remote, tanpa file tersebut harus mampir ke komputer lokal terlebih dahulu:
scp user1@serverA:/data/file.zip user2@serverB:/backup/
Perintah ini biasanya dijalankan dari komputer lokal (atau dari mesin ketiga manapun yang punya akses SSH ke kedua server), dan akan meng-copy file dari server A ke server B. Secara teknis, data tetap mengalir melalui komputer yang menjalankan perintah — SCP tidak benar-benar membuat koneksi langsung antara serverA dan serverB tanpa melewati client yang menjalankan command.
sequenceDiagram
participant Client as Komputer (menjalankan scp)
participant ServerA as Server A
participant ServerB as Server B
Client->>ServerA: Koneksi SSH, baca file.zip
ServerA-->>Client: Stream data file.zip
Client->>ServerB: Koneksi SSH, tulis file.zip
Client--xServerB: Stream data diteruskanOpsi SCP yang Sering Digunakan
Selain -r, SCP punya beberapa opsi lain yang sering dipakai dalam penggunaan sehari-hari:
| Opsi | Fungsi |
|---|---|
-r | Copy folder secara recursive |
-P | Menentukan port SSH (default: 22) |
-p | Menjaga permission dan timestamp file |
-C | Mengaktifkan kompresi data |
-i | Menggunakan SSH private key tertentu |
Contoh Menggunakan Port Custom
Server yang dikonfigurasi memakai port SSH non-default (bukan 22) membutuhkan opsi -P (huruf besar) untuk menentukan port yang benar:
scp -P 2222 file.txt user@server:/home/user/
Perhatikan bahwa opsi port di SCP memakai huruf besar-P, berbeda dengan perintahsshbiasa yang memakai huruf kecil-puntuk tujuan yang sama. Kesalahan kapitalisasi pada flag ini adalah sumber error yang sering terjadi saat berpindah antara perintahsshdanscp.
Contoh Menggunakan SSH Key
Untuk server yang tidak mengizinkan login dengan password dan hanya menerima SSH key authentication, gunakan opsi -i untuk menentukan private key yang sesuai:
scp -i ~/.ssh/id_rsa file.txt user@server:/home/user/
Ini umum dipakai pada server cloud (seperti instance EC2 atau VPS) yang secara default sudah menonaktifkan autentikasi password dan hanya mengizinkan akses lewat SSH key yang sudah didaftarkan.
Transfer Beberapa File Sekaligus dengan Wildcard
SCP juga mendukung wildcard shell untuk menyalin beberapa file yang cocok dengan pola tertentu dalam satu perintah, tanpa perlu menjalankan SCP berulang kali untuk masing-masing file:
scp *.log user@server:/home/user/logs/
Perintah ini menyalin seluruh file dengan ekstensi .log di direktori kerja saat ini ke folder logs/ di server. Perlu diperhatikan bahwa wildcard di sisi lokal akan diekspansi oleh shell lokal sebelum dikirim ke SCP, sementara wildcard di sisi remote butuh penanganan berbeda — tanda kutip diperlukan agar ekspansi terjadi di sisi remote, bukan di sisi lokal:
scp user@server:'/home/user/logs/*.log' ~/Downloads/
Tanda kutip tunggal di sekitar path remote mencegah shell lokal mencoba mengekspansi wildcard tersebut terlebih dahulu (yang pasti gagal karena path tersebut tidak ada di lokal), sehingga ekspansi *.log baru terjadi setelah perintah sampai di sisi server.
Keamanan SCP
Karena SCP berjalan di atas SSH, ia mewarisi seluruh karakteristik keamanan protokol tersebut. Data yang ditransfer terenkripsi secara end-to-end, sehingga aman dari penyadapan meski dilakukan lewat jaringan publik seperti WiFi kafe atau hotspot bersama. Autentikasi bisa memakai password atau SSH key, mengikuti konfigurasi yang sama dengan akses SSH biasa ke mesin tersebut.
Namun, ada satu batasan penting yang perlu dipahami: SCP tidak mendukung resume transfer. Kalau koneksi terputus di tengah jalan — misalnya karena jaringan tidak stabil saat memindahkan file berukuran besar — proses harus diulang dari awal, tidak ada mekanisme untuk melanjutkan dari titik terakhir yang berhasil ditransfer.
Jangan andalkan SCP untuk transfer file berukuran besar (puluhan gigabyte atau lebih) di jaringan yang tidak stabil. Tanpa kemampuan resume, koneksi yang putus di menit terakhir berarti seluruh transfer harus diulang dari nol — buang waktu dan bandwidth yang signifikan untuk file besar.
Memantau Progress dan Mengoptimalkan Transfer
Secara default, SCP menampilkan progress bar sederhana di terminal selama proses transfer berlangsung — termasuk persentase, kecepatan transfer, dan estimasi waktu yang tersisa. Tampilan ini biasanya cukup untuk memantau transfer satu file, tapi kurang informatif kalau kamu mentransfer banyak file sekaligus dengan opsi -r, karena progress bar hanya muncul satu per satu untuk setiap file.
Untuk transfer yang melibatkan banyak file kecil, kompresi dengan opsi -C bisa membantu mempercepat proses, terutama di jaringan dengan bandwidth terbatas:
scp -C -r proyek/ user@server:/home/user/
Opsi -C mengaktifkan kompresi data sebelum dikirim melalui jaringan, lalu didekompresi di sisi penerima. Untuk file yang sudah terkompresi sebelumnya (seperti .zip, .jpg, atau .mp4), opsi ini tidak banyak membantu dan justru menambah overhead CPU tanpa manfaat berarti, karena data tersebut sudah mendekati ukuran minimalnya. Tapi untuk file teks, source code, atau log mentah yang belum terkompresi, -C bisa mempercepat transfer secara signifikan di koneksi yang lambat.
Satu hal lain yang sering luput diperhatikan adalah dampak transfer besar terhadap koneksi SSH yang sedang berjalan bersamaan. Kalau kamu menjalankan SCP untuk file besar sambil juga punya sesi SSH interaktif terbuka ke server yang sama, transfer tersebut bisa memakai sebagian besar bandwidth yang tersedia dan membuat sesi interaktif terasa lambat merespons. Untuk lingkungan dengan bandwidth terbatas, menjadwalkan transfer besar di luar jam kerja atau memakai rsync dengan opsi pembatasan bandwidth (--bwlimit) bisa jadi solusi yang lebih baik.
Tips Praktis Penggunaan SCP
- Gunakan absolute path untuk menghindari salah lokasi, terutama saat path relatif bisa membingungkan antara direktori kerja lokal dan direktori home di remote
- Pastikan user remote memiliki permission write di direktori tujuan sebelum transfer, atau SCP akan gagal dengan error permission denied
- Untuk transfer besar atau berulang, pertimbangkan rsync sebagai alternatif yang lebih robust
- Selalu cek port SSH terlebih dahulu jika koneksi gagal — banyak server menggunakan port non-default untuk alasan keamanan
Permission write yang tidak memadai adalah salah satu kegagalan paling umum saat memakai SCP — pesan errornya kadang tidak langsung jelas menyebut “permission denied”, melainkan muncul sebagai kegagalan transfer yang ambigu. Memeriksa permission direktori tujuan dengan ls -ld /path/tujuan di server sebelum mencoba transfer bisa menghemat waktu debugging.
Kapan SCP Tidak Disarankan?
SCP kurang cocok dipakai dalam beberapa skenario berikut:
SCP kurang ideal jika:
✗ Transfer file sangat besar dan rawan terputus
✗ Membutuhkan resume otomatis setelah koneksi gagal
✗ Perlu sinkronisasi folder secara berkala (hanya file yang berubah)
SCP masih cukup untuk:
✓ Transfer file atau folder satu kali, ukuran wajar
✓ Kebutuhan cepat tanpa instalasi tool tambahan
✓ Script otomatis sederhana yang dijalankan sesekali
Dalam skenario yang tidak ideal di atas, rsync atau SFTP adalah pilihan yang lebih baik. rsync mendukung sinkronisasi incremental — hanya bagian file yang berubah yang ditransfer ulang, bukan seluruh file dari awal — dan bisa melanjutkan transfer yang terputus dengan flag --partial. SFTP, di sisi lain, menyediakan antarmuka yang lebih interaktif untuk eksplorasi direktori remote, mirip FTP tapi tetap berjalan di atas SSH.
Untuk memahami kapan masing-masing tool lebih cocok dipakai, berikut perbandingan ketiganya:
| Aspek | SCP | rsync | SFTP |
|---|---|---|---|
| Resume transfer | Tidak didukung | Didukung (--partial) | Tergantung client |
| Sinkronisasi incremental | Tidak ada — selalu copy penuh | Ya, hanya bagian yang berubah | Tidak ada secara native |
| Eksplorasi direktori interaktif | Tidak ada | Tidak ada | Ya, mirip FTP |
| Kecepatan untuk file besar tak berubah | Lambat (copy ulang penuh) | Cepat (skip yang sama) | Sedang |
| Ketersediaan default di sistem | Hampir selalu ada | Perlu instal di beberapa sistem | Sering tersedia bersama SSH server |
| Cocok untuk | Transfer sekali jalan, ukuran wajar | Backup berkala, sinkronisasi folder besar | Eksplorasi manual, transfer interaktif |
Sebagai ilustrasi perbandingan praktis: kalau kamu perlu melakukan backup folder berukuran 50GB setiap malam, dan hanya sebagian kecil file yang berubah dari hari ke hari, rsync akan jauh lebih efisien karena hanya mentransfer file yang benar-benar berubah. SCP, sebaliknya, akan menyalin ulang seluruh 50GB setiap kali dijalankan, terlepas dari berapa banyak yang sebenarnya berubah — jelas tidak efisien untuk kasus penggunaan semacam ini.
Ringkasan
- SCP berjalan di atas SSH, sehingga seluruh transfer data terenkripsi secara default tanpa konfigurasi tambahan.
- Sintaks dasarnya
scp [opsi] sumber tujuan, dengan path remote memakai formatuser@host:/path/.- Gunakan opsi
-runtuk menyalin folder,-P(huruf besar) untuk port custom, dan-iuntuk menentukan SSH key tertentu.- SCP tidak mendukung resume transfer — koneksi yang terputus berarti transfer harus diulang dari awal.
- Cocok untuk transfer file atau folder sekali jalan dengan ukuran wajar, tanpa perlu instalasi tool tambahan.
- Untuk file besar, koneksi tidak stabil, atau kebutuhan sinkronisasi berkala, gunakan rsync atau SFTP sebagai gantinya.
- Periksa permission write di direktori tujuan sebelum transfer untuk menghindari kegagalan yang membingungkan.