SSD Nodes Learn 8GB RAM — yılda $66
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-01

Telefondan Claude Code Kullanma: VPS, SSH ve tmux

Claude Code telefonda çalışmaz: VPS üzerindeki tmux oturumuna SSH ile bağlanılır. SSH anahtarları, mosh, tmux attach ve mobil klavye düzeltmeleri açıklanır.

Telefonunuzdan Claude Code: gerçekte nasıl çalışır?

Telefonunuzdan Claude Code kullanımı bir mobil uygulama değildir. Claude Code, bir VPS (sanal özel sunucu) üzerinde, açık kalmaya devam eden bir tmux oturumunda çalışır. Telefonunuz, görüntülediğiniz sürece bu oturuma SSH (güvenli kabuk) bağlantısı açar. Uygulamayı kapatsanız bile aracı çalışmaya devam eder; çünkü işlem telefonda çalışmıyordu.

Tasarımın tamamı bu ayrımdan oluşur. Bir telefon işletim sistemi, uygulamadan uzaklaştıktan birkaç saniye sonra uygulamayı askıya alır. Bu nedenle telefonda başlatılan uzun süreli bir iş durur. Ayrıca wifi ağından mobil veriye geçtiğinizde her seferinde yeni bir ağ adresi alırsınız. İşlem sunucuda çalıştığında ve telefon yalnızca ekranı görüntülediğinde bu iki sorun da ortadan kalkar.

Sunucuda dört bileşen gerekir: oturumu tutmak için tmux, bağlanmak için SSH anahtarları, ağ değişiklikleri için mosh ve Claude Code'un kendisi. Telefonda ise erişilebilir bir tuş satırına sahip tek bir terminal uygulaması yeterlidir.

VPS üzerinde gerekenler

SSH ve tmux bölümleri için küçük bir Ubuntu 24.04 sunucusu yeterlidir. Claude Code daha fazlasını gerektirir. Temmuz 2026 itibarıyla resmi gereksinimler, x64 veya ARM64 işlemcide Ubuntu 20.04 ya da daha yeni bir sürüm ve en az 4 GB RAM'dir. 1 GB'lık bir plan kurulumu tamamlar, ancak yoğun yük altında işlemi kernel sonlandırır. Claude Code için ayrıca ücretli bir Claude hesabı (Pro, Max, Team veya Enterprise) ya da API erişimi olan bir Console hesabı gerekir. Ücretsiz Claude.ai planında bu özellik bulunmaz.

Sunucuyu root olarak değil, sudo yetkisine sahip normal bir kullanıcıyla kurun. Sunucu yeniyse önce yeni bir VPS üzerinde ilk on dakika bölümündeki adımları uygulayın. Bu kılavuzdaki SSH değişiklikleri, kullanıcı ve firewall mevcut olduğunda daha kolay uygulanır.

sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --version

Kurulum programı binary dosyasını ~/.local/bin/claude konumuna yerleştirir. claude --version komutu 2.1.211 (Claude Code) benzeri bir satır yazdırır. command not found yazdırılırsa bu dizin henüz PATH içinde değildir. Oturumu kapatın, yeniden oturum açın ve ardından command -v claude ile kontrol edin. claude doctor bir oturum başlatmadan kurulum ve ayar tanılamalarını yazdırır.

Telefona güvenmeden önce şimdi bir dizüstü bilgisayardan bir kez oturum açın. Bir proje dizininde claude komutunu çalıştırın ve oturum açma istemini izleyin. İşlem, bir URL'yi tarayıcıda açmanızı ve bir kodu terminale geri girmenizi ister. Bunu telefonda iki uygulama arasında yapmak yavaştır. İşlemi gerçek bir klavyede bir kez tamamlayın. Kimlik bilgileri sunucuda kalır.

Bağlantının kopması işlemi sonlandırmasın diye Claude Code'u tmux içinde başlatma

tmux new -s claude
cd ~/projects/api
claude

Ctrl-b ile ayırın, ardından d tuşlarına basın. tmux [detached (from session claude)] iletisini görüntüler ve kabuk istemine geri döner. Artık uygulamayı kapatabilir, sinyal bağlantısını kaybedebilir veya telefonu cebinize koyabilirsiniz. Bölme çalışmaya devam eder.

tmux ls
tmux attach -t claude

tmux ls her oturum için claude: 1 windows (created Thu Jul 30 09:14:02 2026) gibi bir satır görüntüler. tmux attach -t claude komutu, yarım kalan düzenleme de dahil olmak üzere sizi tam olarak kaldığınız yere geri götürür.

Bu işlem, tmux'un kendisine ait bir sunucu işlemi çalıştırması sayesinde mümkün olur. Kabuğunuz ve Claude Code, sshd yerine bu sunucu işleminin alt işlemleridir. SSH bağlantısı sona erdiğinde çekirdek, bu bağlantıya bağlı işlemlere SIGHUP sonlandırma sinyali gönderir. tmux sunucusu bu işlemler arasında yer almaz. tmux kullanılmadığında, bağlantının kesilmesine neden olan aynı ekran kilidi, bir araç çağrısının ortasında Claude Code'u durdurur. VPS üzerinde tmux içinde Claude Code çalıştırma bölümünde oturum düzeni daha ayrıntılı olarak açıklanır.

tmux'u telefonda değil, sunucuda çalıştırın. Zaten bağlı olduğunuz bir oturumun içinde tmux yazılırsa sessions should be nested with care, unset $TMUX to force görüntülenir. tmux'u zorla başlatmak, kullanılacak iki önek tuşu oluşturur.

Her oturum açılışında otomatik olarak bağlanma

Dokunmatik klavyede attach komutunu yazmak bir süre sonra yorucu olur. Bunu sunucudaki ~/.profile dosyasının sonuna ekleyin:

if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
  exec tmux new-session -A -s claude
fi

new-session -A -s claude, varsa claude adlı oturuma bağlanır; yoksa oturumu oluşturur. Böylece her iki durum için de tek bir komut yeterlidir. exec, oturum açma kabuğunu tmux ile değiştirir. Bu nedenle tmux'tan çıkıldığında boş bir isteme düşmek yerine bağlantı kapanır. Normal bir kabuk gerektiğinde dosyayı atlayın: ssh you@server -t "bash --noprofile".

Bunu ~/.profile dosyasına ekleyin, ~/.bashrc dosyasına değil. ~/.bashrc etkileşimli olmayan oturumlarda da çalışır. Bu nedenle dosya aktarımları bozulur: scp ve sftp beklenmeyen çıktıyı protokol verisi olarak okur ve Received message too long hatasıyla başarısız olur. ~/.profile yalnızca oturum açma kabuklarında çalışır. Etkileşimli SSH oturumu da bu tür bir kabuktur.

~/.profile, Ubuntu'nun ~/.local/bin değerini PATH dosyasına eklediği yerdir. Oturum açtıktan hemen sonra claude çalışıyor, ancak tmux içindeki bir kabuk command not found diyorsa bunun nedeni yükleme sırasıdır. Bu nedenle tmux'u, profili atlayan bir betikten değil, yukarıda gösterildiği gibi bir oturum açma kabuğundan başlatın.

Her iki uygulama da SSH ve mosh protokollerini destekler ve anahtarları uygulama içinde saklar. Fark, arayüzdedir.

Blink Shell komutlarla yönetilir. İsteminde ssh you@server veya mosh you@server yazılır. Sözdizimi masaüstü terminalindekiyle aynıdır. Ayarlar, config yazılarak açılır. Keys bölümü sizin için bir anahtar çifti oluşturur.

Termius form tabanlıdır. Bir ana bilgisayar kaydı doldurulur. Ardından ana bilgisayar ayrıntılarında bu ana bilgisayar SSH'den Mosh'a geçirilir. Termius kendi mosh uygulamasını içerir ve mosh 1.3.0 ve sonraki sürümlerini destekler. Bu nedenle sunucuda mosh paketinin yine de kurulu olması gerekir.

Her iki durumda da anahtar uygulama içinde oluşturulmalıdır. Mevcut bir özel anahtar telefona kesinlikle kopyalanmamalıdır. Uygulama, sunucudaki ~/.ssh/authorized_keys dosyasına eklenecek tek satırlık açık anahtarı gösterir. Cihaza özel SSH anahtarları ve bir anahtarın iptal edilmesi, adlandırma ve iptal adımlarını açıklar. Bu konu telefonlar için dizüstü bilgisayarlara göre daha önemlidir.

Terminal uygulamasının kendi biyometrik veya parola kilidi etkinleştirilmelidir. Bu kilit etkin değilse ekran açık kaldığı sürece kilidi açılmış telefon, sunucunuzda açık bir kabuk erişimi sağlar.

Android: Termux

pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pub

Termux, OpenSSH ve mosh paketlerini kendi deposunda yayımlar. Bu nedenle ssh, ssh-keygen ve mosh masaüstündeki gibi çalışır. Yazdırılan ortak anahtar satırı sunucudaki ~/.ssh/authorized_keys dosyasına eklenir. Ardından mosh you@server ile bağlantı kurulur.

Android ekran klavyesinde Esc ve Ctrl tuşları yoktur. Claude Code ise her ikisini de gerektirir. Termux kendi tuş satırını gösterebilir. ~/.termux/termux.properties dosyasına bir satır eklenir:

extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]

Ardından termux-reload-settings çalıştırılır. Tuş satırı klavyenin üzerinde görünür. Aynı yeniden yükleme işlemi, ~/.termux/font.ttf konumuna yerleştirilen monospace TrueType yazı tipini de etkinleştirir.

Android, Termux arka planda çalışırken işlemini durdurabilir. Bu durumda yalnızca yeniden bağlantı kurmak gerekir. Oturum ve agent sunucuda çalışır.

Wi-Fi bağlantısından ayrıldığımda terminal neden donar ve mosh bunu nasıl düzeltir?

SSH bağlantısı bir TCP (iletim denetim protokolü) bağlantısıdır. TCP bağlantısı, her iki adres ve her iki bağlantı noktasıyla tanımlanır. Wi-Fi kapsama alanından çıkıldığında telefon mobil ağdan yeni bir adres alır. Bu nedenle eski bağlantı artık iki uçta da eşleşmez. Bu durum bildirilmez. TCP vazgeçene kadar terminal yanıt vermeyi durdurur. Ardından ssh client_loop: send disconnect: Broken pipe iletisini görüntüler. Donmuş oturumu hemen sonlandırmak için önce Enter, ardından ~ ve sonra . tuşlarına basılır.

mosh (mobil kabuk) bu arıza biçimini ortadan kaldırır. Oturum açmak ve bir mosh-server işlemi başlatmak için SSH'yi bir kez kullanır. Sunucunun seçtiği UDP (kullanıcı datagram protokolü) bağlantı noktasını okur ve SSH bağlantısını kapatır. Bundan sonra iki uç, paylaşılan bir oturum anahtarıyla kimliği doğrulanan UDP datagramlarını değiş tokuş eder. Böylece oturum adresinizle değil, bu anahtarla tanımlanır. Yeni bir adres alındığında oturum sürer. mosh ayrıca yazdıklarınızı yerel olarak görüntüler ve sunucu farklı bir içerik gönderdiğinde ekranı yeniden çizer. Bu nedenle yavaş bir mobil bağlantıda da kullanılabilir durumda kalır.

mosh, 60000 ile 61000 arasında bir UDP bağlantı noktası kullanır. Bu aralığı açın:

sudo ufw allow 60000:61000/udp
sudo ufw status

ufw ile bağlantı noktalarını açma güvenlik duvarı yapılandırmasının kalanını açıklar. Sağlayıcınızın denetim panelinde ayrı bir ağ güvenlik duvarı varsa aynı aralığı orada da ekleyin. Çünkü ufw kuralı, makinenin önünde bulunan bir filtreyi etkileyemez.

mosh ile ilgili iki hata yaygındır. Oturum açma başarılı olduktan sonra bağlantı takılıyor ve Nothing received from server on UDP port 60001. görüntüleniyorsa, UDP aralığı telefon ile sunucu arasındaki bir noktada engelleniyor demektir. Bağlantı mosh-server not found bildiriyorsa paket sunucuda eksiktir veya oturum açma PATH içinde bulunmuyordur. Paketi yükleyin veya mosh --server=/usr/bin/mosh-server you@server ile doğrudan belirtin.

Oturum açma yerel ayarı UTF-8 değilse mosh çalışmayı da reddeder ve şu iletiyi görüntüler: mosh-server needs a UTF-8 native locale to run. Yerel ayarı telefonda değil, sunucuda düzeltin.

locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

mosh iki işlemi yapmaz. README dosyasında mosh'un X yönlendirmesini veya bağlantı noktası yönlendirme dahil SSH'nin etkileşimsiz kullanımlarını desteklemediği belirtilir. Bu nedenle Claude Code'un yeni başlattığı bir web uygulamasını önizlemek için düz ssh -L 8080:127.0.0.1:8080 you@server kullanılması gerekir. Ayrıca yalnızca görünür ekranı eşitler. Bu nedenle kendine ait bir geriye doğru kaydırma geçmişi yoktur. Buradaki ikinci sınırlamanın bir etkisi yoktur. Çünkü tmux geriye doğru kaydırma geçmişini korur: Ctrl-b ardından [ kopyalama moduna girer. Sürükleme veya ok tuşlarıyla kaydırılır. q ile çıkılır.

Telefon ekranını kullanılabilir hâle getirme

Sunucuda ~/.tmux.conf içindeki dört satır işin büyük bölümünü yapar:

set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000

mouse on, dokunarak sürükleme hareketini kaydırmaya ve dokunmayı bölme veya pencere seçimine dönüştürür. Böylece yazılması zor olan önek tuşlarının çoğuna gerek kalmaz. status-position top, tmux durum satırını alt kenardan taşır. Ekran klavyesi ve öneri çubuğu aksi hâlde bu satırın üzerini kapatır. default-terminal önemlidir; tmux aksi hâlde Claude Code'a screen terminal bildirir. Bu durumda renkler ve kutu çizimleri gerekenden daha kötü görünür. Ardından tmux missing or unsuitable terminal: tmux-256color ile başlatılamazsa terminfo girdisi eksiktir: sudo apt install ncurses-term.

Dört tuşu öğrenmek yeterlidir; geri kalanı rahat kullanılır.

  • Esc, Claude'un yanıtını ortasında keser ve tamamlanan çalışmayı korur. Bu nedenle başparmağa en yakın tutulması gereken tuştur.
  • Ctrl+C de çalışan bir işlemi keser. Boşta olan istemde ilk basış girişi temizler, ikinci basış Claude Code'dan çıkar. Bu nedenle daha sert etkili bir seçenektir.
  • Esc tuşuna iki kez basıldığında taslak istem temizlenir. İstem boşsa bunun yerine geri alma menüsü açılır.
  • Birden çok satırlı istem için \ yazıp Enter tuşuna basın. Bu biçim her terminalde çalışır. Shift+Enter yalnızca sınırlı sayıdaki masaüstü terminalinde yerel olarak desteklenir. Mobil istemciler bu listede değildir.

Bölünmüş bölmelerden kaçının. Dikey konumda kullanılan bir telefon yaklaşık 40 sütun genişliğindedir. Bu nedenle dikey bölme her bölmeye 20 sütun bırakır ve her diff gürültüye dönüşecek şekilde satır kaydırır. Bunun yerine tmux pencerelerini kullanın: Ctrl-b c yeni bir pencere oluşturur, Ctrl-b n sonraki pencereye geçer. Bir diff'i düzgün okumak gerektiğinde telefonu yatay çevirin.

Küçük ekranda uzun bir oturum çoğunlukla bağlam sorunudur. Bu nedenle, tren yolculuğunda tam bir iş günü çalıştırmayı denemeden önce Claude Code bağlam penceresini yönetme konusunu okumanız yararlı olur.

Güvenliği sıkılaştırın: yalnızca anahtarlar, parola yok

Telefon artık kodunuzu düzenleyen ve komutları çalıştıran bir makinenin anahtarını barındırıyor. Parola kimlik doğrulamasını kapatın. Doğrudan sshd_config dosyasını düzenlemek yerine drop-in dosyası kullanmak daha güvenlidir. Bunun nedeni, Ubuntu'daki sshd_config dosyasının üst kısmında /etc/ssh/sshd_config.d/*.conf içermesi ve bir ayar için bulunan ilk değerin kullanılmasıdır.

sudo tee /etc/ssh/sshd_config.d/99-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload ssh

sshd -t yapılandırmayı ayrıştırır ve yapılandırma geçerliyse hiçbir çıktı vermez. Bu adımı atlarsanız tek bir yazım hatası yeniden yükleme sırasında sshd işleminin başarısız olmasına neden olur. Mevcut oturumunuzu açık tutun ve herhangi bir şeyi kapatmadan önce ikinci bir bağlantı üzerinden test edin. Yanlış bir anahtar Permission denied (publickey). hatasına yol açar ve parolalar kapalı olduğunda geri dönüş seçeneği kalmaz. Bu noktadaki kurtarma yolu sağlayıcınızın konsoludur.

Her cihaza kendi anahtarını verin. Telefonun kaybolması durumunda ~/.ssh/authorized_keys dosyasından yalnızca bir satırı silmeniz yeterli olur ve dizüstü bilgisayarınız çalışmaya devam eder. Tek bir ortak anahtar kullanırsanız sahibi olduğunuz her cihazdaki anahtarı değiştirmeniz gerekir.

Ubuntu 24.04 üzerinde SSH'yi başka bir porta taşırsanız dinleyicinin ssh.socket hizmetine ait olduğunu unutmayın. Bu nedenle tek başına bir Port satırı hiçbir şeyi değiştirmez. sudo systemctl edit ssh.socket komutunu çalıştırın, varsayılanı boş bir ListenStream= ile temizleyin ve ardından portunuzu sonraki satıra ayarlayın. Bir VPS üzerinde SSH'yi güçlendirme bu işlemi ve saldırı yüzeyinin geri kalanını açıklar.

SSH için fail2ban parolalar kapalıyken çok az ek güvenlik sağlar. Bunun nedeni, tahmin edilen bir parolanın hiçbir şekilde kabul edilememesidir. Sağladığı ek yarar, günlükleri sadeleştirmesidir. Böylece gerçek bir oturum açma girişimi kolayca fark edilir.

Daha güçlü seçenek, SSH'yi genel internetten uzak tutmaktır. Sunucuyu kendi barındırdığınız bir WireGuard VPN arkasına yerleştirin, tüneli telefonda gerektiğinde etkinleştirin ve sshd için yalnızca tünel üzerinde bir ListenAddress tanımlayın. Her iki taraf da UDP kullandığı için mosh tünel üzerinden çalışır. Bir sınırlama vardır: tünel paket ek yükü oluşturur. Büyük aktarımlar duraklarsa telefonun WireGuard yapılandırmasında MTU'yu (maksimum iletim birimi) düşürün.

Bu şekilde çalışmaya ilişkin son bir nokta daha vardır. Telefonda, her seferinde birkaç diff satırının gösterildiği bir ekranda izin istemlerini onaylarsınız. Bu durum, koruma mekanizmalarını kapatmak yerine korumaya devam etmek için bir nedendir. Bir VPS üzerinde Claude Code'u güvenli biçimde çalıştırma, ana erişim yönteminiz dokunmatik ekran olmadan önce ayarlanması gereken kullanıcı ve dizin sınırlarını açıklar.

When you reattach and something is wrong

tmux attach printing no server running on /tmp/tmux-1000/default means the tmux server is gone, which nearly always means the machine rebooted. Check with uptime. Kernel updates from automatic security updates reboot the box, and a rebooted box has no tmux session, so treat any Claude Code run as something you can restart.

can't find session: claude is different. The tmux server is running but that name is not there. tmux ls shows what does exist.

If you attach and find a plain shell prompt where Claude Code used to be, the process ended without the session ending. Look at dmesg -T | tail for a line like Out of memory: Killed process 4821 (claude), which is what a box below the 4 GB requirement does during a large edit. No such line means Claude Code exited on its own, and the shell's scrollback above the prompt holds the reason.

A window that comes back tiny, with unused space around it, means two clients are attached at different sizes, because tmux sizes a window to fit the smallest attached client. Your laptop is still holding the session at 200 columns wide while the phone asks for 40. Detach the others as you attach: tmux attach -d -t claude.

FAQ

Claude Code'u VPS yerine doğrudan telefonda çalıştırabilir miyim?

Hayır. Temmuz 2026 itibarıyla desteklenen platformlar macOS, Windows, Ubuntu 20.04 veya üzeri, Debian 10 veya üzeri ve Alpine 3.19 veya üzeridir. Sistemlerde en az 4 GB RAM bulunmalıdır. Android ve iOS bu listede yer almaz. Telefon ayrıca uygulamaları uykuya alır ve ağ adresini sürekli değiştirir. Uzun süren bir agent çalışması bu koşullarda kararlı çalışamaz. Claude Code'u bir sunucuda çalıştırın ve telefonu ekran olarak kullanın.

Uygulamayı kapatırsam veya sinyali kaybedersem oturum devam eder mi?

Evet. Bu işi iki ayrı bileşen yapar. tmux, işlemi sunucuda çalışır durumda tutar. Bu nedenle bağlantı sona erdiğinde işlem durmaz. mosh ise adres değişikliklerinde bağlantının kendisini korur. Böylece wifi ile mobil veri arasında geçiş yapıldığında yeniden bağlanmak gerekmez. tmux olmadan plain SSH kullanılırsa kopan bağlantı SIGHUP gönderir ve Claude Code görevin ortasında durur.

mosh bağlandıktan sonra neden hiçbir şey göstermiyor?

Başarılı bir oturum açma işleminden sonra bağlantı Nothing received from server on UDP port 60001. ile takılı kalıyorsa UDP 60000-61000 aralığı açık değildir. Bu aralığı ufw'ye ekleyin. Ayrıca çoğu sağlayıcının panelinde ayrı bir denetim olan sağlayıcının ağ güvenlik duvarına da aynı aralığı ekleyin. mosh bunun yerine mosh-server bulunamadığını bildiriyorsa sunucuda ilgili paket yoktur: sudo apt install mosh.

Esc tuşu olmayan bir klavyeden Claude Code'u nasıl kesebilirim?

Bir tuş satırı ekleyin. Termux bunu ~/.termux/termux.properties içinde extra-keys ile yapılandırır. Termius ve Blink de ayarlardan düzenleyebileceğiniz bir satırla birlikte gelir. Esc, çalışan yanıtı keser ve tamamlanan çalışmayı korur. Ctrl+C da işlemi keser. Ancak boş bir istemde buna iki kez basılırsa Claude Code'dan çıkılır. Bu nedenle önce Esc kullanın.

SSH'yi internete açmak yeterince güvenli midir?

Parola kimlik doğrulaması kapalıysa başarılı olabilecek tek kimlik bilgisi, cihazlarınızdan hiç ayrılmayan bir cryptographic key olur. Yeniden oluşturabileceğiniz bir makine için bu makul bir risktir. Her cihaz için ayrı bir key kullanın. Böylece kaybolan bir telefonun etkisi authorized_keys içinde tek bir satırla sınırlı kalır. Herkese açık bir port üzerinden yanıt vermek istemiyorsanız makineyi WireGuard arkasına alın ve sshd'yi tünel adresini dinleyecek şekilde yapılandırın.