{"slug": "show-hn-ssh-ache-open-source-desktop-ssh-client-with-sftp-tunnels-and-mcp", "title": "Show HN: SSH Ache – open-source desktop SSH client with SFTP, tunnels and MCP", "summary": "SSH Ache, an open-source desktop SSH client built with Tauri 2 (Rust) for macOS, Windows, and Linux, has been released with features including a real terminal, SFTP browser, port forwarding, SOCKS5 proxy, jump hosts, and an optional MCP-based AI agent bridge that is off by default and requires per-command approval. The client keeps all data local, with no account required, and offers encrypted backups (PBKDF2 → AES-256-GCM) and host-key verification to prevent man-in-the-middle attacks.", "body_md": "A desktop SSH client with a clean terminal UI — connections, SFTP, port forwarding, and an approval-gated AI agent bridge, with your data kept on your machine and nothing uploaded anywhere.\n\n[Releases](https://github.com/SSH-Ache/ssh-ache/releases) ·\n[AI agent (MCP)](/SSH-Ache/ssh-ache/blob/main/docs/MCP.md) ·\n[Report a bug](https://github.com/SSH-Ache/ssh-ache/issues/new)\n\nCommunity edition.A fully local, open-source SSH client — everything runs on your machine, nothing is uploaded, no account required.SSH Ache Teams, an optional way to share connections with your team end-to-end encrypted, is a separate product.\n\n- 💻\n**Real terminal**— full SSH sessions (russh + xterm.js), tabbed, with splittable panes, plus local shell tabs. - 🗂️\n**Host vault**— saved hosts organised in folders with colours and favourites; secrets stored outside the config in a`0600`\n\nfile (see[Security](#security)); copy a ready-to-run`ssh`\n\ncommand for any host. - 🔑\n**Key Vault**— save named SSH private keys once and reuse them across connections. - 🔐\n**Host-key verification**— first-connect fingerprint confirmation,`known_hosts`\n\ntracking, and a hard refusal with a warning if a host key ever changes (MITM protection). - 📁\n**SFTP browser**— dual-pane local/remote navigation with drag-and-drop transfer of multiple files and whole folders, a replace/skip conflict prompt, and remote create-folder / rename / delete. - 🔀\n**Port forwarding & SOCKS**— local (`-L`\n\n), remote (`-R`\n\n), and a dynamic SOCKS5 proxy (`-D`\n\n), all over the SSH connection. Keepalive keeps idle tunnels alive. - 🛫\n**Jump hosts (ProxyJump)**— reach a host through a saved bastion; the jump host's key is verified too. - 📥\n**Import**— pull existing hosts (and their ProxyJump links) straight into the vault.`~/.ssh/config`\n\n- 🔄\n**Reconnect on drop**— when a session times out or the network goes, the pane stays where it is and a** Connection lost**prompt offers*Reconnect*(same host, fresh shell, tab and scrollback intact) or*Close tab*. - 📡\n**Broadcast input**— type once, send to every split pane in a tab (cluster-ssh). - 🔎\n**Find & on-connect commands**—`⌘F`\n\nsearches the terminal scrollback; each host can run a saved command (e.g.`tmux attach`\n\n) the moment the shell opens. - 🎨\n**Themes & settings**— terminal themes with live font size, cursor, and scrollback controls. - 💾\n**Encrypted backup**— export and import your hosts and secrets as a password-encrypted file (PBKDF2 → AES-256-GCM). - ⏳\n**Idle screen lock**— optional passphrase lock on the window after a period of inactivity (sessions and forwards keep running behind it). - 🤖\n**AI agent access (MCP)**— an optional, off-by-default MCP server bound to localhost behind a bearer token, with per-host opt-in and per-command in-app approval — plus an opt-in per-host Auto-allow that skips the prompt. See[docs/MCP.md](/SSH-Ache/ssh-ache/blob/main/docs/MCP.md). - 🖥️\n**Cross-platform**— built with Tauri 2 (Rust) for macOS, Windows, and Linux.\n\n```\nbrew install --cask SSH-Ache/sshache/sshache\n```\n\nGrab the latest platform build — `.dmg`\n\n(macOS), `.msi`\n\n(Windows), or `.AppImage`\n\n/ `.deb`\n\n(Linux) — from the [Releases](https://github.com/SSH-Ache/ssh-ache/releases) page.\n\nmacOS builds are not signed or notarised yet.The first launch is blocked as \"unidentified developer\" — right-click the app →Opento run it anyway. If you would rather not click through that warning for an app that handles SSH credentials (reasonable), build from source instead.\n\n```\nnpm install\nnpm run tauri build\n```\n\nBuilding from source requires Rust and the Tauri toolchain. See the [Tauri prerequisites](https://tauri.app/start/prerequisites/) for platform-specific setup.\n\n**Host-key verification**— fingerprints are confirmed on first connect and tracked in`known_hosts`\n\n; if a host key ever changes, the connection is refused with a warning to guard against man-in-the-middle attacks. There is no \"connect anyway\" button.**Jump hosts are verified too**— a bastion's key is checked before any credential is sent to it.** Encrypted backups**— exported hosts and secrets are sealed with PBKDF2-SHA256 (600k iterations) and AES-256-GCM. Exporting a single connection or a workspace*without*a password leaves the secrets out of the file entirely.**Approval-gated AI access**— the MCP server is off by default, bound to`127.0.0.1`\n\nbehind a random bearer token, and default-deny per host. Every command needs explicit in-app approval unless you turn on**Auto-allow** for a specific host, which is off by default and skips the prompt for that host only. Secrets are never exposed to the agent. Details in[docs/MCP.md](/SSH-Ache/ssh-ache/blob/main/docs/MCP.md).**No cloud**— nothing is uploaded and no account is required. The only outbound request the app makes is the GitHub release check for updates.\n\nPasswords, key passphrases and pasted private keys are written to `~/.ssh-ache/secrets.json`\n\n, a file created with mode `0600`\n\n(owner read/write only) — the same access posture as `~/.ssh/id_rsa`\n\n. **They are not encrypted at rest.** They are mirrored to the OS keychain where that works, and the keychain is read as a fallback, but the file is the primary store: keychain access is tied to an app's code signature and is unreliable on the unsigned builds shipped today.\n\nPractically: anything running as your user can read those secrets, exactly as it can read your `~/.ssh`\n\nprivate keys. Full-disk encryption (FileVault / BitLocker / LUKS) is what protects them at rest. Encrypting this file under the screen-lock passphrase is planned; the idle lock today locks the window, not the file.\n\nFound something? [SECURITY.md](/SSH-Ache/ssh-ache/blob/main/SECURITY.md) has the disclosure address.\n\nTauri 2 (Rust backend) · React + xterm.js (frontend) · russh / russh-sftp · portable-pty · keyring (OS keychain mirror).\n\nLicensed under the [Apache License 2.0](/SSH-Ache/ssh-ache/blob/main/LICENSE) — free to use, modify, and distribute, including commercially. See [NOTICE](/SSH-Ache/ssh-ache/blob/main/NOTICE) for attribution.\n\nIf SSH Ache saves you time, you can [buy me a coffee ☕](https://www.patreon.com/cw/tanvirmahin24).\n\n**Noor Ajmir Tanvir**\n\n- Website —\n[tanvirmahin.com](https://tanvirmahin.com) - GitHub —\n[@TanvirMahin24](https://github.com/TanvirMahin24) - Email —\n[tanvirmahin24@gmail.com](mailto:tanvirmahin24@gmail.com)", "url": "https://wpnews.pro/news/show-hn-ssh-ache-open-source-desktop-ssh-client-with-sftp-tunnels-and-mcp", "canonical_source": "https://github.com/SSH-Ache/ssh-ache", "published_at": "2026-08-29 19:42:29+00:00", "updated_at": "2026-08-29 20:18:50.227121+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["SSH Ache", "Tauri 2", "Rust", "MCP", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/show-hn-ssh-ache-open-source-desktop-ssh-client-with-sftp-tunnels-and-mcp", "markdown": "https://wpnews.pro/news/show-hn-ssh-ache-open-source-desktop-ssh-client-with-sftp-tunnels-and-mcp.md", "text": "https://wpnews.pro/news/show-hn-ssh-ache-open-source-desktop-ssh-client-with-sftp-tunnels-and-mcp.txt", "jsonld": "https://wpnews.pro/news/show-hn-ssh-ache-open-source-desktop-ssh-client-with-sftp-tunnels-and-mcp.jsonld"}}