Pada episode ini kita akan mengamankan kredensial: menjaga password dan token dari shell history, process list, dan log, memanfaatkan prompt interaktif, netrc, dan environment variable, serta menerapkan praktik terbaik rotasi token dan audit request.

Di episode 12 kalian mengamankan jalurnya — TLS memastikan request sampai ke server yang benar tanpa bisa dibaca di tengah jalan. Tapi ada celah yang tidak bisa ditutup oleh enkripsi: kredensial yang bocor di sisi kalian sendiri. Password yang tertulis di command line, token yang tersimpan di shell history, atau secret yang tercetak di log CI — semua itu membuat TLS yang sempurna menjadi sia-sia. Seperti brankas dengan pintu baja tapi kuncinya digantung di gagang pintu.
Episode 13 ini adalah tentang secrets handling: ke mana rahasia tidak boleh pergi, ke mana ia harus pergi, dan kebiasaan apa yang membuat kredensial tetap hidup di tempat yang benar.
Sebelum mempelajari solusi, kalian harus tahu musuhnya. Ada empat tempat klasik tempat kredensial bocor:
~/.bash_history atau ~/.zsh_history merekam setiap perintah yang diketik, termasuk password yang menempel di argumen.ps selama proses itu berjalan. Bukan hanya riwayat shell..curlrc atau file lain yang masuk ke git adalah bom waktu bagi seluruh tim.# JANGAN lakukan ini — password muncul di ps dan shell history
curl -u arman:sandirahasia https://api.example.com/meMasalahnya bukan pada curl — curl hanya melakukan apa yang diminta. Masalahnya adalah kalian menaruh rahasia di tempat yang dirancang untuk publik. Solusinya selalu sama: pisahkan kredensial dari perintah.
-u Tanpa PasswordCara paling sederhana untuk menjauhkan password dari command line adalah dengan tidak menuliskannya. Jika kalian memberi -u nama pengguna tanpa titik dua dan password, curl memintanya secara interaktif dengan prompt yang tidak menampilkan ketikan:
curl -u arman https://api.example.com/meEnter host password for user 'arman':Ketik password-nya, dan perintah itu tidak akan pernah terekam di history maupun muncul di ps. Pola ini sempurna untuk sesi manual di mesin bersama — tapi untuk skrip otomatis, ada cara yang lebih tepat.
Tip
Pastikan prompt ini tidak dipicu di tengah skrip tanpa pengawasan — jika stdin bukan terminal, curl akan gagal dengan error daripada menggantung. Untuk otomasi penuh, gunakan netrc atau environment variable di bawah, bukan prompt interaktif.
.netrc dan --netrcUntuk otomasi berbasis password, curl punya mekanisme klasik: file .netrc — sebuah file yang menyimpan pasangan host dan kredensial, dibaca curl hanya saat diminta. Strukturnya sederhana:
machine api.example.com
login arman
password sandirahasia
machine staging.example.com
login arman
password sandi-lainUntuk memakainya, panggil --netrc (membaca ~/.netrc default) atau --netrc-file untuk file khusus:
curl --netrc-file ~/.api-netrc https://api.example.com/meKelebihannya: tidak ada kredensial di command line, curl memilih pasangan yang tepat berdasarkan host, dan file bisa dirotasi tanpa menyentuh skrip. Netrc adalah jawaban untuk "skrip cron yang membutuhkan password tanpa interaksi manusia".
Important
File .netrc menyimpan password dalam teks polos. Wajib dikunci: chmod 600 ~/.api-netrc agar hanya pemiliknya yang bisa membaca. Jangan pernah meng-commit file ini ke git — dan jika memungkinkan, bangun isinya dari secret manager saat deploy, bukan menyimpannya sebagai file statis.
Untuk token — bukan password — cara paling umum di dunia modern adalah environment variable. Variabel tidak pernah muncul di ps (hanya argumen yang terlihat), dan nilai bisa disuntikkan dari luar tanpa menyentuh kode:
curl --oauth2-bearer "$API_TOKEN" https://api.example.com/mecurl -u "$API_USER:$API_PASS" https://api.example.com/meDi pipeline CI, nilai-nilai ini berasal dari secret store platform — GitHub Actions menaruhnya di Settings > Secrets, GitLab CI di Settings > CI/CD > Variables. Skrip kalian tetap bersih; rahasia mengalir lewat environment. Untuk lingkungan yang lebih ketat, naikkan level ke secret manager seperti HashiCorp Vault atau AWS Secrets Manager, yang bisa memutar kunci dan mencatat akses — dipanggil saat runtime, bukan disalin ke file.
Warning
Perhatikan satu jebakan: menulis curl -u user:pass di dalam script tetap menaruh password di argumen proses — aman dari history, tapi masih terlihat oleh ps. Selalu baca dari environment: curl -u "$USER:$PASS" bukan curl -u user:rahasia. Rahasia hanya boleh hidup di environment dan file berizin ketat.
Token adalah kredensial baru dunia API, dan token paling sering bocor lewat kecerobohan yang sama: menempelkannya langsung di command. Perintah seperti curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." akan terekam utuh di shell history — dan siapapun yang membaca history kalian (atau file .bash_history yang bocor) mendapat akses penuh.
Kebiasaan yang benar:
export API_TOKEN=eyJhbGciOiJIUzI1NiJ9... lalu pakai $API_TOKEN di perintah.--oauth2-bearer (dari episode 10) agar header tersusun otomatis dari variabel.# Token dari environment, bukan dari ketikan langsung
curl --oauth2-bearer "$API_TOKEN" https://api.example.com/me--trace Hanya untuk DebuggingPada episode 9 dan 18 kalian mengenal --trace dan --trace-ascii — rekaman byte-demi-byte yang sangat berguna saat debugging. Tapi ingat: trace merekam segalanya, termasuk header Authorization, cookie, dan body. Sebuah file trace adalah kumpulan rahasia yang siap dibaca siapa saja.
# Trace menangkap header Authorization dan cookie — jangan di-commit
curl --trace-ascii trace.txt --oauth2-bearer "$API_TOKEN" \
https://api.example.com/meKebijakan yang sehat: aktifkan --trace hanya saat masalah benar-benar perlu dibedah, hapus file segera setelah selesai, dan jangan pernah menaruh trace di git atau log yang bisa dibaca orang lain. Jika harus berbagi trace untuk laporan bug, redaksi dulu token dan cookie — atau cukup gunakan -v yang lebih ringkas untuk kasus ringan.
Semua teknik di atas adalah perangkat; berikut kebijakan yang mengikatnya menjadi satu cara kerja:
Warning
Satu rahasia yang pernah bocor dianggap bocor selamanya. Setelah token terlanjur tertulis di history, log, atau PR, jangan mencoba menghapusnya diam-diam — segera rotasi token tersebut. Proses rotasi adalah bagian normal dari operasional, bukan tanda kegagalan.
Episode 13 melengkapi kalian dengan disiplin pengelolaan rahasia: mengenali empat tempat kebocoran (shell history, process list, log CI, file yang di-commit), memakai prompt interaktif dengan -u tanpa password, mengotomatiskan autentikasi dengan .netrc dan --netrc-file, memisahkan token ke environment variable dan secret manager, membatasi penggunaan --trace untuk debugging saja, serta menerapkan praktik rotasi token dan least privilege.
Inti yang perlu diingat: rahasia bukan soal tidak terlihat, tapi soal tidak pernah ditempatkan di tempat yang salah. Transport yang aman tidak berguna jika kuncinya digantung di depan pintu. Default curl sudah aman; tugas kalian adalah tidak merusaknya demi kenyamanan mengetik.
Di episode 14 berikutnya kita akan berpindah dari keamanan ke kecepatan: protokol modern — HTTP/2 dan HTTP/3 dengan multiplexing-nya, serta WebSocket untuk komunikasi real-time. Sampai jumpa!