SSH Mobile Client — Android

A proper, interactive SSH client for Android, built natively in Kotlin. Designed like Termux-style terminals so vim, nano, htop, tmux, top, ssh, and other interactive CLIs work correctly over a real PTY.

Status: ter-build & terverifikasi. Pada 2026-08-30 proyek ini berhasil dikompilasi penuh (Gradle assembleDebug) dan diproduksi APK (11 MB). Repo berisi project Kotlin/AndroidStudio lengkap — tinggal buka di Android Studio atau build via CLI.

✨ Fitur (versi 1.0)

Area Dukungan
SSH 2.x sshj 0.38 (SSH-2), handshake modern (RSA/ECDSA/ED25519)
PTY interaktif xterm-256color PTY, shell interaktif penuh
ANSI warna 16 + 256 + TrueColor (24-bit) SGR — parser ditulis sendiri
Font custom ukuran font diatur (pinch-to-zoom 14–60px), monospace
Tema terminal 6 tema built-in (Hijau, Tango, Solarized×2, Gruvbox, Material) + Dark UI
Keyboard khusus Baris Ctrl/Alt/Esc/Tab/panah/PgUp/PgDn/Del
Copy/paste & seleksi Seleksi teks → salin ke clipboard, tempel ke sesi
Autentikasi Password / private key (+passphrase)
Profil server Simpan banyak profil (nama, host, port, user, tema, ukuran font)
Kredensial aman EncryptedSharedPreferences (Tink/GCM) — semua tersimpan terenkripsi
Reconnect & keep-alive Reconnect otomatis dengan backoff + keep-alive SSH (60s)
Orientasi Portrait & landscape — PTY di-resize otomatis mengikuti layout

Backlog: SFTP browser, host-key pinning (known_hosts), manajemen key dari file, toggle Dark/Light saat runtime.

🏗️ Arsitektur

app/src/main/java/com/kosbarokah/sshclient/
├── data/
│   ├── ServerProfile.kt      # model profil + ThemePreset (16-warna & tema)
│   └── SecureStore.kt        # simpan profil + kredensial terenkripsi
├── ssh/
│   └── SshEngine.kt          # koneksi SSH (sshj), PTY, auth, reconnect, keep-alive
├── terminal/
│   ├── TerminalModel.kt      # buffer layar + scrollback + sel (warna/atribut)
│   ├── TerminalParser.kt     # parser ANSI/VT100 (16/256/TrueColor, cursor, clear)
│   ├── TerminalView.kt       # View custom: render, seleksi, copy, pinch-zoom
│   ├── TerminalScheme.kt     # data skema warna (palette + bg/fg/cursor)
│   └── TerminalController.kt # perekat: parser ↔ SSH ↔ View
├── keyboard/
│   └── KeySequences.kt       # byte sequence key khusus (Esc, panah, Ctrl, dst)
└── ui/
    ├── ConnectActivity.kt        # daftar profil ter-simpan
    ├── ProfileEditorActivity.kt  # tambah/edit/delete profil + kredensial
    └── TerminalActivity.kt       # layar terminal + toolbar + key bar

🚀 Cara Membangun (Android Studio)

  1. Buka folder ini di Android Studio (Flutter? Tidak — ini native Kotlin/Gradle).
  2. Pastikan SDK android-34 & build-tools 34.0.0 terinstal (Android Studio akan menawarkan secara otomatis).
  3. Sync Gradle — semua dependensi (sshj, security-crypto, Material, coroutines) diambil dari Maven Central / Google.
  4. Run di emulator atau perangkat Android (minSdk 26 / Android 8.0+).

Bisa juga via command-line (tanpa Android Studio):

# Prasyarat di mesin pengembang:
#   - JDK 17
#   - Android SDK command-line tools (platform android-34, build-tools 34.0.0)
#   - Gradle 8.9 (atau buka di Android Studio yang membawa Gradle sendiri)
export ANDROID_HOME=/path/to/Sdk           # sesuaikan dengan lokasi SDK-mu
gradle :app:assembleDebug                  # hasil: app/build/outputs/apk/debug/app-debug.apk

Catatan: tidak ada gradlew wrapper di proyek ini; gunakan Gradle yang terinstal (8.9) atau buka via Android Studio (yang menyediakan Gradle sendiri).

🧪 Verifikasi Build

Pada 2026-08-30 yang lalu, hasil build di jalur produksi:

  • gradle :app:assembleDebug → BUILD SUCCESSFUL, APK 11 MB diproduksi
  • gradle :app:lintDebug → 0 error (hanya warning versi dependency yang tidak wajib di-upgrade)
  • Struktur lengkap: 13 file Kotlin, 10 resource XML, AndroidManifest.xml, Gradle config

Catatan: terminal emulator diimplementasikan sendiri (tanpa library pihak ketiga) supaya build bersih & dependable. TerminalParser menangani subset ANSI yang cukup untuk vim/nano/htop/tmux/top: SGR warna (16/256/TrueColor), cursor movement/clear, scrollback, dan OSC (ignored body). Karena tidak ada emulator Android di lingkungan build ini, verifikasi dibatasi pada compile + resource + lint; uji runtime tetap perlu di perangkat/emulator.

🔐 Keamanan

  • Semua profil & kredensial disimpan lewat EncryptedSharedPreferences (master key AES256-GCM dari Android Keystore, nilai dienkripsi AES256-GCM).
  • Private key & passphrase tidak pernah diserialisasi sebagai teks polos ke disk.
  • Host key verifier v1 bersifat "terima semua" dengan catatan TODO untuk pinning known_hosts di rilis berikut (terbilang di backlog).

🖥️ Skenario Penggunaan

  • SSH ke server/cantor untuk akses shell jarak jauh.
  • Menjalankan editor terkesan: vim, nano, htop, tmux, ssh, kubectl.
  • Warna penuh untuk ls -la --color, bat, lsd, fzf, grep --color.
  • Simpan beberapa profil server untuk akses satu-ketukan.

📄 Lisensi

Kode contoh internal — untuk digunakan oleh project Kos Barokah.

Description
No description provided
Readme 137 KiB
Languages
Kotlin 100%