Perintah scp Linux: salin berkas lokal dan remote lewat SSH
Perintah scp menyalin berkas antara komputer lokal dan server melalui koneksi Secure Shell (SSH). Letakkan sumber lebih dahulu dan tujuan terakhir; lokasi remote biasanya ditulis sebagai pengguna@host:jalur, sehingga urutan argumen menentukan arah salinan.
Sejak OpenSSH 9.0, scp memakai SSH File Transfer Protocol (SFTP) secara bawaan untuk transfer. Nama program scp tidak berarti protokol SCP lama selalu dipakai. Perubahan bawaan dan perbedaan pengutipan dijelaskan dalam catatan rilis resmi OpenSSH 9.0.
Sintaks dan persiapan
scp [opsi] sumber tujuan
opsi, sumber, dan tujuan adalah penanda sintaks. Ganti akun, server, dan jalur contoh dengan nilai yang benar. Siapkan klien OpenSSH, berkas sumber yang dapat dibaca, akun server yang diizinkan, serta ruang dan izin tulis pada tujuan. Periksa versi dengan ssh -V dan opsi lokal melalui man scp.
Autentikasi dan verifikasi identitas server mengikuti SSH. Cocokkan sidik jari kunci host baru melalui jalur tepercaya; jangan menyetujui perubahan kunci tanpa konfirmasi. Panduan login dan pemeriksaan kunci host dengan ssh menjelaskan langkah itu. Server juga perlu menyediakan SFTP untuk transfer dengan protokol bawaan saat ini.
Periksa apakah berkas tujuan sudah ada sebelum menyalin. scp dapat menimpanya dan bukan sistem pencadangan dengan riwayat versi. Simpan salinan terpisah dari berkas penting sebelum penggantian yang disengaja.
Mengirim berkas lokal ke server
scp report.txt alice@server.example.com:/home/alice/
report.txt adalah sumber pada direktori kerja lokal. Tujuan menunjuk direktori /home/alice/ pada server.example.com, sehingga hasil yang diharapkan adalah /home/alice/report.txt. Pastikan direktori itu ada dan akun alice dapat menulis ke sana. Jika report.txt tidak ditemukan, periksa direktori kerja lokal atau gunakan jalur sumber yang tepat.
Tanda titik dua setelah nama host membedakan lokasi remote dari jalur lokal. Tanda garis miring awal pada /home/alice/ menyatakan jalur absolut server. Jalur relatif remote ditafsirkan dalam konteks direktori akun remote; jangan menganggapnya relatif terhadap direktori kerja komputer lokal.
Mengambil berkas server ke komputer lokal
scp alice@server.example.com:/home/alice/report.txt .
Argumen pertama sekarang adalah sumber remote. Titik terakhir berarti direktori kerja lokal saat menjalankan perintah, sehingga hasilnya adalah report.txt di direktori tersebut. Periksa direktori kerja dan berkas lokal yang mungkin tertimpa sebelum melanjutkan.
Ini adalah operasi salin: sumber tidak dimaksudkan untuk dihapus setelah transfer. Keberhasilan menyalin satu berkas juga tidak berarti seluruh direktori lokal dan remote telah disinkronkan. Bandingkan nama serta lokasi hasil dengan sumber yang benar.
Menyalin direktori beserta isinya
scp -r project/ alice@server.example.com:/home/alice/
Opsi -r menyalin direktori secara rekursif, termasuk subdirektori. Dalam contoh dengan direktori tujuan /home/alice/ yang sudah ada, periksa hasil pada /home/alice/project/. Hitung kebutuhan ruang dan pastikan Anda memang ingin mengirim semua isi project sebelum memulai.
scp mengikuti tautan simbolik yang ditemui selama penelusuran direktori. Karena itu, isi yang tersalin dapat melampaui berkas biasa yang terlihat pada tingkat pertama. Periksa tautan dan tujuan sebenarnya bila direktori berisi tautan. Jangan mengandalkan garis miring pada project/ untuk menerapkan aturan salin yang sama dengan alat lain seperti rsync.
Memastikan arah dan hasil transfer
scp report.txt user@server.example.test:/tmp/report.txt
Contoh ini mengirim report.txt lokal ke nama berkas /tmp/report.txt pada server lain sebagai user. server.example.test adalah alamat ilustrasi, bukan layanan transfer yang disediakan. Pastikan akun dan jalur aktual sesuai; /tmp bukan pilihan wajib untuk penyimpanan berkas kerja.
Setelah transfer, jalankan ssh user@server.example.test 'ls -lh /tmp/report.txt' dari terminal lokal untuk meminta pemeriksaan nama dan ukuran pada server. Pertahankan akun serta host yang sama dengan perintah salin. Jika memakai port khusus, sesuaikan pula port pada perintah SSH pemeriksaan.
scp dapat menampilkan kemajuan transfer atau selesai tanpa pesan sesuai pengaturan keluaran. Keluaran kosong sendiri belum cukup untuk menyimpulkan berhasil. Segera setelah scp selesai, periksa status keluar di shell; status 0 berarti utilitas melaporkan sukses, sedangkan nilai lebih besar dari 0 menunjukkan galat. Pada Bash, echo $? memeriksa status perintah terakhir, jadi jalankan sebelum perintah pemeriksaan lain menggantikannya.
Nama dan ukuran membantu menemukan salah jalur, tetapi ukuran yang sama belum membuktikan isi identik. Untuk berkas penting, bandingkan checksum dengan metode yang sama pada sumber dan tujuan serta pastikan sumber tidak berubah selama transfer. Jangan menghapus sumber hanya karena bilah kemajuan sempat mencapai angka tertentu.
Opsi penting dan perbedaan huruf besar
| Opsi | Fungsi dan catatan |
|---|---|
-r |
Menyalin direktori secara rekursif; mengikuti tautan simbolik. |
-P port |
Memilih port SSH tujuan. Huruf P harus besar. |
-i berkas_kunci |
Memilih berkas identitas untuk autentikasi kunci publik. |
-p |
Mempertahankan waktu modifikasi, waktu akses, dan bit mode berkas sesuai dukungan serta izin tujuan. |
-O |
Memilih protokol SCP lama bila ada kebutuhan kompatibilitas yang telah dipastikan. |
Untuk port 2222, tambahkan -P 2222 pada scp. Pada ssh, pilihan port menggunakan -p huruf kecil. Jangan menukar keduanya: -p pada scp tidak memilih port. Opsi pelestarian juga tidak berarti semua metadata, kepemilikan, atau atribut khusus sistem berkas pasti tersalin.
Kunci privat tetap disimpan pada sisi klien dan tidak dibagikan kepada penerima berkas. Pilihan -i tidak memberikan hak tulis tambahan pada server; autentikasi akun dan izin direktori adalah dua pemeriksaan yang berbeda.
Jalur khusus, galat, dan batas sinkronisasi
Nama lokal yang mengandung titik dua dapat disalahartikan sebagai penentu host. Nyatakan sebagai jalur lokal yang jelas, misalnya dengan awalan ./ untuk berkas pada direktori kerja. Nama yang mengandung spasi juga harus dikutip agar shell lokal tidak memecahnya menjadi beberapa argumen.
Protokol lama yang dipilih dengan -O melibatkan interpretasi shell remote, sehingga karakter khusus dan pola nama memerlukan perhatian tambahan. Jangan menambahkan -O untuk setiap kegagalan; periksa dulu dukungan SFTP, nama berkas, autentikasi, dan izin. Aturan pengutipan lama tidak dapat dipindahkan begitu saja ke mode SFTP.
Jika transfer terputus, periksa berkas tujuan sebelum menggunakannya; berkas dapat belum lengkap. scp bukan alat untuk melanjutkan otomatis semua transfer terputus atau menyamakan status penghapusan dua direktori. rsync dapat lebih sesuai untuk pekerjaan berulang, tetapi opsi pemilihan berkas dan penanganan transfer parsial tetap perlu disesuaikan dengan tujuan pekerjaan.
Untuk galat izin, periksa izin baca sumber dan izin tulis tujuan pada sisi yang benar. Jika koneksi ditolak atau timeout, periksa alamat, port, jalur jaringan, dan layanan SSH terlebih dahulu. Rincian opsi tersedia pada manual resmi scp OpenSSH.
FAQ
Apakah opsi port scp adalah -p?
Bukan. Gunakan -P huruf besar untuk port server. -p huruf kecil digunakan untuk mempertahankan waktu dan bit mode berkas.
Apakah scp selalu memakai protokol SCP lama?
Tidak. OpenSSH 9.0 dan yang lebih baru memakai SFTP secara bawaan. -O memilih protokol lama untuk kebutuhan kompatibilitas tertentu; periksa versi dan dukungan server sebelum memilihnya.




