RDP Monster

Perintah scp Linux: Salin File ke dan dari VPS (rsync, sftp)

Perintah scp Linux: Salin File ke dan dari VPS (rsync, sftp)

Perintah scp di Linux: sintaks dan transfer dasar

scp (secure copy) menyalin file antar mesin melalui SSH, jadi user, kunci, dan port yang berfungsi untuk ssh juga berfungsi untuk scp. Polanya selalu scp [options] SOURCE DESTINATION, dan sisi mana pun yang berada di remote ditulis user@host:path. Dibutuhkan login SSH yang berfungsi; jika port 22 belum merespons, aktifkan SSH di Ubuntu dan perkuat keamanannya lebih dulu.

1. Lokal ke remote (unggah)

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/

Path yang diakhiri garis miring meletakkan file di dalam direktori itu dengan nama aslinya; path lengkap mengganti namanya saat tiba. Beberapa file lokal bisa ditulis sebelum tujuan selama tujuannya berupa direktori, dan direktori itu harus sudah ada: scp tidak membuat direktori induk.

2. Remote ke lokal (unduh)

scp user@SERVER_IP:/var/log/nginx/access.log .
scp user@SERVER_IP:'/var/log/nginx/*.log' ./logs/

Tanda titik berarti "di sini, dengan nama yang sama". Beri tanda kutip pada wildcard remote agar shell lokal Anda tidak memperluasnya. Remote ke remote juga bisa: scp -3 user@HOST_A:/data/dump.sql user@HOST_B:/data/ mengalirkan salinan melalui mesin Anda, jadi hanya mesin Anda yang perlu kredensial untuk kedua server.

3. Direktori dengan -r

scp -r ./site user@SERVER_IP:/var/www/
scp -r user@SERVER_IP:/etc/nginx ./nginx-backup

-r menyalin sebuah direktori beserta seluruh isinya. Perintah pertama membuat /var/www/site di server; yang kedua mengunduh seluruh pohon nginx ke folder lokal. Symlink disalin sebagai file biasa, salah satu alasan rsync lebih cocok untuk pohon sistem yang utuh.

Opsi scp yang benar-benar dipakai: -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

Flag port ditulis dengan huruf besar -P. Huruf kecil -p berarti "pertahankan waktu modifikasi, waktu akses, dan bit mode", dan karena ssh sendiri memakai -p untuk port, tertukar keduanya adalah kesalahan scp paling umum. Agar tidak mengulang port dan kunci di setiap perintah, definisikan host sekali di ~/.ssh/config; scp, rsync, dan sftp semuanya membacanya:

Host vps
    HostName SERVER_IP
    User user
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Dua flag lagi: -l 8000 membatasi transfer pada 8.000 Kbit/dtk (sekitar 1 MB/dtk), dan -v menunjukkan kunci mana yang ditawarkan saat autentikasi gagal. Sejak OpenSSH 9.0, scp berjalan di atas protokol SFTP; sintaksnya tidak berubah, tetapi trik shell yang disisipkan di dalam path remote (misalnya command substitution) tidak lagi dijalankan di server, dan -O mengembalikan protokol lama untuk server sangat tua yang menolak mode baru.

rsync: mirror, transfer yang bisa dilanjutkan, dan pengecualian

rsync hanya menyalin yang berubah. Jalannya yang pertama mirip scp -r; jalannya berikutnya membandingkan kedua sisi dan mengirim hanya selisihnya: file baru, dan untuk file yang berubah hanya blok yang dimodifikasi. Itulah yang menjadikannya alat untuk deployment, backup, dan apa pun yang berukuran besar. rsync harus terpasang di kedua sisi (sudo apt install rsync); beberapa image minimal dan container tidak menyertakannya.

1. Perintah sehari-hari

rsync -avz --progress ./site/ user@SERVER_IP:/var/www/site/
rsync -avz --progress user@SERVER_IP:/var/www/site/ ./site-backup/

-a (archive) setara dengan -rlptgoD: rekursif, menjaga symlink tetap symlink, mempertahankan izin, waktu, grup, pemilik, dan file perangkat; kepemilikan hanya dipertahankan bila sisi penerima berjalan sebagai root. -v menampilkan daftar file, -z mengompresi, --progress menampilkan setiap file.

Garis miring di akhir itu penting. ./site/ berarti "isi dari site"; ./site berarti "direktori itu sendiri", yang akan membuat /var/www/site/site. Kalau ragu, tambahkan -n (--dry-run) dan baca daftar filenya sebelum ada yang ditulis.

2. Mirror dengan --delete

rsync -avzn --delete ./site/ user@SERVER_IP:/var/www/site/   # dry run first
rsync -avz --delete ./site/ user@SERVER_IP:/var/www/site/

--delete menghapus file di tujuan yang sudah tidak ada di sumber. Mirror sungguhan membutuhkannya, dan itu pula yang mengubah garis miring yang salah menjadi direktori yang terhapus, jadi lakukan dry-run sekali untuk setiap perintah --delete yang baru.

3. Mengecualikan file

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/

Pola bersifat relatif terhadap akar transfer; garis miring di depan mengunci posisinya, sehingga /config.php hanya mengecualikan file di tingkat teratas. --exclude-from membaca satu pola per baris.

4. Melanjutkan transfer yang terputus, port dan kunci khusus

rsync -avP -e 'ssh -p 2222 -i ~/.ssh/id_ed25519' ./disk.img user@SERVER_IP:/backup/

-P adalah singkatan dari --partial --progress: jika koneksi terputus, file parsial dipertahankan dan menjalankan ulang perintah yang sama akan melanjutkan dari titik berhenti. Opsi SSH diteruskan lewat -e, dan di sini portnya memakai huruf kecil -p karena itu flag milik ssh, bukan rsync; entri Host di ~/.ssh/config menghapus seluruh string -e tersebut.

sftp: transfer interaktif lewat login SSH yang sama

sftp memberi Anda prompt bergaya FTP di atas SSH, praktis untuk menjelajah sebelum menyalin.

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

Perintah yang diawali l bekerja di mesin Anda (lcd, lls, lpwd); sisanya bekerja di server. put -r dan get -r menyalin direktori, reget dan reput melanjutkan file yang terputus, dan !command menjalankan perintah shell lokal tanpa keluar dari sesi. sftp -b commands.txt user@SERVER_IP memutar ulang berkas berisi perintah-perintah ini untuk cron job.

Menyalin file dari Windows: scp di PowerShell dan WinSCP

Windows 10 (versi 1809 ke atas) dan Windows 11 menyertakan klien OpenSSH, jadi scp, sftp, dan ssh tersedia di PowerShell dengan flag yang sama seperti di Linux:

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

Kunci disimpan di C:\Users\you\.ssh\ bersama known_hosts, dan ssh-keygen -R SERVER_IP juga berfungsi di sana. Path relatif setelah cd menghindari kebingungan antara huruf drive dan nama host. rsync tidak disertakan; cara paling bersih untuk memakainya adalah lewat WSL: wsl rsync -avz /mnt/c/Users/you/site/ user@SERVER_IP:/var/www/site/.

Untuk antarmuka grafis, WinSCP adalah pilihan biasa: mendukung SFTP dan SCP, menyediakan tampilan dua panel dengan drag-and-drop, dan perintah Synchronize-nya kurang lebih melakukan apa yang dilakukan rsync --delete. WinSCP mengharapkan kunci dalam format .ppk milik PuTTY dan menawarkan konversi saat Anda memilih kunci OpenSSH. Untuk apa pun yang dideploy berulang kali, satu baris scp atau rsync di dalam skrip lebih mudah ditinjau dan diotomatiskan.

scp vs rsync vs sftp: mana yang dipakai

TugasAlat terbaikAlasan
Satu file, sekali sajascpPerintah terpendek, tanpa instalasi
Sebuah direktori, salinan pertamascp -r atau rsync -aHasilnya setara
Deploy atau backup berulangrsyncHanya data yang berubah yang dikirim
Mirror dengan penghapusanrsync --deletescp tidak bisa menghapus file
Melanjutkan file besarrsync -P atau reget di sftpscp mengulang dari nol
Menjelajah, lalu memilih filesftp atau WinSCPDaftar interaktif
Ribuan file kecilrsync atau tar lewat sshOverhead per file mendominasi scp
Windows tanpa WSLscp di PowerShell atau WinSCPTidak ada rsync bawaan

Patokan sederhana: scp bila perintahnya bisa Anda ketik dari ingatan, rsync begitu Anda tahu akan menjalankannya dua kali.

Tips kecepatan yang benar-benar terasa

  • Kompresi tidak gratis. -C (scp) dan -z (rsync) mengecilkan teks, dump SQL, dan log, tetapi memboroskan CPU pada arsip tarball, gambar, dan video. Jika top menunjukkan sshd mentok di 100% selama transfer, lepaskan flag itu.
  • Gabungkan banyak file kecil. Perjalanan bolak-balik per file mendominasi saat Anda mengirim pohon source code; satu aliran lebih cepat: tar czf - ./site | ssh user@SERVER_IP 'tar xzf - -C /var/www/'.
  • Coba cipher lain pada koneksi cepat. Ketika proses ssh sendiri yang menjadi hambatan, scp -c aes128-gcm@openssh.com memanfaatkan instruksi AES yang ada di hampir semua CPU modern.
  • Lindungi transfer panjang. Jalankan di dalam tmux atau screen agar sesi yang terputus tidak mematikan proses penyalinan, atau gunakan rsync -P lalu jalankan ulang.
  • Verifikasi dan batasi laju. sha256sum file di kedua sisi harus cocok; scp -l atau rsync --bwlimit menjaga agar backup tidak menghabiskan bandwidth aplikasi.

Izin, kepemilikan, dan error yang sering muncul

Permission denied pada path tujuan

scp: /var/www//html/: Permission denied berarti login berhasil tetapi user tersebut tidak bisa menulis di sana. Salin ke direktori home Anda lalu sudo mv filenya, berikan kepemilikan target kepada user (sudo chown -R user:user /var/www/site), atau pada rsync tambahkan --rsync-path="sudo rsync", yang berfungsi bila user login punya sudo tanpa password, seperti disiapkan di membuat user dengan hak sudo di Linux. Mengunggah sebagai root menghindari error itu tetapi meninggalkan file milik root yang tidak bisa ditulis web server: jalankan sudo chown -R www-data:www-data /var/www/site setelahnya.

Permission denied (publickey)

Server menolak autentikasi. Periksa nama user, paksa kuncinya dengan -i, tambahkan -v; di VPS, sudo journalctl -u ssh -n 30 menyebutkan alasannya.

Remote host identification has changed

Wajar setelah instalasi ulang atau perubahan IP: host key tidak lagi cocok dengan ~/.ssh/known_hosts. Jika Anda memang membangun ulang server, jalankan ssh-keygen -R SERVER_IP lalu sambung kembali. Jika tidak, cari tahu penyebabnya sebelum mengetikkan password di mana pun.

No such file or directory

scp tidak membuat direktori induk: jalankan ssh user@SERVER_IP 'mkdir -p /var/www/site' lebih dulu. rsync hanya membuat komponen direktori terakhir (--mkpath, rsync 3.2.3+, membuat direktori induk).

rsync: command not found, atau protocol data stream (code 12)

rsync tidak ada di salah satu sisi; jalankan sudo apt install rsync di sana lalu coba lagi.

Skrip yang diunggah tidak mau dijalankan

File yang berasal dari Windows tidak punya bit eksekusi dan sering membawa akhiran baris CRLF, yang menghasilkan bad interpreter: No such file or directory. Perbaiki keduanya dengan chmod +x deploy.sh dan sed -i 's/\r$//' deploy.sh; sisi shebang dibahas di apa itu file .sh dan bagaimana bash menjalankannya. Satu klasik terakhir: scp file.txt user@SERVER_IP tanpa titik dua setelah host adalah penyalinan lokal yang diam-diam membuat file bernama user@SERVER_IP.

Semua ini mengandaikan sebuah server yang Anda akses lewat SSH sebagai root atau user sudo, di mana batasnya adalah transfer itu sendiri, bukan kuota. VPS Linux dari rdp.monster adalah mesin semacam itu: akses root penuh, CPU dan RAM dedicated, bandwidth tanpa batas (fair-use), tanpa KYC, menerima kripto, mulai $8.99 per bulan, dan server online sekitar 10 detik setelah pembayaran dikonfirmasi, sehingga hal pertama yang Anda jalankan di atasnya bisa langsung berupa scp dari langkah pertama.

Pertanyaan yang sering ditanyakan

Apakah perintah scp sudah usang?

scp belum dihapus, tetapi sejak OpenSSH 9.0 transfernya berjalan lewat protokol SFTP karena protokol scp asli dinyatakan sudah usang.
Para pengembang OpenSSH menilai protokol scp/rcp asli sudah ketinggalan zaman dan sulit diamankan, dan sejak OpenSSH 9.0 (2022) perintah scp memindahkan file lewat SFTP. Perintah, flag, dan sintaks user@host:path-nya tidak berubah, jadi skrip yang ada tetap berfungsi; hanya ekspansi shell di dalam path remote yang berperilaku berbeda, dan -O mengembalikan protokol lama untuk server yang membutuhkannya. Untuk otomatisasi baru, rsync atau sftp lebih mumpuni, tetapi scp sendiri tetap layak untuk penyalinan sekali jalan.

Bisakah saya memakai scp dengan password alih-alih kunci SSH?

Bisa, jika server masih mengizinkan autentikasi password; scp akan meminta password persis seperti ssh.
scp memakai autentikasi apa pun yang akan dipakai ssh untuk host tersebut. Jika sshd disetel PasswordAuthentication yes, scp meminta password dan penyalinan berjalan; tidak ada flag untuk mengirim password lewat baris perintah, dan alat seperti sshpass yang melakukannya meninggalkan jejak di riwayat shell Anda. Server yang diperkuat biasanya menonaktifkan login password, sehingga scp gagal dengan Permission denied (publickey) sampai Anda memasang kunci dengan ssh-copy-id. Kunci juga yang memungkinkan skrip berjalan tanpa pengawasan.

Apakah scp menimpa file yang sudah ada tanpa bertanya?

Ya: scp dan rsync sama-sama mengganti file di tujuan secara diam-diam, jadi pratinjau dengan rsync --dry-run bila ragu.
scp menimpa file bernama sama di tujuan tanpa konfirmasi dan tanpa opsi untuk melewatinya. rsync juga menimpa, tetapi hanya bila sumbernya berbeda, dan memberi Anda kendali: -n (--dry-run) mencetak apa yang akan berubah, --ignore-existing membiarkan file yang sudah ada, --update melewati file yang lebih baru di tujuan, dan --backup --backup-dir=DIR menyimpan versi yang diganti. Untuk apa pun yang tak tergantikan, salin ke direktori baru lalu tukar setelahnya.

Bagaimana cara menyalin file langsung antara dua server VPS?

Jalankan rsync atau scp di salah satu server dengan tujuan server lain, atau pakai scp -3 untuk mengalirkan salinan lewat mesin Anda sendiri.
Rute tercepat adalah server ke server: masuk lewat ssh ke VPS sumber lalu jalankan rsync -avz /data/ user@OTHER_IP:/data/ (atau scp -r) agar data tidak melewati koneksi rumah Anda. Cara itu menuntut server pertama menyimpan kunci yang diterima server kedua. Jika Anda enggan menaruh kunci di server, scp -3 user@HOST_A:/path user@HOST_B:/path menyalin lewat mesin Anda memakai kredensial lokal saja, dengan konsekuensi semuanya diunduh lalu diunggah sekali.

Adrien Roche, Editor Infrastruktur & Hosting

Insinyur sistem yang sudah 10+ tahun mengelola server Windows Server dan Linux. Adrien mengurus dokumentasi infrastruktur rdp.monster dan menulis panduan kami tentang RDP, hosting VPS, administrasi server, jaringan, dan tool privasi.

Gabung program reseller kami

Data Anda

Jika Anda punya pertanyaan, klik di sini untuk menghubungi kami !
Nama(Wajib)
Masukkan alamat email Anda, pastikan Anda sudah punya akun di dashboard.rdp.monster !

Perusahaan Anda

Masukkan alamat situs web Anda jika ada
Ceritakan singkat cara Anda menjual layanan ke pelanggan. Misalnya, lewat obrolan di forum.

Bahkan monster pun suka cookie!

Kami memakai cookie agar penjelajahan Anda lebih nyaman, untuk menampilkan iklan atau konten yang dipersonalisasi, dan untuk menganalisis lalu lintas kami. Dengan mengklik “Terima”, Anda menyetujui penggunaan cookie oleh kami.