Cara Aman Menjalankan Claude Code di Server
Claude Code dapat menjalankan perintah sebagai user Anda. Pahami dampak flag skip permissions dan batasi risikonya dengan sandbox, container, atau VPS sementara.
Makna menjalankan Claude Code dengan aman di server
Untuk menjalankan Claude Code dengan aman di server, tetap aktifkan permintaan izin, jalankan Claude Code sebagai pengguna khusus tanpa hak istimewa, dan berikan batasan nyata untuk eksekusi tanpa pengawasan, bukan hanya mengandalkan kepercayaan: gunakan sandbox bawaan, container, atau VPS sementara yang tidak menyimpan data penting. Flag --dangerously-skip-permissions menghapus langkah persetujuan antara model dan shell Anda. Pertukaran ini dapat diterima untuk pekerjaan tanpa pengawasan, tetapi hanya di dalam batasan yang membatasi dampak satu perintah berbahaya. Panduan ini menjelaskan perubahan yang sebenarnya dilakukan flag tersebut dan cara membangun batasan itu dalam beberapa tingkat isolasi yang semakin kuat.
Kemampuan Claude Code pada server Anda
Claude Code adalah agen pemrograman yang berjalan di terminal. Agen ini membaca file, menulis file, dan menjalankan perintah shell sebagai user yang memulainya. Itulah fungsi utama tool ini: Claude Code dapat melakukan clone repository, mengedit kode, menjalankan pengujian, membaca kegagalan, lalu memperbaiki kode secara berulang tanpa Anda mengetik setiap perintah. Jika Anda belum menyiapkannya di server, menjalankan Claude Code pada VPS dengan tmux menjelaskan instalasi dan pengelolaan sesi. Halaman ini membahas hak akses yang Anda berikan setelah Claude Code tersedia.
Risikonya terlihat jelas jika kalimat yang sama dibaca kembali. Proses yang menjalankan perintah shell sebagai user Anda dapat melakukan apa pun yang dapat dilakukan user tersebut. Proses itu dapat membaca ~/.ssh/id_ed25519, ~/.aws/credentials, dan setiap file .env yang dapat dibuka oleh user Anda. Proses itu dapat menjalankan curl dan mengirim data ke host mana pun yang dapat dijangkau server. Proses itu dapat menjalankan git push --force. Agen tidak memiliki motif sendiri. Risikonya adalah tugas berjalan keliru, atau teks yang dibaca selama proses kerja berisi instruksi yang ditulis orang lain, seperti halaman web yang diambil atau komentar dalam issue yang diminta untuk diperbaiki. Kasus kedua ini disebut prompt injection. Karena itu, anggapan bahwa "model biasanya masuk akal" bukanlah rencana keamanan. Instruksi juga dapat berasal dari lingkungan yang lebih dekat, karena dua sesi Claude Code pada server yang sama dapat saling mengirim teks, dan pesan dari sesi lain hanyalah teks tambahan yang dibaca oleh agen penerima. Rencanakan untuk menghadapi eksekusi yang buruk, bukan eksekusi rata-rata.
Sistem izin dalam bahasa sederhana
Secara default, Claude Code meminta persetujuan sebelum bertindak. Pembacaan file di dalam project berlangsung tanpa pemberitahuan, tetapi saat mengedit file atau menjalankan perintah shell, Claude Code terlebih dahulu menampilkan edit atau perintah secara persis lalu menunggu jawaban ya. Anda dapat menyetujui satu tindakan, atau menyetujui jenis tindakan tersebut selama sisa sesi. Persetujuan ini hanya berlaku untuk sesi tersebut: setelah Anda keluar dari CLI, sesi berikutnya kembali dimulai dalam mode berhati-hati. Untuk aturan yang ingin dipertahankan, file settings menyimpan daftar allow, ask, dan deny yang berlaku secara permanen. Contoh: izinkan git status, minta persetujuan untuk git push, dan tolak pembacaan .env. Aturan deny selalu memiliki prioritas tertinggi. Dasar perilaku ini juga akan berubah karena auto mode menjadi default pada 14 August 2026. Karena itu, pahami apa yang sebenarnya diizinkan oleh setiap mode izin sebelum menentukan mode yang akan dijalankan pada server yang tidak dapat Anda pantau.
Desain ini mengasumsikan ada manusia yang memantau terminal. Pada laptop, asumsi tersebut biasanya benar. Pada server, sering kali tidak ada yang memantau. Anda memulai tugas panjang di dalam tmux lalu pergi tidur. Jika agent berhenti untuk mengajukan pertanyaan pada pukul 2 a.m., tidak ada kemajuan hingga pagi. Jeda ini membuang biaya selain waktu karena sesi Claude Code yang menganggur kehilangan warm prompt cache dan giliran berikutnya harus membayar biaya untuk membangunnya kembali. Itulah alasan sebenarnya orang menggunakan skip flag pada server. Masalah yang diselesaikannya juga nyata. Bagian selanjutnya membahas cara mengatasinya tanpa menghapus semua guardrail.
Perubahan yang dilakukan oleh --dangerously-skip-permissions
claude --dangerously-skip-permissions menonaktifkan tahap persetujuan. Pengeditan berlangsung tanpa prompt. Perintah shell berjalan tanpa prompt. Pemeriksaan protected path yang biasanya melindungi lokasi sensitif juga dilewati. Aturan penolakan eksplisit Anda tetap berlaku, dan beberapa tindakan ekstrem masih berhenti untuk meminta persetujuan. Namun, ringkasan sederhananya adalah: apa pun yang diputuskan model untuk dijalankan, akan dijalankan.
Ada 2 fakta tentang flag ini yang penting di server. Pertama, flag ini diblokir ketika Claude Code berjalan sebagai root atau melalui sudo di Linux dan macOS, karena root tanpa prompt dapat mengubah file atau service apa pun pada mesin. Agent tetap memerlukan akun nonprivileged sendiri, dan flag ini memastikan hal tersebut. Kedua, flag ini tidak mengubah perilaku model dengan cara apa pun. Flag ini menghapus manusia dari proses dan tidak mengubah hal lainnya. Akibatnya, setiap kesalahan yang sebelumnya dapat dihentikan oleh prompt kini akan langsung dijalankan.
Jadi, berikut perhitungannya secara jujur. Jika Anda melewati izin, pertanyaan keamanannya berubah dari "apakah agent akan melakukan sesuatu yang buruk" menjadi "seberapa besar kerusakan yang dapat ditimbulkan oleh satu tindakan yang keliru". Anda tidak lagi berusaha mengendalikan setiap keputusan. Anda mulai mengendalikan radius dampaknya. Jawabannya adalah containment, dan penerapannya dilakukan secara bertahap.
Sandbox bawaan Claude Code
Sebelum mengikuti tingkatannya, ketahui bahwa Claude Code kini menyediakan sandbox tingkat OS untuk perintah yang dijalankannya. Fitur ini menghilangkan sebagian besar alasan orang menggunakan flag skip. Di Linux, fitur ini menggunakan bubblewrap untuk mengisolasi filesystem, serta socat untuk merutekan trafik jaringan melalui proxy. Di dalam sandbox, perintah hanya dapat menulis ke direktori project dan direktori temp sesi. Perintah hanya dapat mengakses jaringan melalui proxy yang memeriksa setiap domain berdasarkan allow list. Saat pertama kali suatu perintah ingin mengakses domain baru, Claude Code akan meminta konfirmasi kepada Anda.
Aktifkan fitur ini dengan perintah /sandbox di dalam sesi. Pada Ubuntu dan Debian, instal dua package yang dibutuhkan terlebih dahulu:
sudo apt install bubblewrap socatPada Ubuntu 24.04 dan versi setelahnya, kebijakan AppArmor default mencegah bubblewrap membuat user namespace yang dibutuhkannya. Panel sandbox memberi tahu Anda jika ada komponen yang belum tersedia. Dokumentasi sandboxing Claude Code menyediakan profil AppArmor singkat untuk memperbaikinya.
Sandbox memiliki mode auto-allow. Perintah dalam sandbox berjalan tanpa prompt karena batasan yang diterapkan kini menjalankan fungsi yang sebelumnya dilakukan oleh prompt. Perintah yang tidak dapat berjalan di dalam sandbox akan kembali ke alur permission normal. Dengan demikian, tindakan yang benar-benar tidak biasa tetap meminta konfirmasi. Untuk sebagian besar workflow server, ini adalah pengganti yang tepat untuk flag skip karena Anda mendapatkan jauh lebih sedikit pertanyaan dengan batasan yang diterapkan oleh OS, bukan tanpa batasan sama sekali.
Pahami batasannya. Secara default, perintah dalam sandbox masih dapat membaca sebagian besar filesystem, termasuk file credential, kecuali Anda menolak akses ke path tersebut. Setting sandbox.credentials tersedia khusus untuk tujuan itu. Proxy jaringan memeriksa nama domain, tetapi tidak memeriksa trafik itu sendiri. Karena itu, allow yang terlalu luas seperti github.com masih memungkinkan data dikeluarkan. Docker tidak dapat berjalan di dalamnya. Sandbox meningkatkan tingkat keamanan secara signifikan. Namun, sandbox bukan batas isolasi yang lengkap. Karena itu, tingkatan di bawah ini tetap penting.
Tangga isolasi
Tiga tingkat, dengan isolasi yang semakin kuat. Pilih tingkat terendah yang sesuai dengan layanan lain yang berjalan pada server tersebut.
Tingkat 1: pengguna khusus tanpa hak istimewa. Agent memperoleh akun sendiri, direktori home sendiri, direktori project sendiri, dan tidak memiliki akses sudo:
sudo adduser --disabled-password --gecos "" agentBatas akun mencegah agent mengakses file Anda: kunci SSH dan semua project lain pada mesin tersebut. Batas ini juga membuat flag skip dapat digunakan, karena flag tersebut menolak eksekusi sebagai root. Prinsipnya sama dengan menjalankan setiap service sebagai pengguna tanpa hak istimewa, tetapi diterapkan pada agent. Hal yang tidak dibatasi oleh tingkat 1 adalah jaringan dan semua hal pada server yang dapat dibaca oleh semua pengguna.
Tingkat 2: container. Anthropic menyediakan devcontainer referensi yang menjalankan Claude Code sebagai pengguna non-root, dengan aturan firewall yang membatasi host yang dapat dijangkau agent. Container yang Anda buat sendiri juga menjalankan fungsi yang sama. Sistem file dibatasi pada volume yang Anda mount, sedangkan koneksi keluar dibatasi oleh aturan container. Ini adalah tingkat menengah yang tepat ketika server juga menjalankan service lain yang penting bagi Anda. Batasnya adalah container menggunakan kernel host yang sama, dan satu mount yang tidak cermat dapat menghilangkan batas tersebut; berikan /var/run/docker.sock kepada container dan container itu dapat menjangkau seluruh host.
Tingkat 3: VPS khusus. Tingkat terkuat adalah pendekatan yang paling sederhana: berikan seluruh mesin kepada agent, dan jangan simpan apa pun yang penting bagi Anda di mesin tersebut. VPS kecil berbiaya beberapa dolar per bulan. Siapkan VPS dengan runbook sepuluh menit pertama pada VPS baru, buat snapshot dari kondisi bersih tersebut, lalu biarkan agent bekerja. Tidak ada layanan lain di sana. Tidak ada kunci SSH pribadi, hanya deploy key yang dibatasi untuk satu repository. Tidak ada kredensial cloud dan tidak ada data production. Jika eksekusi bermasalah, atau jika Anda hanya ingin memulai dari kondisi bersih, pulihkan snapshot atau hapus dan bangun ulang server dalam hitungan menit. Dampaknya terbatas pada biaya sewa VPS. Pada setup ini, --dangerously-skip-permissions tidak lagi menakutkan, karena hasil terburuk yang realistis adalah server yang dibangun ulang dan satu token yang dicabut.
Tingkat-tingkat ini dapat digabungkan. Agent yang berjalan dalam sandbox sebagai pengguna tanpa hak istimewa pada VPS yang dapat dibuang hampir tidak menambah biaya, tetapi membuat skenario kegagalan menjadi sederhana. Kesederhanaan adalah tujuannya.
Lindungi kredensial
Aturan yang menjadi dasar semuanya: user agent tidak boleh dapat membaca secret yang dimiliki komponen lain.
Berikan API key hanya kepada agent. Simpan key tersebut dalam file milik user agent dengan mode 600, lalu muat file itu saat shell dimulai:
install -m 600 /dev/null /home/agent/claude.env
echo 'export ANTHROPIC_API_KEY=your-key-here' >> /home/agent/claude.env
echo 'source ~/claude.env' >> /home/agent/.bashrcKemudian tutup akses dari arah lain. Pada Debian dan Ubuntu, home directory sering dibuat agar dapat dibaca oleh semua user di server. Karena itu, perketat izin home directory Anda sendiri: chmod 750 /home/youruser. Periksa dengan ls -ld /home/* dan perbaiki apa pun yang dapat dicantumkan oleh akun agent.
Batasi setiap token sesuai cakupannya. GitHub token dengan cakupan terperinci yang dibatasi ke satu repository, atau deploy key khusus per repository, berarti kredensial yang bocor hanya membahayakan satu project, bukan seluruh akun Anda. Jika menggunakan sandbox, tambahkan pengaturan kredensialnya agar ~/.ssh dan ~/.aws ditolak, termasuk untuk operasi baca. Jangan simpan kredensial production di server tersebut, karena agent tidak dapat membocorkan secret yang tidak pernah ada di sana. Jika secret tersebut disimpan dalam password manager yang di-host sendiri, letakkan password manager itu di server yang berbeda dari agent dan lakukan peninjauan khusus, karena titik lemah Vaultwarden adalah admin token dan file backup, bukan encrypted vault itu sendiri.
Git adalah jaring pengaman
Setiap perubahan yang dibuat agent harus dapat ditinjau dan dikembalikan, dan git menyediakan keduanya secara gratis jika agent bekerja pada sebuah branch:
git switch -c agent/refactor-authTinjau hasil eksekusi dengan git diff main...agent/refactor-auth, gabungkan perubahan yang baik, lalu hapus branch jika tidak menghasilkan apa-apa. Eksekusi yang hanya mengubah tiga file jauh lebih mudah dibaca saat sarapan daripada eksekusi yang menulis ulang separuh modul. Inilah alasan praktis untuk menggunakan skill yang membatasi agent pada perubahan terkecil yang dapat berfungsi. Lindungi branch utama pada forge, sehingga token agent tidak dapat melakukan push ke sana dan tidak dapat melakukan force-push di mana pun. Riwayat commit juga berfungsi sebagai log audit tentang apa yang terjadi saat Anda tidur. Nilainya lebih besar daripada scrollback terminal sebanyak apa pun.
Jaringan termasuk dalam cakupan dampak
Agent dapat menjalankan curl. Kalimat ini menjelaskan seluruh masalah egress: apa pun yang dapat dibaca agent juga dapat dikirimkannya ke tempat lain, dan agent yang disisipi prompt mungkin melakukan hal tersebut. User biasa tanpa hak istimewa sama sekali tidak membatasi hal ini, karena user mana pun dapat mengakses semua yang dapat diakses server. Sandbox membatasinya berdasarkan domain melalui proxy. Container dapat membatasinya dengan aturan firewall sendiri. VPS khusus membatasi terlebih dahulu data yang dapat bocor. Dari ketiganya, ini adalah pendekatan yang paling tangguh.
Jangan mencoba mengatasi egress hanya dengan ufw. ufw secara default mengizinkan semua trafik keluar. Menulis aturan keluar yang tetap mengizinkan apt, npm, git, dan Claude API juga rumit serta dapat gagal tanpa terlihat. Pilih batasan pada tingkat sandbox, container, atau mesin. Pada tingkat tersebut, daftar izin domain atau mesin khusus dapat menjalankan fungsi yang sama dengan jelas.
Jika Anda membuat agent sendiri dengan API dan bukan menjalankan Claude Code, prinsip yang sama tetap berlaku. Membuat agent AI dengan Claude pada VPS membahas pendekatan tersebut. Agent itu juga memerlukan user khusus, token dengan cakupan terbatas, dan mesin yang dapat dibuang setelah digunakan.
Perkuat server terlebih dahulu
Apa pun tingkat yang Anda pilih, mesin itu sendiri tetap memerlukan pengaturan dasar sebelum agent dipasang: hanya gunakan kunci SSH, nonaktifkan login root, terapkan firewall dengan kebijakan default-deny, dan aktifkan pembaruan keamanan otomatis. Buat daftar periksa Anda di sini, lalu ikuti seluruh langkahnya satu kali:
FAQ
Apakah --dangerously-skip-permissions aman digunakan di server?
Tidak jika digunakan begitu saja. Flag ini menghapus semua permintaan persetujuan, sehingga perintah buruk pertama akan dijalankan segera setelah dihasilkan oleh model. Penggunaannya dapat dipertimbangkan jika dampaknya dibatasi: setidaknya gunakan dedicated unprivileged user, dan untuk pekerjaan yang benar-benar tanpa pengawasan gunakan container atau VPS sementara yang hanya berisi satu proyek dan satu token dengan cakupan terbatas. Jangan pernah menggunakannya pada mesin yang menyimpan kredensial produksi atau data yang tidak boleh hilang.
Apakah Claude Code memiliki sandbox?
Ya. Claude Code menyediakan sandbox bawaan untuk perintah shell, yang dibuka dengan perintah /sandbox. Sandbox ini menggunakan bubblewrap di Linux dan Seatbelt di macOS, membatasi penulisan ke direktori proyek, serta mengarahkan akses jaringan melalui proxy yang hanya mengizinkan domain yang disetujui. Mode auto-allow menjalankan perintah dalam sandbox tanpa meminta persetujuan. Dengan demikian, interupsi berkurang seperti pada skip flag, tetapi batas yang diberlakukan oleh sistem operasi tetap ada. Sandbox ini bukan batas isolasi yang lengkap. Untuk eksekusi tanpa pengawasan, padukan dengan dedicated user atau dedicated machine.
Mengapa skip flag menolak berjalan sebagai root?
Karena root tanpa permintaan persetujuan dapat mengubah file dan service apa pun di sistem, Claude Code memblokir --dangerously-skip-permissions saat berjalan sebagai root atau melalui sudo di Linux dan macOS. Solusinya bukan mengakali pemeriksaan tersebut. Buat unprivileged user untuk agent, lalu jalankan agent sebagai pengguna tersebut. Batas akun itu merupakan lapisan containment pertama dan paling murah.
Dapatkah Claude Code membaca SSH key dan file .env saya?
Claude Code dapat membaca apa pun yang dapat dibaca oleh pengguna yang menjalankannya. Bahkan, kebijakan default sandbox mengizinkan pembacaan pada path kredensial sampai Anda menolaknya. Karena itu, jalankan agent sebagai pengguna khusus, atur home directory Anda sendiri ke mode 750 atau lebih ketat, tolak path kredensial dalam pengaturan sandbox, dan jangan simpan secret produksi di mesin tersebut. Secret yang tidak pernah disimpan di mesin tidak dapat dibaca atau dibocorkan.
Apa cara paling aman untuk menjalankan Claude Code tanpa pengawasan?
Gunakan dedicated VPS murah yang hanya dipakai untuk pekerjaan agent. Keraskan konfigurasinya dalam sepuluh menit, buat snapshot dalam kondisi bersih, lalu jalankan Claude Code sebagai unprivileged user dengan sandbox aktif, file mode-600 untuk menyimpan API key, dan deploy key khusus untuk setiap repository. Lakukan semua pekerjaan pada branch yang Anda tinjau sebelum merge. Jika eksekusi bermasalah, Anda cukup mencabut satu token dan memulihkan snapshot. Tidak ada aset lain yang Anda miliki yang terdampak.