Apa Itu?
SSH (Secure Shell) bukan sekadar protokol untuk meremote server lewat terminal. Di balik kemampuannya membuat koneksi terenkripsi ke mesin jauh, SSH juga membawa serta keluarga perintah yang memungkinkan kita mentransfer file secara aman antara lokal dan server — baik itu upload maupun download. Dua utilitas utama yang bergantung pada infrastruktur SSH untuk keperluan transfer file adalah SCP (Secure Copy Protocol) dan SFTP (SSH File Transfer Protocol). Keduanya memanfaatkan enkripsi dan autentikasi yang sama persis dengan SSH, sehingga data yang berpindah tidak bisa disadap begitu saja oleh pihak ketiga.
Mengapa ini penting? Di lingkungan produksi, file sering kali harus dipindahkan antara mesin — misalnya mengambil backup database dari server, mengunduh log analitik untuk diperiksa lokal, atau menarik artefak build dari CI/CD runner. Metode seperti FTP konvensional atau HTTP tanpa TLS mengirim data dalam bentuk plain text, yang berarti kredensial dan isi file terbuka lebar bagi siapa pun yang bisa menyadap jaringan. Dengan SCP dan SFTP, seluruh sesi — termasuk nama file, ukuran, dan isi konten — dilindungi oleh tunnel terenkripsi. Itulah sebabnya hampir semua sysadmin dan developer modern menjadikan SSH-based transfer sebagai standar de facto.
Sebelum mulai, pastikan tiga prasyarat terpenuhi: (1) SSH server (sshd) berjalan di mesin remote, biasanya di port 22; (2) Anda memiliki kredensial yang valid — baik password maupun SSH key; (3) utilitas scp atau sftp terinstal di mesin lokal. Hampir semua distribusi Linux dan macOS sudah membawa keduanya secara default. Pengguna Windows bisa mengandalkan OpenSSH client yang kini terbundel di Windows 10/11, atau memasang WSL.
Berikut step-by-step dasar untuk mengunduh file dari server menggunakan SCP:
# Step 1: Verifikasi koneksi SSH ke server
ssh username@server-ip
# Step 2: Unduh satu file dari server ke direktori lokal saat ini
scp username@server-ip:/path/remote/file.txt ./
# Step 3: Verifikasi file sudah turun
ls -lh file.txt
Jika koneksi berhasil di step 1, maka SCP di step 2 seharusnya juga berjalan lancar karena keduanya menggunakan mekanisme autentikasi yang identik.
Cara Kerja
Konsep inti dari transfer file berbasis SSH sesungguhnya sederhana: seluruh komunikasi dilewatkan melalui tunnel SSH yang terenkripsi. Ketika Anda menjalankan scp, yang terjadi di balik layar adalah proses berikut. Pertama, client menginisiasi koneksi TCP ke port SSH server (default 22). Kedua, terjadi negosiasi versi protokol dan pertukaran kunci kriptografi sehingga terbentuk encrypted session. Ketiga, user diautentikasi — via password, public key, atau metode lain yang dikonfigurasi. Keempat, setelah autentikasi berhasil, client mengirim request eksekusi subsystem scp atau sftp di sisi server. Kelima, transfer file berlangsung di dalam tunnel tersebut; setiap paket yang keluar masuk sudah terenkripsi sebelum menyentuh kabel jaringan.
Komponen utama yang terlibat bisa dibagi menjadi empat. Pertama, SSH Client — program di mesin lokal (misalnya /usr/bin/ssh, /usr/bin/scp) yang menginisiasi koneksi. Kedua, SSH Server (sshd) — daemon di mesin remote yang mendengarkan koneksi masuk dan menangani autentikasi. Ketiga, SCP Subsystem — program kecil di sisi server yang dijalankan oleh sshd ketika client meminta transfer SCP; secara teknis ini adalah instance scp yang berjalan dalam mode "sink" atau "source" tergantung arah transfer. Keempat, SFTP Subsystem — server-side subsystem yang lebih terstruktur, mendukung operasi seperti list directory, resume transfer, dan remove file remotely — fitur yang tidak dimiliki oleh SCP.
Perbedaan arsitektural antara SCP dan SFTP patut dipahami. SCP bekerja dengan cara yang cukup "brutal": ia menjalankan perintah scp -t (to) atau scp -f (from) di remote side, lalu mengalirkan data mentah melalui pipe. Sementara itu, SFTP menggunakan protokol request-response yang terdefinisi rapi — mirip FTP secara konsep, tetapi dikemas dalam channel SSH. Akibatnya, SFTP lebih tangguh untuk operasi kompleks, sementara SCP lebih ringan dan cepat untuk transfer sederhana satu atau dua file.
Contoh Penggunaan
Skenario 1: Mengunduh Satu File dari Server
Ini adalah kasus paling dasar. Anda memiliki sebuah file konfigurasi di server dan ingin mengambilnya untuk diperiksa di lokal. Perintahnya langsung dan intuitif:
scp devuser@192.168.10.50:/etc/nginx/nginx.conf ~/Downloads/
Output yang diharapkan:
nginx.conf 100% 2467 42.1KB/s 00:00
SCP menampilkan progress bar dengan persentase, ukuran file, kecepatan transfer, dan estimasi waktu. File nginx.conf kini tersedia di ~/Downloads/ mesin lokal dengan nama yang sama persis.
Skenario 2: Mengunduh Seluruh Direktori (Recursive)
Sering kali yang perlu diunduh bukan satu file, melainkan satu folder utuh — misalnya seluruh direktori log bulan ini. Flag -r memungkinkan SCP menelusuri subtree secara rekursif:
scp -r deploy@10.0.3.72:/var/log/app/2024-06/ ~/projects/logs-june/
Output:
error.log 100% 120KB 11.2MB/s 00:00
access.log 100% 3450KB 12.8MB/s 00:00
metrics.log 100% 890KB 12.4MB/s 00:00
debug.log 100% 210KB 11.8MB/s 00:00
Perhatikan bahwa SCP mempertahankan struktur direktori. Jika di remote terdapat subdirektori di dalam 2024-06/, maka subdirektori itu juga akan ikut terbuat di lokal.
Skenario 3: Mengunduh File dengan Port SSH Non-Default
Banyak administrator mengubah port SSH default dari 22 ke port lain (misalnya 2222) sebagai salah satu langkah mitigasi brute-force scan. SCP mendukung opsi -P (huruf kapital, berbeda dengan ssh yang memakai -p kecil untuk port) untuk menentukan port:
scp -P 2222 admin@203.0.113.15:/home/admin/backup-db-20240601.sql.gz ~/backups/
Output:
backup-db-20240601.sql.gz 100% 482MB 9.7MB/s 00:49
Untuk file berukuran besar seperti backup database, transfer bisa memakan waktu. Proses ini bisa dibatalkan dengan Ctrl+C tanpa merusak file yang sudah ada di server — file parsial di sisi lokal memang tidak akan utuh, tetapi setidaknya Anda bisa mengulangi kembali.
Skenario 4: Mengunduh File Menggunakan SFTP (Sesi Interaktif)
Ketika Anda perlu menjelajahi remote filesystem sebelum memutuskan file mana yang diunduh, SFTP interaktif jauh lebih praktis daripada menebak path dan menjalankan SCP berkali-kali:
sftp ci-user@ci.internal.company.io
Connected to ci.internal.company.io.
sftp> ls /opt/artifacts/latest/
build-2847.tar.gz checksum.sha256 deploy.sh
sftp> get /opt/artifacts/latest/build-2847.tar.gz /local/staging/
Fetching /opt/artifacts/latest/build-2847.tar.gz to /local/staging/build-2847.tar.gz
/opt/artifacts/latest/build-2847.tar.gz 100% 156MB 18.4MB/s 00:08
sftp> exit
Perintah get di dalam sesi SFTP adalah padanan scp untuk download. Keuntungannya, Anda bisa menjalankan ls, cd, dan pwd di remote tanpa membuka sesi SSH terpisah.
Skenario 5: Mengunduh File via Rsync over SSH
Untuk transfer berulang atau file yang sering berubah sebagian, rsync dengan SSH sebagai transport jauh lebih efisien karena hanya mengirim delta (perbedaan) antara versi lokal dan remote:
rsync -avz -e "ssh -p 2222" webmaster@server.example.com:/var/www/html/assets/ ~/mirror/assets/
Output:
receiving file list ... done
images/banner-v2.png
css/theme-update.css
sent 845 bytes received 1,273,412 bytes 254,932.40 bytes/sec
total size is 89,234,567 speedup is 70.12
Parameter -a mempertahankan permission dan timestamp, -v menampilkan detail, dan -z mengaktifkan kompresi di tingkat transfer. Opsi -e "ssh -p 2222" mengarahkan rsync untuk menggunakan SSH pada port 2222. Dengan rsync, hanya file yang benar-benar berubah atau belum ada di tujuan yang ditransfer — menghemat bandwidth secara dramatis untuk sinkronisasi berulang.
Tips & Troubleshooting
Masalah Umum dan Solusi
Permission denied (publickey). Ini adalah error yang paling sering ditemui, terutama bagi pemula. Pesan ini muncul ketika server menolak autentikasi karena SSH key yang dikirim client tidak dikenali, atau karena server dikonfigurasi untuk hanya menerima public key authentication dan tidak mengizinkan password. Solusi pertama adalah memastikan bahwa Anda telah menyalin public key ke server menggunakan ssh-copy-id username@server. Solusi kedua, periksa apakah file private key di lokal memiliki permission yang benar — ia harus 600 (hanya bisa dibaca oleh owner), bukan 644. Jika permission terlalu longgar, SSH akan menolak menggunakan key tersebut demi keamanan:
chmod 600 ~/.ssh/id_rsa
Connection refused. Error ini biasanya berarti bahwa sshd tidak berjalan di server, atau berjalan di port yang berbeda dari yang Anda coba. Verifikasi dengan menjalankan systemctl status sshd di server. Jika server memang menggunakan port non-standar, selalu sertakan opsi -P pada SCP atau -p pada SSH.
No such file or directory. Kadang path yang Anda tulis di perintah SCP ternyata salah. Ingat bahwa path remote ditulis relatif terhadap home directory user remote kecuali Anda menggunakan path absolut yang dimulai dari /. Jika Anda login sebagai user deploy, maka scp deploy@server:backup.tar.gz . akan mencari file di /home/deploy/backup.tar.gz, bukan di root filesystem. Gunakan path absolut seperti deploy@server:/opt/backups/backup.tar.gz untuk menghindari ambiguitas.
Transfer sangat lambat untuk file besar. SCP secara default tidak menggunakan kompresi. Untuk file teks, log, atau source code, tambahkan flag -C (kapital) untuk mengaktif