SSD Nodes Learn
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-07-24

Cara aman menjalankan Claude Code di server

Claude Code dapat menjalankan perintah shell apa pun. Pelajari cara menggunakan flag skip permissions dan isolasi sandbox atau VPS agar sistem tetap aman.

Apa artinya menjalankan Claude Code dengan aman di server

Untuk menjalankan Claude Code dengan aman di server, biarkan perintah izin tetap aktif, jalankan sebagai pengguna tanpa hak istimewa (unprivileged user) khusus, dan berikan batasan nyata untuk eksekusi tanpa pengawasan alih-alih hanya mengandalkan kepercayaan: gunakan sandbox bawaan, container, atau VPS sekali pakai yang tidak menyimpan data penting Anda. Flag --dangerously-skip-permissions menghapus langkah persetujuan antara model dan shell Anda. Pertukaran ini masuk akal untuk pekerjaan tanpa pengawasan, tetapi hanya di dalam batasan yang membatasi jangkauan satu perintah berbahaya. Panduan ini menjelaskan apa yang sebenarnya diubah oleh flag tersebut, dan cara membangun batasan tersebut dalam tingkatan isolasi yang meningkat.

Apa yang dapat dilakukan Claude Code pada sistem Anda

Claude Code adalah agen pengodean yang berjalan di terminal Anda. Ia membaca file, menulis file, dan menjalankan perintah shell sebagai pengguna yang memulainya. Itulah nilai utama alat ini: ia dapat melakukan clone repositori, mengedit kode, menjalankan pengujian, membaca kegagalan, dan memperbaiki kode dalam sebuah loop, tanpa Anda harus mengetik setiap perintah. Jika Anda belum mengaturnya di server, menjalankan Claude Code pada VPS dengan tmux membahas instalasi dan penanganan sesi. Halaman ini membahas kemampuan yang Anda berikan setelah alat tersebut terpasang.

Risikonya sama dengan kalimat yang dibaca untuk kedua kalinya. Sebuah proses yang menjalankan perintah shell sebagai pengguna Anda dapat melakukan apa pun yang dapat dilakukan pengguna Anda. Ia dapat membaca ~/.ssh/id_ed25519, ~/.aws/credentials, dan setiap file .env yang dapat dibuka oleh pengguna Anda. Ia dapat menjalankan curl dan mengirim data ke host mana pun yang dapat dijangkau server. Ia dapat menjalankan git push --force. Agen tersebut tidak memiliki motif sendiri. Bahayanya adalah jika sebuah tugas berjalan salah, atau jika teks yang dibacanya saat bekerja mengandung instruksi yang ditulis oleh orang lain: halaman web yang diambilnya, atau komentar dalam issue yang diminta untuk diperbaiki. Kasus kedua disebut prompt injection, dan itulah alasan mengapa pernyataan "model biasanya masuk akal" bukanlah rencana keamanan. Anda harus bersiap untuk eksekusi yang buruk, bukan eksekusi rata-rata.

Sistem izin dalam bahasa sederhana

Secara default, Claude Code akan meminta izin sebelum bertindak. Membaca file di dalam proyek dilakukan secara diam-diam, tetapi mengedit file atau menjalankan perintah shell akan menampilkan pengeditan atau perintah yang tepat terlebih dahulu dan menunggu konfirmasi "yes". Anda dapat menyetujui satu tindakan, atau menyetujui jenis tindakan tersebut untuk sisa sesi. Persetujuan tersebut bersifat cakupan sesi: jika Anda keluar dari CLI, sesi berikutnya akan dimulai dengan mode waspada kembali. Untuk aturan yang ingin Anda simpan, file pengaturan menyimpan daftar allow, ask, dan deny yang bersifat persisten. Sebagai contoh: allow git status, ask pada git push, deny pembacaan .env. Aturan deny selalu menang.

Desain ini mengasumsikan ada manusia yang mengawasi terminal, dan pada laptop hal itu benar. Di server, poin utamanya sering kali adalah tidak ada yang mengawasi. Anda memulai tugas panjang di dalam tmux lalu tidur, dan agen yang berhenti untuk mengajukan pertanyaan pada jam 2 pagi tidak akan membuat kemajuan hingga pagi hari. Jeda tersebut memakan biaya waktu dan uang, karena sesi Claude Code yang menganggur kehilangan cache prompt hangatnya dan giliran berikutnya harus membayar untuk membangunnya kembali. Itulah alasan jujur mengapa orang menggunakan flag skip di server, dan masalah yang diselesaikannya adalah nyata. Bagian lain dari panduan ini adalah tentang menyelesaikannya tanpa melepaskan setiap pengamanan.

Apa yang diubah oleh --dangerously-skip-permissions

claude --dangerously-skip-permissions mematikan langkah persetujuan. Pengeditan terjadi tanpa prompt. Perintah shell berjalan tanpa prompt. Pemeriksaan protected-path yang biasanya menjaga lokasi sensitif juga dilewati. Aturan deny eksplisit Anda tetap berlaku, dan beberapa tindakan ekstrem tetap akan berhenti untuk meminta izin, tetapi ringkasan cara kerjanya sederhana: apa pun yang diputuskan model untuk dijalankan, akan dijalankan.

Dua fakta tentang flag ini penting di server. Pertama, flag ini diblokir saat Claude Code berjalan sebagai root atau di bawah sudo pada Linux dan macOS, karena root tanpa prompt dapat mengubah file atau layanan apa pun di mesin tersebut. Agen tetap membutuhkan akun unprivileged sendiri, dan flag ini menegaskannya. Kedua, flag ini tidak mengubah perilaku model dengan cara apa pun. Ia menghapus manusia dari loop dan tidak mengubah hal lain, sehingga setiap kesalahan yang seharusnya ditangkap oleh prompt kini akan dieksekusi.

Jadi, inilah kalkulasi jujurnya. Jika Anda melewati izin (skip permissions), pertanyaan keamanan berubah dari "apakah agen akan melakukan sesuatu yang buruk" menjadi "seberapa besar kerusakan yang dapat ditimbulkan oleh satu tindakan buruk". Anda berhenti mencoba mengontrol setiap keputusan dan mulai mengontrol radius ledakan (blast radius). Kontainment adalah jawabannya, dan ia hadir dalam tingkatan.

Sandbox Claude Code bawaan

Sebelum ke tingkatan, ketahuilah bahwa Claude Code kini menyertakan sandbox tingkat OS untuk perintah yang dijalankannya, dan ini menghilangkan sebagian besar alasan orang menggunakan flag skip. Di Linux, ia menggunakan bubblewrap untuk isolasi filesystem, ditambah socat untuk mengarahkan lalu lintas jaringan melalui proxy. Di dalam sandbox, sebuah perintah hanya dapat menulis ke direktori proyek dan direktori temp sesi, dan ia hanya dapat menjangkau jaringan melalui proxy yang memeriksa setiap domain terhadap daftar allow. Saat pertama kali sebuah perintah menginginkan domain baru, Claude Code akan bertanya kepada Anda.

Aktifkan dengan perintah /sandbox di dalam sesi. Pada Ubuntu dan Debian, instal dua paket yang dibutuhkannya terlebih dahulu:

sudo apt install bubblewrap socat

Pada Ubuntu 24.04 dan versi terbaru, kebijakan AppArmor default menghentikan bubblewrap dalam membuat user namespaces yang dibutuhkannya. Panel sandbox akan memberi tahu Anda jika ada yang hilang, dan dokumentasi sandboxing Claude Code menyediakan profil AppArmor singkat untuk memperbaikinya.

Sandbox memiliki mode auto-allow: perintah yang di-sandbox berjalan tanpa prompt, karena batasan yang dipaksakan kini melakukan pekerjaan yang biasanya dilakukan oleh prompt. Perintah yang tidak dapat berjalan di dalam sandbox akan beralih ke alur izin normal, sehingga tindakan yang benar-benar tidak biasa tetap akan meminta izin. Untuk sebagian besar alur kerja server, ini adalah pengganti yang tepat untuk flag skip, karena Anda mendapatkan jauh lebih sedikit pertanyaan dengan batasan yang dipaksakan oleh OS alih-alih tidak ada sama sekali.

Jadilah jujur mengenai batasannya. Secara default, perintah yang di-sandbox masih dapat membaca sebagian besar filesystem, termasuk file kredensial, kecuali jika Anda menolak jalur tersebut; pengaturan sandbox.credentials ada tepat untuk itu. Proxy jaringan memeriksa nama domain dan tidak memeriksa lalu lintas itu sendiri, sehingga izin luas seperti github.com masih menyisakan ruang untuk mengeluarkan data. Docker tidak berfungsi di dalamnya. Sandbox meningkatkan standar keamanan secara signifikan. Ini bukan batasan isolasi yang lengkap, itulah sebabnya tingkatan di bawah ini tetap penting.

Tangga kontainment

Tiga tingkatan, dalam urutan isolasi yang meningkat. Pilih tingkatan terendah yang sesuai dengan apa yang ada di mesin tersebut.

Tingkat 1: pengguna unprivileged khusus. Agen mendapatkan akunnya sendiri, direktori home sendiri, direktori proyek sendiri, dan tanpa sudo:

sudo adduser --disabled-password --gecos "" agent

Batasan akun menjaga agen tetap jauh dari file Anda: kunci SSH Anda dan setiap proyek lain di mesin tersebut. Ini juga membuat flag skip dapat digunakan, karena flag tersebut menolak untuk berjalan sebagai root. Ini adalah prinsip yang sama dengan menjalankan setiap layanan sebagai pengguna unprivileged, yang diterapkan pada agen. Apa yang tidak dibatasi oleh tingkat 1: jaringan, dan apa pun di mesin yang dapat dibaca oleh semua orang (world-readable).

Tingkat 2: container. Anthropic menerbitkan referensi devcontainer yang menjalankan Claude Code sebagai pengguna non-root, dengan aturan firewall yang membatasi host mana yang dapat dijangkau agen, dan container yang Anda bangun sendiri melakukan tugas yang sama. Filesystem menyusut menjadi volume yang Anda mount, dan egress menyusut menjadi apa yang diizinkan oleh aturan container. Ini adalah tingkatan menengah yang tepat jika server menghosting layanan lain yang Anda pedulikan. Batasannya adalah container berbagi kernel host, dan satu mount yang ceroboh dapat membatalkan batasan tersebut; berikan /var/run/docker.sock pada container dan ia dapat menjangkau seluruh host.

Tingkat 3: VPS khusus. Tingkatan terkuat adalah yang paling lugas: berikan agen satu mesin utuh yang tidak berisi apa pun yang Anda pedulikan. VPS kecil hanya berbiaya beberapa dolar sebulan. Atur dengan sepuluh menit pertama pada runbook VPS baru, ambil snapshot keadaan bersihnya, dan biarkan agen bekerja. Tidak ada hal lain yang hidup di sana. Tidak ada kunci SSH pribadi, hanya deploy key yang dibatasi pada satu repositori. Tidak ada kredensial cloud, tidak ada data produksi. Jika sebuah eksekusi salah, atau jika Anda hanya ingin memulai dari awal, pulihkan snapshot atau hancurkan dan bangun kembali mesin dalam hitungan menit. Radius ledakannya hanyalah biaya sewa. Ini adalah pengaturan di mana --dangerously-skip-permissions tidak lagi menakutkan, karena hasil terburuk yang realistis adalah server yang dibangun ulang dan satu token yang dicabut.

Tingkatan ini bertumpuk. Agen yang di-sandbox, berjalan sebagai pengguna unprivileged, di VPS sekali pakai, hampir tidak membutuhkan biaya tambahan dan membuat cerita kegagalan menjadi membosankan. Membosankan adalah tujuannya.

Lindungi kredensial

Aturan yang menanggung biaya untuk segalanya: pengguna agen tidak boleh dapat membaca rahasia milik hal lain.

Berikan API key hanya kepada agen dan tidak kepada yang lain. Letakkan di dalam file milik pengguna agen dengan mode 600, dan muat 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/.bashrc

Kemudian tutup jalur lainnya. Pada Debian dan Ubuntu, direktori home sering kali dibuat dapat dibaca oleh setiap pengguna di mesin, jadi perketat milik Anda sendiri: chmod 750 /home/youruser. Periksa dengan ls -ld /home/* dan perbaiki apa pun yang dapat dilist oleh akun agen.

Batasi setiap token. Token GitHub yang granular yang dibatasi pada satu repositori, atau deploy key per-repositori, berarti kredensial yang bocor hanya kehilangan satu proyek dan bukan seluruh akun Anda. Jika Anda menggunakan sandbox, tambahkan pengaturan kredensialnya sehingga ~/.ssh dan ~/.aws ditolak bahkan untuk pembacaan. Dan jauhkan kredensial produksi dari mesin sepenuhnya, karena agen tidak dapat membocorkan rahasia yang tidak pernah ada di sana.

Git adalah jaring pengaman

Setiap perubahan yang dibuat agen harus dapat ditinjau dan dapat dibatalkan, dan git memberikan keduanya secara gratis jika agen bekerja pada sebuah branch:

git switch -c agent/refactor-auth

Tinjau eksekusi setelahnya dengan git diff main...agent/refactor-auth, gabungkan apa yang baik, dan hapus branch jika eksekusi tidak membuahkan hasil. Lindungi branch main di sisi forge, sehingga token agen tidak dapat melakukan push ke sana dan tidak dapat melakukan force-push di mana pun. Riwayat commit berfungsi ganda sebagai log audit tentang apa yang terjadi saat Anda tidur, yang nilainya lebih tinggi daripada jumlah scrollback terminal mana pun.

Jaringan adalah bagian dari radius ledakan

Agen dapat menjalankan curl. Kalimat itu adalah seluruh masalah egress: apa pun yang dapat dibaca agen, ia juga dapat mengirimkannya ke suatu tempat, dan agen yang terkena prompt injection mungkin melakukannya. Pengguna unprivileged biasa tidak membatasi hal ini sama sekali, karena pengguna mana pun dapat menjangkau apa pun yang dapat dijangkau server. Sandbox membatasinya berdasarkan domain melalui proxynya. Container dapat membatasinya dengan aturan firewallnya sendiri. VPS khusus membatasi apa yang ada untuk dibocorkan sejak awal, yang merupakan jawaban paling kuat dari ketiganya.

Jangan mencoba menyelesaikan egress hanya dengan ufw saja. ufw mengizinkan semua lalu lintas keluar secara default, dan menulis aturan outbound yang tetap mengizinkan apt, npm, git, dan API Claude adalah pekerjaan rumit yang bisa rusak secara diam-diam. Pilih batasan pada tingkat sandbox, container, atau mesin sebagai gantinya, di mana daftar izin domain atau mesin kosong melakukan tugas yang sama secara bersih.

Jika Anda membangun agen sendiri menggunakan API alih-alih menjalankan Claude Code, pemikiran yang sama tetap berlaku. Membangun agen AI dengan Claude pada VPS membahas jalur tersebut, dan agennya layak mendapatkan pengguna khusus yang sama, token terbatas yang sama, dan mesin sekali pakai yang sama.

Perkuat mesin terlebih dahulu

Manapun tingkatan yang Anda pilih, mesin itu sendiri tetap membutuhkan hal-hal dasar sebelum agen masuk: hanya kunci SSH, tidak ada login root, firewall default-deny, pembaruan keamanan otomatis. Buat checklist Anda di sini dan kerjakan satu per satu:

ToolHarden the box before the agent moves in

FAQ

Apakah --dangerously-skip-permissions aman digunakan di server?

Tidak jika berdiri sendiri. Flag tersebut menghapus setiap prompt persetujuan, sehingga perintah buruk pertama akan berjalan saat model menghasilkannya. Ini menjadi pertukaran yang dapat diterima jika radius ledakannya terkendali: minimal pengguna unprivileged khusus, dan untuk pekerjaan tanpa pengawasan yang sesungguhnya, gunakan container atau VPS sekali pakai yang hanya berisi satu proyek dan satu token terbatas. Jangan pernah menggunakannya pada mesin yang menyimpan kredensial produksi atau data yang tidak dapat Anda hilangkan.

Apakah Claude Code memiliki sandbox?

Ya. Claude Code menyertakan sandbox bawaan untuk perintah shell, yang dibuka dengan perintah /sandbox. Ia menggunakan bubblewrap di Linux dan Seatbelt di macOS, membatasi penulisan ke direktori proyek, dan mengarahkan akses jaringan melalui proxy yang hanya mengizinkan domain yang disetujui. Mode auto-allow miliknya menjalankan perintah sandboxed tanpa prompt, sehingga ia memangkas gangguan seperti halnya flag skip sambil tetap mempertahankan batasan yang dipaksakan oleh OS. Ini bukan batasan isolasi yang lengkap, jadi pasangkan dengan pengguna khusus atau mesin khusus untuk eksekusi tanpa pengawasan.

Mengapa flag skip menolak untuk berjalan sebagai root?

Karena root tanpa prompt izin dapat memodifikasi file dan layanan apa pun di sistem, Claude Code memblokir --dangerously-skip-permissions saat berjalan sebagai root atau di bawah sudo pada Linux dan macOS. Solusinya bukan dengan melawan pemeriksaan tersebut. Buat pengguna unprivileged untuk agen dan jalankan di sana; batasan akun tersebut adalah lapisan kontainment pertama dan termurah.

Bisakah Claude Code membaca kunci SSH dan file .env saya?

Ia dapat membaca apa pun yang dapat dibaca oleh pengguna tempat ia berjalan, dan bahkan kebijakan default sandbox mengizinkan pembacaan jalur kredensial sampai Anda menolaknya. Jadi jalankan agen sebagai penggunanya sendiri, jaga direktori home Anda sendiri pada mode 750 atau lebih ketat, tolak jalur kredensial dalam pengaturan sandbox, dan jauhkan rahasia produksi dari mesin sepenuhnya. Rahasia yang tidak pernah ada di mesin tidak dapat dibaca atau dibocorkan.

Apa cara teraman untuk menjalankan Claude Code tanpa pengawasan?

VPS khusus murah yang hanya digunakan untuk pekerjaan agen: diperkuat dalam sepuluh menit, diambil snapshot bersihnya, menjalankan Claude Code di bawah pengguna unprivileged dengan sandbox aktif, file mode-600 yang memegang API key, deploy key per-repositori, dan semua pekerjaan dilakukan pada branch yang Anda tinjau sebelum digabungkan. Jika sebuah eksekusi salah, Anda mencabut satu token dan memulihkan snapshot, dan tidak ada hal lain milik Anda yang terdampak.