VPS uzerinde DeepSeek Harness kurulumu ve guvenlik
DeepSeek Harness aracini Linux VPS uzerinde guvenli sekilde calistirin. npm surumunu sabitleyin, eklenti mimarisini anlayin ve 3080 portuna SSH tuneli ile erisim saglayin.
DeepSeek Harness nedir
DeepSeek Harness (dsh), bir VPS (sanal özel sunucu) üzerinde çalıştırabileceğiniz bir Node.js aracı çalışma zamanıdır. Bu aracı çalıştırmanın güvenli yolu, 127.0.0.1 adresine bağlamak ve tarayıcınızla bir SSH (secure shell) tüneli üzerinden erişmektir. Araç, terminalde çalışmak yerine 3080 numaralı portta bir web arayüzü (user interface) sunar. Bu web sunucusu kendi başına bir parola sormaz; bu nedenle 3080 numaralı portun dış dünyaya açılması, portu bulan herhangi birine dosyalarınızı okuyabilen ve Linux kullanıcınız yetkileriyle komut çalıştırabilen bir aracı sunmak anlamına gelir.
DeepSeek, aracı 13 Ağustos 2026 tarihinde MIT lisansı altında @deepseek-ai/dsh npm paketi olarak yayımlamıştır. Proje kendisini bir geliştirici önizlemesi olarak tanımlamakta ve uyumluluğu bozacak değişikliklerin beklendiğini belirtmektedir. Aşağıdaki tüm sürüm numaraları Ağustos 2026 tarihli anlık görüntülerdir; bu nedenle herhangi bir kodu kritik bir sunucuya kopyalamadan önce depoyu kontrol edin.
Tüm tasarımın temelinde tek bir fikir yatar: her şey bir eklentidir. Model bağdaştırıcısı, araç kayıt defteri, oturum günlüğü, korumalı alan (sandbox), zamanlayıcı ve aracı döngüsünün kendisi, paylaşılan bir bağlama yüklenen eklentilerdir ve bunlardan herhangi biri değiştirilebilir. Eklentilerin yalnızca süslediği ayrıcalıklı bir çekirdek yoktur. Harness'ı denemeye değer kılan şey budur; ancak gerçek risk de tam olarak burada yatmaktadır.
Harness bir model değildir
Harness, aracı döngüsünü çalıştırır. Muhakeme süreci başka bir yerdeki modelde gerçekleşir; bu nedenle siz ona bir API (uygulama programlama arayüzü) anahtarı veya kendi barındırdığınız bir model uç noktasının adresini vermedikçe hiçbir şey çalışmaz.
Bunu arayüzde Settings ve ardından Models altında yapılandırırsınız. Katalogda, anahtarınızı yapıştırdığınız büyük API sağlayıcıları (DeepSeek, OpenAI, Anthropic) için hazır kartlar bulunur. "Add a custom provider" seçeneği daha ilgi çekicidir: bir sağlayıcı kimliği, görünen ad, temel URL, API protokolü ve kimlik bilgisi alır. OpenAI uyumlu protokolü kullandığı için bu protokolü uygulayan herhangi bir ağ geçidi veya yerel sunucu çalışır. Özel sağlayıcılar, model listesini sizin için doldurmak üzere OpenAI uyumlu GET /models uç noktasını da sorgulayabilir.
Harness'ı aynı VPS üzerindeki bir modele bu şekilde yönlendirirsiniz. Ollama, http://127.0.0.1:11434/v1/ adresinde OpenAI uyumlu bir API sunar ve API anahtarı alanının herhangi bir karakter dizisiyle, geleneksel olarak ollama ile doldurulmasını ister; çünkü bu alan zorunludur ancak sonrasında dikkate alınmaz. VPS'nize sığacak kadar küçük bir modelin bir aracı yönetmek için yeterince iyi olup olmadığı daha zor bir sorudur ve Ollama ile vLLM'in yerel model sunucusu olarak farkı, bu yanıtın ne kadar RAM tüketeceğine karar verir.
Arayüze girilen anahtarlar sadece yazılabilirdir. Harness bunları $DSH_HOME/.credentials.yaml içinde saklar ve settings.yaml içinde yalnızca bir kimlik bilgisi referansı tutar. $DSH_HOME varsayılan olarak ~/.dsh değerini alır. Bu dosyayı bir parola dosyası gibi değerlendirin, çünkü öyledir: dosyayı okuyan herkes API bütçenizi harcayabilir.
Kurulum öncesi gereksinimler
- SSH erişimine sahip, Ubuntu 24.04 veya güncel bir Linux dağıtımı çalıştıran bir VPS
- Projenin derleme ve test süreçlerinde kullandığı Node.js 22.19 veya üzeri (22.x serisi) ya da Node.js 24 ve üzeri sürümler
rootolmayan standart bir kullanıcı hesabı; çünkü aracı, süreci başlatan kullanıcının yetkileriyle shell komutlarını çalıştırır- Eklenti kurmayı planlıyorsanız PATH üzerinde
pnpmbulunmalıdır; çünkü eklenti komutu bu araca ihtiyaç duyar - 3080 numaralı portun güvenlik duvarınızda ve servis sağlayıcınızın ağ düzeyindeki güvenlik duvarında kapalı olması
Ubuntu'nun kendi nodejs paketi, sistemin ihtiyaç duyduğu sürümlerden daha eskidir; bu nedenle apt install nodejs kullanmak yerine Node kurulumunu NodeSource veya nvm üzerinden gerçekleştirin. VPS yeni kurulmuşsa, her şeyden önce SSH güvenliğini sağlamak için on dakika ayırmaya değer; çünkü güveneceğiniz tünelin kalitesi, arkasındaki SSH sunucusunun güvenliği ile sınırlıdır.
DeepSeek Harness'i bir VPS üzerine sabitleme yaparak kurma
node --version
npx @deepseek-ai/dsh@0.1.0-rc.6 webnpx paketi indirir ve dsh ikili dosyasını çalıştırır. web, tarayıcı uygulamasını başlatan --profile web için bir takma addır ve süreç, dinlediği adresi çıktı olarak verir. Varsayılan değer http://127.0.0.1:3080'dir.
Sürümü sabitleyin. npx @deepseek-ai/dsh web, çalıştırdığınız anda latest etiketinin işaret ettiği her neyse onu çözümler; proje halihazırda birçok sürüm adayı yayınladı ve köklü değişikliklerin yolda olduğunu belirtti. 0.1.0-rc.6, 13 Ağustos 2026 tarihinde latest'in işaret ettiği sürümdür. Sabitlenmiş bir sürüm, bugün kurduğunuz sunucunun gelecek ay da aynı şekilde davranacağı anlamına gelir; böylece yükseltme işlemi, farkında olmadan gerçekleşen bir kaza yerine sizin verdiğiniz bir karar haline gelir.
Günlük kullanım için, her başlatmada yeniden çözümleme yapmak yerine bir kez kurun.
npm install -g @deepseek-ai/dsh@0.1.0-rc.6
dsh --profile web --helpİkinci satırı çalıştırmaya değer, çünkü başlatıcı ve web uygulaması ayrı bayrak setlerine sahiptir. dsh --help, başlatıcının kendi seçeneklerini gösterir. dsh --profile web --help, web uygulamasının kabul ettiği bayrakları gösterir; --port, --host ve tekrarlanabilir --trusted-host burada bulunur.
Şimdi neyi dinlediğini doğrulayın.
ss -tlnp | grep 3080Yerel adres sütunu 127.0.0.1:3080 değerini göstermelidir. Eğer 0.0.0.0:3080 değerini görüyorsanız, arayüz internetten erişilebilir durumdadır ve başka bir işlem yapmadan önce süreci durdurmalısınız.
Neden 3080 numaralı portu asla dış dünyaya açmamalısınız
Web sunucusunun herhangi bir kimlik doğrulama katmanı bulunmamaktadır. Yapılandırması yalnızca bir dinleme adresi ve portu üzerinden çalışır; tüm güvenlik yüzeyi bundan ibarettir. Loopback dışı dağıtımlar için sağlanan erişim kontrolü, bir giriş ekranı değil, yalnızca güvenilir ana bilgisayar (trusted-host) ayarıdır.
Bu portun arkasında nelerin çalıştığını göz önünde bulundurun. Ajan, çalışma alanındaki dosyaları düzenleyebilir ve shell komutları çalıştırabilir; sağlayıcı kimlik bilgileriniz de hemen yanında diskte durmaktadır. Dolayısıyla dışarıya açık bir 3080 numaralı port, sohbet arayüzüne sahip, başlatıldığı kullanıcının yetkileriyle çalışan ve API anahtarınızı içeren bir uzak shell erişimidir. Bunun için bir exploit gerekmez. Saldırganların sadece port numarasını bilmesi yeterlidir; tarayıcılar, bir sunucu çevrimiçi olduktan sonraki birkaç saat içinde bu portları tespit eder.
CLI (komut satırı arayüzü) de bu yaklaşımı destekler. 0.1.0-rc.6 sürümü itibarıyla, --host 0.0.0.0 parametresini kasıtlı olarak desteklemez ve başlatılmak yerine bir kullanım hatası vererek sonlanır. Bu reddetme bir özellik olup, bunu kaldıran bir yama arayışına girmeyin.
Tünel kullanmanın uygun olmadığı durumlarda iki farklı dağıtım yöntemi makuldür. Sunucuyu, yalnızca kendi cihazlarınızın erişebileceği özel bir overlay ağına dahil edin; bu, kendi kendine barındırılan bir Headscale kontrol sunucusu ile sağlanabilir. Alternatif olarak, 3080 numaralı porta ulaşmadan önce isteği doğrulayan bir reverse proxy kullanın; örneğin forward auth gerçekleştiren bir Authentik tek oturum açma (SSO) sunucusu. Önünde kimlik doğrulama olmayan bir reverse proxy, bir güvenlik önlemi değil, sadece daha uzun bir URL'dir.
SSH tüneli üzerinden web arayüzüne erişim
Bu komutu sunucuda değil, kendi dizüstü bilgisayarınızda çalıştırın.
ssh -N -L 3080:127.0.0.1:3080 you@your-server-L, dizüstü bilgisayarınızda 3080 numaralı portu açar ve bu porta bağlanan her şeyi şifreli SSH oturumu üzerinden iletir. 127.0.0.1:3080 kısmı sunucu tarafında çözümlenir; bu sayede bağlantı, sanki makinenin başında oturuyormuşsunuz gibi loopback üzerinden harness'a ulaşır. -N, uzak bir kabuk başlatılmamasını söyler, çünkü yalnızca yönlendirme işlemini gerçekleştirmek istersiniz.
Ardından yerel tarayıcınızda http://127.0.0.1:3080 adresini açın. Eğer 3080 numaralı port dizüstü bilgisayarınızda zaten kullanımdaysa, soldaki sayıyı değiştirin: ssh -N -L 3180:127.0.0.1:3080 you@your-server ve ardından http://127.0.0.1:3180 adresine gidin. Soldaki sayı yerel portu, sağdaki sayı ise sunucuya ait portu temsil eder; bu nedenle yalnızca soldaki sayı değiştirilmelidir.
Bunu ~/.ssh/config içine kaydedin ve her seferinde yazmaktan kurtulun.
Host dsh
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519
LocalForward 3080 127.0.0.1:3080Bundan sonra ssh -N dsh komutu tüneli başlatır. Tarayıcının bağlantının reddedildiğini bildirmesi, genellikle tünelin aktif olduğunu ancak karşı tarafta hiçbir servisin dinlemede olmadığını gösterir; çünkü SSH, harness çalışıyor olsun ya da olmasın portu yönlendirir. Sunucuyu yukarıdaki ss komutu ile kontrol edin.
Oturumu kapattıktan sonra harness'ı çalışır durumda tutma
Bir npx komutu, shell oturumunuz kapandığında sonlanır. Bir systemd kullanıcı servisi ise oturumdan bağımsız çalışır ve bir çökme veya yeniden başlatma sonrasında harness'ı tekrar ayağa kaldırır.
loginctl enable-linger $USER
mkdir -p ~/.config/systemd/user
command -v dshenable-linger ayarı önemlidir çünkü kullanıcı servisleri normalde son oturumunuz kapandığında durdurulur; bu ayar olmadan harness, tüneli kapattığınız anda sonlanır. command -v dsh komutunun çıktısı olan mutlak yolu (absolute path) alın ve unit dosyasına ekleyin; çünkü systemd, login shell'inizin oluşturduğu PATH değişkenini aramaz.
[Unit]
Description=DeepSeek Harness web UI
After=network-online.target
[Service]
Type=simple
WorkingDirectory=%h/projects/site
ExecStart=/usr/local/bin/dsh web
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.targetWorkingDirectory ayarı sadece görsel bir tercih değildir. dsh süreci, varsayılan dosya sistemi konumu olarak çağrıldığı dizini kullanır; bu nedenle yanlış bir dizinde başlatılan servis, araca yanlış bir varsayılan çalışma alanı atar. Çalışma alanını arayüz üzerinden yine de seçebilirsiniz.
systemctl --user daemon-reload
systemctl --user enable --now dsh
systemctl --user status dshBaşlamayı reddeden bir unit, neredeyse her zaman yanlış bir ExecStart yolu veya ikili dosyanın kabul etmediği bir Node sürümü kaynaklıdır; journalctl --user -u dsh -n 50 komutu bu hatanın nedenini belirtir. Aynı yöntem herhangi bir kodlama aracını VPS üzerinde canlı tutma için de geçerlidir ve hata modları birebir aynıdır.
Bir eklentinin yapabilecekleri
Eklenti, paylaşılan bir bağlama servisler, türü belirlenmiş olaylar ve geri alınabilir etkiler sağlayan bir modüldür. Uzantı noktaları, dikkatle incelenmesi gereken kısımdır:
ctx.llmüzerinde bir model sağlayıcısı kaydetmectx.toolsüzerinde modele yönelik araçlar eklemectx.shellarkasındaki kabuk (shell) arka ucunu sağlamactx.fsarkasında dosya sistemi erişimi veya politikası sağlamactx.commandsüzerinde kullanıcı komutlarını kaydetmectx.jobsaracılığıyla arka plan işleri çalıştırma- Başlatılan süreçleri bir
ctx.sandboxarka ucu ile sarmalama agent/*vetools/*olayları aracılığıyla istekleri ve araç çağrılarını yakalama- Kalıcı oturum durumunu genişletme
ctx.agentsaracılığıyla kullanıcı arayüzünü yönetme
Bu listeyi bir saldırganın bakış açısıyla okuyun. Bir eklenti, dosya sistemi katmanını ve kabuk katmanını sağlayabilir; ayrıca modelin yaptığı her araç çağrısının arasına girebilir. Bir eklenti ile bu bağlantı noktaları arasında herhangi bir izin diyaloğu bulunmaz; çünkü eklenti, diğer her şeyle aynı süreç içine yüklenen sıradan bir Node kodudur. Bir eklenti yüklemek, yabancı bir kodu kendi temsilcinizin (agent) izinleriyle çalıştırmak demektir; temsilcinizin izinleri ise sizin Unix kullanıcı izinlerinizdir.
Bu, bir VPS üzerinde bir temsilciye MCP sunucusu bağlarken verdiğiniz güven kararıyla aynıdır; burada MCP, model bağlam protokolüdür (model context protocol). Ayrıca bir kodlama temsilcisini VPS üzerinde güvenli bir şekilde çalıştırmanın modelden ziyade temsilcinin altında çalıştığı hesapla başlamasının ve npm tedarik zinciri saldırılarının sunucuları neden bu kadar ağır etkilediğinin nedeni budur: yükleme adımı bir ihlaldir ve hiçbir şey sizi bu konuda uyarmaz.
Eklentilerin kaynağı
Eklentiler profiller içinde yaşar. Profil, $DSH_HOME altında saklanan ve varsayılan değeri ~/.dsh olan isimlendirilmiş bir yapıdır; her profil dizini, yüklediği ağaç dışı (out-of-tree) eklentileri barındırır. CLI, argümanlarınızı doğrudan pnpm adresine ileterek ve profil dizinini çalışma dizini olarak kullanarak bunları yönetir.
dsh plugin --profile web add github:deepseek-harness/turtle-ui
dsh plugin --profile web remove turtle-uiArgümanlar pnpm adresine değiştirilmeden ulaştığı için add, remove, update ve why, herhangi bir pnpm projesinde olduğu gibi davranır ve bir eklenti, bir npm paketi veya bir GitHub referansı olabilir. pnpm öncelikle PATH üzerinde bulunmalıdır. Node 22 ve sonraki sürümlerde corepack enable pnpm bunu oraya yerleştirir.
Keşif süreci bir GitHub konusu (topic) aracılığıyla işler. Eklenti yazarları, depolarına dsh-plugin konusunu ekler ve bu konuya göz atmak, nelerin mevcut olduğunu bulmanızı sağlar. Konu, bir yazarın kendi deposuna uyguladığı bir etikettir. Kimse bunu incelemez veya imzalamaz; konu sayfası, güvenlikten ziyade popülariteyi ölçen yıldız sayısına göre sıralanır.
Dört alışkanlık bu süreci yönetilebilir kılar. Çoğu eklenti on dakikada okunabilecek kadar küçük olduğundan, yüklemeden önce kaynak kodunu okuyun. Bir dalı takip etmek yerine tam sürümü veya commit değerini sabitleyin. Harness'ı, başka hiçbir şeye sahip olmayan bir kullanıcı altında ve yeniden oluşturmaya hazır olduğunuz bir VPS üzerinde çalıştırın. Aracınıza, üretim servislerinizin kullandığı anahtardan ayrı, kendi harcama limitine sahip özel bir API anahtarı verin.
Birine karar vermeden önce tasarımları karşılaştırmak isterseniz, Omnigent çoklu aracı harness aynı sorunu farklı bir yapıyla yanıtlar ve eklentiler devreye girdiğinde ödünleşimler (trade-offs) belirginleşir.
İlk ne bozulur
Node sürümü çok eski. Proje, 22.x serisinde Node 22.19 ve üzerini veya Node 24 ve üzerini hedefler; CI testleri bu sürümlerle yapılır. Daha eski bir çalışma zamanı, kodun sahip olmadığı sözdizimi ve API'leri kullandığı için başlatma sırasında hata verir. Başka bir işlem yapmadan önce node --version komutunu çalıştırın.
3080 numaralı port zaten kullanımda. İkinci bir harness, askıda kalmış bir süreç veya 3080 portunu kullanan ilgisiz bir uygulama olabilir. Bunu bulmak için ss -tlnp | grep 3080 komutunu kullanın, ardından süreci durdurun veya harness'ı dsh web --port 3180 ile başka bir yerde başlatın. --port web uygulamasına aittir, bu nedenle web komutundan sonra gelmelidir.
Tarayıcı tünel üzerinden bağlantı kuramıyor. Sunucunun genel adresi yerine 127.0.0.1 adresine gittiğinizden emin olun; çünkü yönlendirilen port yalnızca dizüstü bilgisayarınızda mevcuttur. Ardından, SSH uzak uçta bir yanıt olup olmadığına bakmaksızın yönlendirmeyi kurduğundan, harness'ın sunucuda dinleme yaptığını doğrulayın.
dsh plugin hemen başarısız oluyor. Bu komut pnpm etrafında bir sarmalayıcıdır, bu nedenle eksik bir pnpm ikili dosyası, herhangi bir eklenti çalışması başlamadan önce süreci durdurur.
Ajan projenizi göremiyor. Çalışma alanı varsayılan olarak sürecin başlatıldığı dizindir, bu nedenle WorkingDirectory değeri ana dizininiz olan bir birim, ajana ana dizininizi verir. Arayüzden çalışma alanını seçin veya birimi düzeltip yeniden yükleyin.
FAQ
DeepSeek Harness web arayüzünü 3080 numaralı port üzerinden dış dünyaya açmak güvenli midir?
Hayır. Web sunucusunun kendi kimlik doğrulama mekanizması yoktur. Arkasındaki aracı, süreci başlatan kullanıcı yetkileriyle dosya düzenleyebilir ve kabuk komutları çalıştırabilir; ayrıca sağlayıcı API anahtarınız da aynı diskte saklanır. Dinleyiciyi 127.0.0.1 üzerinde tutun ve buraya bir SSH tüneli üzerinden erişin. Özel bir overlay ağı veya porta ulaşan her isteği doğrulamak için bir reverse proxy kullanmak da işe yarar. 0.1.0-rc.6 sürümü itibarıyla CLI, --host 0.0.0.0 kullanımını reddeder ve bir kullanım hatası vererek sonlanır; bu durum geliştiricilerin bu fikir hakkındaki görüşünü açıkça ortaya koymaktadır.
DeepSeek API anahtarına mı ihtiyacım var, yoksa yerel bir model kullanabilir miyim?
Her ikisi de mümkündür, çünkü harness bir model değil, bir çalışma zamanıdır. Settings ve ardından Models menüsü altında bir katalog sağlayıcı kartına anahtar yapıştırabilir veya "Add a custom provider" seçeneğini kullanarak OpenAI uyumlu protokolü destekleyen bir base URL girebilirsiniz. Yerel bir Ollama sunucusu http://127.0.0.1:11434/v1/ adresinde yanıt verir ve API anahtarı alanında herhangi bir metni kabul eder. Anahtarlar, varsayılan olarak ~/.dsh/.credentials.yaml olan $DSH_HOME/.credentials.yaml dosyasına kaydedilir.
Bir DeepSeek Harness eklentisi yüklemek, eklentiye tam olarak hangi yetkileri verir?
Harness'ı çalıştıran hesabın tüm yetkilerini verir. Bir eklenti, aynı süreç içine yüklenen Node kodudur; genişletme noktaları arasında kabuk arka ucu, dosya sistemi katmanı, araç kayıt defteri ve her araç çağrısını saran olaylar bulunur. Eklenti kendi korumalı alanını (sandbox) sağlamadığı sürece, hiçbir mekanizma eklentiyi bu noktalardan izole etmez. Yüklemeden önce kaynak kodunu inceleyin ve harness'ı, kaybetmeyi göze alamayacağınız hiçbir veriye erişimi olmayan bir kullanıcı ile çalıştırın.
Hangi sürümü yüklemeliyim ve çalışmaya devam edecek mi?
Örneğin npx @deepseek-ai/dsh@0.1.0-rc.6 web gibi tam bir sürüm numarası yükleyin. Bu, 13 Ağustos 2026 tarihinde latest etiketinin işaret ettiği sürümdür. Proje kendisini bir geliştirici önizlemesi olarak tanımlamakta ve uyumluluğu bozan değişikliklerin beklendiğini belirtmektedir; bu nedenle sabitlenmemiş bir komut, günden güne farklı davranabilir. Yükseltme yapmadan önce depoyu kontrol edin ve sürüm numarası 0 ile başladığı sürece yapılandırma anahtarlarının ve eklenti arayüzlerinin değişebileceğini göz önünde bulundurun.