SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor

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

Dalam mode Manual, Claude Code meminta persetujuan sebelum bertindak. Membaca file di dalam project berlangsung tanpa pemberitahuan, tetapi saat mengedit file atau menjalankan perintah shell, Claude Code menampilkan edit atau perintah yang tepat terlebih dahulu dan menunggu persetujuan. Anda dapat menyetujui satu tindakan atau meminta agar pertanyaan tersebut tidak ditampilkan lagi. Pilihan kedua berlaku sampai session berakhir untuk pengeditan file. Namun, untuk perintah shell, pilihan tersebut disimpan secara permanen untuk repository dan perintah itu. Artinya, persetujuan singkat pada sebuah server tetap berlaku setelah session berakhir. Untuk aturan yang ingin dipertahankan secara sengaja, file settings menyimpan daftar allow, ask, dan deny yang persisten. Contohnya: allow git status, ask pada git push, deny pembacaan .env. Aturan deny selalu diprioritaskan. Default tersebut juga telah berubah. Mode Auto, yaitu mode ketika classifier meninjau tindakan alih-alih Anda, menjadi default untuk session baru pada paket Pro, Max, dan Team pada 14 August 2026. Mulai Claude Code v2.1.283, mode ini juga menjadi mode awal bawaan untuk session terminal interaktif dan VS Code pada semua paket, kecuali Anda telah menetapkan default tertentu. Karena itu, sebaiknya pahami hal 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 orang yang memantau. Anda memulai tugas panjang di dalam tmux lalu pergi tidur. Jika agent berhenti untuk mengajukan pertanyaan pada pukul 2 a.m., tugas tersebut tidak akan berlanjut sampai pagi. Jeda ini menghabiskan waktu dan biaya karena session Claude Code yang menganggur kehilangan cache prompt yang masih hangat dan giliran berikutnya harus membayar biaya untuk membangunnya kembali. Itulah alasan sebenarnya orang menggunakan flag skip pada server, dan masalah yang diselesaikannya memang 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 membahas tingkatannya, ketahui bahwa Claude Code kini menyediakan sandbox tingkat OS untuk setiap perintah yang dijalankannya. Sandbox ini menghilangkan sebagian besar alasan untuk menggunakan flag skip. Di Linux, sandbox menggunakan bubblewrap untuk isolasi sistem berkas dan socat untuk merutekan trafik jaringan melalui proxy. Di dalam sandbox, perintah hanya dapat menulis ke direktori proyek dan direktori temp sesi. Perintah hanya dapat mengakses jaringan melalui proxy yang memeriksa setiap domain berdasarkan daftar yang diizinkan. Saat perintah pertama kali memerlukan domain baru, Claude Code akan menanyakannya kepada Anda. Dalam mode auto, classifier akan meninjau host baru tersebut.

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

sudo apt install bubblewrap socat

Di Ubuntu 24.04 dan versi setelahnya, kebijakan AppArmor default mencegah bubblewrap membuat user namespace yang diperlukan. Panel sandbox akan memberi tahu jika ada komponen yang kurang. Dokumentasi sandboxing Claude Code menyediakan profil AppArmor singkat untuk memperbaikinya.

Sandbox memiliki mode auto-allow. Perintah yang berjalan di dalam sandbox dieksekusi tanpa prompt karena batasan yang diberlakukan kini menjalankan fungsi yang sebelumnya dilakukan oleh prompt. Perintah yang tidak dapat berjalan di dalam sandbox akan kembali ke alur izin normal. Dengan demikian, tindakan yang benar-benar tidak biasa tetap memerlukan konfirmasi. Untuk sebagian besar alur kerja server, ini merupakan pengganti yang tepat untuk flag skip. Anda akan menerima jauh lebih sedikit pertanyaan karena ada batasan yang diberlakukan oleh OS, bukan tanpa batasan sama sekali.

Pahami keterbatasannya. Secara default, perintah di dalam sandbox masih dapat membaca sebagian besar sistem berkas, termasuk file kredensial, kecuali Anda menolak akses ke path tersebut. Pengaturan sandbox.credentials tersedia tepat untuk tujuan itu. Proxy jaringan memeriksa nama domain, tetapi tidak memeriksa isi trafik. Oleh karena itu, izin luas seperti github.com masih memungkinkan data dikeluarkan. Docker tidak dapat berjalan di dalam sandbox ini. Sandbox meningkatkan tingkat keamanan dasar secara signifikan. Namun, sandbox bukan batas isolasi yang lengkap. Karena itu, tingkat pengamanan 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 "" agent

Batas 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 mendasari semua hal lainnya: pengguna agent tidak boleh dapat membaca secret milik komponen lain.

Berikan API key hanya kepada agent. Simpan key tersebut dalam file yang dimiliki oleh pengguna 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/.bashrc

Selanjutnya, tutup akses dari arah lain. Pada instalasi Debian dan Ubuntu yang lebih lama, serta untuk akun yang dibuat selama instalasi, home directory dapat dibaca oleh semua pengguna di sistem. Karena itu, perketat home directory Anda sendiri: chmod 750 /home/youruser. Periksa dengan ls -ld /home/* dan perbaiki apa pun yang dapat dilihat dalam daftar oleh akun agent.

Batasi cakupan setiap token. GitHub token berbutir halus yang dibatasi ke satu repositori, atau deploy key per repositori, berarti kredensial yang bocor hanya membahayakan satu proyek, bukan seluruh akun Anda. Jika menggunakan sandbox, tambahkan pengaturan kredensialnya agar ~/.ssh dan ~/.aws ditolak bahkan untuk operasi baca. Jangan simpan kredensial production di server sama sekali, 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 vault terenkripsi itu sendiri.

Git adalah jaring pengaman

Setiap perubahan yang di-commit oleh agent dapat ditinjau dan dikembalikan, dan git menyediakan keduanya secara gratis jika agent bekerja pada branch dan melakukan commit secara bertahap:

git switch -c agent/refactor-auth

Pekerjaan yang tidak pernah di-commit oleh agent tidak memiliki perlindungan tersebut: git reset --hard membuang perubahan yang belum di-commit pada file yang dilacak, dan git sama sekali tidak mencakup apa pun di luar repository. Tinjau eksekusinya setelah selesai dengan git diff main...agent/refactor-auth untuk melihat apa yang di-commit, lalu gunakan git status dan git diff HEAD pada branch tersebut untuk memeriksa perubahan yang dibiarkan belum di-commit. Gabungkan perubahan yang baik, lalu hapus branch jika eksekusinya tidak menghasilkan apa-apa. Eksekusi yang mengubah tiga file jauh lebih mudah dibaca saat sarapan daripada eksekusi yang menulis ulang separuh modul. Inilah penerapan praktis skill yang memaksa agent melakukan perubahan sekecil mungkin tetapi tetap berfungsi. Lindungi branch utama dari sisi forge agar token agent tidak dapat melakukan push ke sana dan tidak dapat melakukan force-push ke 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:

ToolHarden the box before the agent moves in

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.