Community edition: a fast, local-first, open-source desktop SSH client (Apache-2.0). Terminal, SFTP, port forwarding, jump hosts, key vault, MCP bridge.
1
stars
11
commits
TypeScript
primary language
Aug 26, 2026
updated
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.
Releases · AI agent (MCP) · Report a bug
Community 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.

0600 file (see Security); copy a ready-to-run ssh command for any host.known_hosts tracking, and a hard refusal with a warning if a host key ever changes (MITM protection).-L), remote (-R), and a dynamic SOCKS5 proxy (-D), all over the SSH connection. Keepalive keeps idle tunnels alive.~/.ssh/config — pull existing hosts (and their ProxyJump links) straight into the vault.⌘F searches the terminal scrollback; each host can run a saved command (e.g. tmux attach) the moment the shell opens.brew install --cask SSH-Ache/sshache/sshache
Grab the latest platform build — .dmg (macOS), .msi (Windows), or .AppImage / .deb (Linux) — from the Releases page.
macOS builds are not signed or notarised yet. The first launch is blocked as "unidentified developer" — right-click the app → Open to run it anyway. If you would rather not click through that warning for an app that handles SSH credentials (reasonable), build from source instead.
npm install
npm run tauri build
Building from source requires Rust and the Tauri toolchain. See the Tauri prerequisites for platform-specific setup.
known_hosts; 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.127.0.0.1 behind 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.Passwords, key passphrases and pasted private keys are written to ~/.ssh-ache/secrets.json, a file created with mode 0600 (owner read/write only) — the same access posture as ~/.ssh/id_rsa. 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.
Practically: anything running as your user can read those secrets, exactly as it can read your ~/.ssh private 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.
Found something? SECURITY.md has the disclosure address.
Tauri 2 (Rust backend) · React + xterm.js (frontend) · russh / russh-sftp · portable-pty · keyring (OS keychain mirror).
Licensed under the Apache License 2.0 — free to use, modify, and distribute, including commercially. See NOTICE for attribution.
If SSH Ache saves you time, you can buy me a coffee ☕.
Noor Ajmir Tanvir
11 commits
TypeScript
82.3%
Rust
15.4%
JavaScript
1.2%
Community edition: a fast, local-first, open-source desktop SSH client (Apache-2.0). Terminal, SFTP, port forwarding, jump hosts, key vault, MCP bridge.
1
stars
11
commits
TypeScript
primary language
Aug 26, 2026
updated
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.
Releases · AI agent (MCP) · Report a bug
Community 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.

0600 file (see Security); copy a ready-to-run ssh command for any host.known_hosts tracking, and a hard refusal with a warning if a host key ever changes (MITM protection).-L), remote (-R), and a dynamic SOCKS5 proxy (-D), all over the SSH connection. Keepalive keeps idle tunnels alive.~/.ssh/config — pull existing hosts (and their ProxyJump links) straight into the vault.⌘F searches the terminal scrollback; each host can run a saved command (e.g. tmux attach) the moment the shell opens.brew install --cask SSH-Ache/sshache/sshache
Grab the latest platform build — .dmg (macOS), .msi (Windows), or .AppImage / .deb (Linux) — from the Releases page.
macOS builds are not signed or notarised yet. The first launch is blocked as "unidentified developer" — right-click the app → Open to run it anyway. If you would rather not click through that warning for an app that handles SSH credentials (reasonable), build from source instead.
npm install
npm run tauri build
Building from source requires Rust and the Tauri toolchain. See the Tauri prerequisites for platform-specific setup.
known_hosts; 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.127.0.0.1 behind 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.Passwords, key passphrases and pasted private keys are written to ~/.ssh-ache/secrets.json, a file created with mode 0600 (owner read/write only) — the same access posture as ~/.ssh/id_rsa. 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.
Practically: anything running as your user can read those secrets, exactly as it can read your ~/.ssh private 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.
Found something? SECURITY.md has the disclosure address.
Tauri 2 (Rust backend) · React + xterm.js (frontend) · russh / russh-sftp · portable-pty · keyring (OS keychain mirror).
Licensed under the Apache License 2.0 — free to use, modify, and distribute, including commercially. See NOTICE for attribution.
If SSH Ache saves you time, you can buy me a coffee ☕.
Noor Ajmir Tanvir
11 commits
TypeScript
82.3%
Rust
15.4%
JavaScript
1.2%