curl dan wget memindahkan data, tetapi pekerjaan administrator jarang berhenti di situ: kita perlu masuk ke mesin jauh, menjalankan perintah di sana, dan menyalin berkas dua arah — semuanya lewat jaringan yang tidak boleh kita percaya. Itulah pekerjaan keluarga OpenSSH: ssh membuka shell jarak jauh yang terenkripsi, scp menyalin berkas di atas koneksi yang sama. Karena perintah-perintah ini butuh mesin tujuan dan daemon sshd yang tidak tersedia di lingkungan latihan kita, sesi nyatanya kita lihat lewat contoh tampilan, sementara berkas yang menjadi inti praktiknya — ~/.ssh/config, authorized_keys, dan permission-nya — kita bangun sungguhan dan periksa langsung.

Shell Jarak Jauh yang Terenkripsi #

SSH (Secure Shell) adalah protokol client-server: daemon sshd mendengarkan di port 22 pada mesin tujuan, dan klien ssh menyambung dari terminal kita. Seluruh percakapan — ketikan password, keluaran perintah, bahkan gerakan kursor — berjalan di dalam kanal terenkripsi, sehingga penyadap di jaringan hanya melihat trafik tersandi. Bentuk dasarnya:

bash
ssh [email protected]
ssh -p 2222 budi@server-kantor
ssh budi@server-kantor 'df -h /srv'

Baris pertama login sebagai user budi di mesin ber-IP 192.0.2.10. Baris kedua memakai port non-standar lewat -p. Baris ketiga menjalankan satu perintah tanpa shell interaktif — pola yang sering dipakai skrip — lalu langsung putus. Pada penyambungan pertama ke sebuah mesin, ssh menampilkan sidik jari (fingerprint) kunci host server dan meminta konfirmasi; sidik jari yang berubah pada mesin yang sudah dikenal adalah peringatan serius bahwa identitas di ujung sana mungkin bukan mesin yang lama.

Autentikasi: Password atau Kunci #

Ada dua cara masuk. Autentikasi password sederhana tetapi rapuh: bisa ditebak, dan setiap login mengirim ujian tebakan ke server. Autentikasi kunci membalik logikanya — server menyimpan salinan kunci publik kita di ~/.ssh/authorized_keys, sementara kunci privat tidak pernah meninggalkan laptop; untuk setiap login, klien membuktikan kepemilikan kunci privat lewat tanda tangan matematis tanpa pernah mengirim isinya. Pasangan kunci dibuat dengan ssh-keygen, dan algoritma yang dianjurkan hari ini adalah ed25519 — berikut contoh tampilan sesinya:

console
$ ssh-keygen -t ed25519 -C "budi@laptop-budi"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/budi/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/budi/.ssh/id_ed25519
Your public key has been saved in /home/budi/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:Qw9mZx7cVb2nLk4Jh8RsT1uYp3aD6fG0hJ5kE2wQ1uI budi@laptop-budi

Dua berkas lahir dari perintah itu: id_ed25519 adalah kunci privat (jangan dibagikan), id_ed25519.pub adalah kunci publik (boleh ditempel di mana saja). Baris Enter passphrase opsional — mengisinya membuat kunci terkunci dan butuh frasa itu setiap dipakai. Menanam kunci publik ke server cukup satu perintah ssh-copy-id budi@server-kantor, yang isinya memindahkan satu baris berkas .pub ke ujung berkas ~/.ssh/authorized_keys milik user tujuan. Kita bisa melihat wujud akhirnya dan aturan permission-nya dengan membangun berkas yang sama di sandbox:

bash
mkdir -p ~/.ssh
printf 'ssh-ed25519 CONTOH_ISI_KUNCI_PUBLIK budi@laptop-budi\n' > ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
stat -c '%a %n' ~/.ssh ~/.ssh/authorized_keys

Output yang Dihasilkan:

text
700 /home/budi/.ssh
600 /home/budi/.ssh/authorized_keys

Angka 700 dan 600 bukan gaya-gayaan: sshd menolak kunci dari berkas yang bisa ditulis grup atau orang lain, jadi permission yang longgar membuat autentikasi kunci diam-diam gagal — penyebab kebingungan klasik setelah ssh-copy-id.

Menyalin Berkas dengan scp #

scp menyalin berkas dengan sintaks sumber tujuan, dan salah satunya boleh berada di mesin jauh dengan format user@host:path. Arahnya ditentukan urutan: berkas lokal di depan berarti mengunggah, di belakang berarti mengunduh. Berikut contoh tampilan pengunggahan:

console
$ scp laporan.pdf budi@server-kantor:/srv/backup/
laporan.pdf                100%  512KB   2.4MB/s   00:00

Tiga pola yang perlu diingat: scp laporan.pdf budi@server-kantor:/srv/backup/ mengunggah, scp budi@server-kantor:/var/log/app.log ./ mengunduh, dan -r menyalin direktori beserta isinya secara rekursif. Untuk sesi yang lebih dari sekadar satu berkas, sftp membuka mode interaktif — ls dan cd berjalan-jalan di sisi jauh, put berkas mengunggah, get berkas mengunduh, quit keluar — lengkap dengan completion seperti shell biasa.

Config per-Host di ~/.ssh/config #

Mengetik ssh -p 2222 [email protected] berulang kali itu undangan salah ketik. SSH punya jawaban yang rapi: berkas ~/.ssh/config memberi nama panggilan untuk setiap mesin, dan semua opsi — user, port, berkas kunci, bahkan lompatan lewat mesin perantara — menempel pada nama itu. Kita bangun berkasnya sungguhan:

bash
mkdir -p ~/.ssh
cat > ~/.ssh/config <<'EOF'
Host server-kantor
    HostName 192.0.2.10
    User budi
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host backup
    HostName 198.51.100.20
    User siti
    IdentityFile ~/.ssh/id_backup
    ProxyJump server-kantor
EOF
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
cat ~/.ssh/config

Output yang Dihasilkan:

text
Host server-kantor
    HostName 192.0.2.10
    User budi
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host backup
    HostName 198.51.100.20
    User siti
    IdentityFile ~/.ssh/id_backup
    ProxyJump server-kantor

Mari kita bedah baris demi baris:

  1. Host server-kantor: nama panggilan yang kita ketik — sejak baris ini, ssh server-kantor cukup untuk masuk.
  2. HostName 192.0.2.10: alamat asli mesin; nama panggilan dipetakan ke sini.
  3. User budi dan Port 2222: user dan port dipatok sehingga tidak perlu ditulis di baris perintah.
  4. IdentityFile ~/.ssh/id_ed25519: kunci privat khusus untuk mesin ini — berguna saat kita punya banyak kunci untuk banyak tujuan.
  5. Host backup: blok kedua untuk mesin lain, menunjukkan bahwa satu berkas menampung banyak mesin.
  6. ProxyJump server-kantor: koneksi ke backup diarahkan menembus server-kantor sebagai bastion — pola umum bila mesin internal hanya bisa dijangkau dari satu pintu.

Setelah berkas ini hidup, scp laporan.pdf server-kantor:/srv/backup/ pun ikut memakai seluruh pengaturan itu — scp membaca berkas yang sama. Opsi -F bisa menunjuk berkas config alternatif untuk menguji tanpa mengubah yang asli.

ssh-agent dan Praktik Aman #

Kunci privat yang dipasangi passphrase secara default menanyakan frasa itu setiap dipakai. ssh-agent adalah layanan kecil sesi kita yang menyimpan kunci yang sudah dibuka di memori; ssh-add ~/.ssh/id_ed25519 memasukkan kunci ke agen (sekali saja memasukkan frasanya), dan semua koneksi berikutnya — termasuk scp — mengambilnya dari sana. Prinsipnya tetap sama: kunci terbuka hanya di memori, tidak pernah tertulis ke disk dalam bentuk terbuka.

ssh mengenkripsi satu sesi antara dua mesin yang saling mengenali. Bab berikutnya memperbesar gambarnya: bagaimana bila yang perlu terenkripsi adalah hubungan dua jaringan penuh — kantor dengan kantor, laptop dengan intranet kantor? Selamat datang di VPN.

Referensi lanjut: halaman manual ssh(1) untuk opsi klien, ssh_config(5) untuk seluruh kata kunci berkas config, serta scp(1) untuk opsi penyalinan berkas.