Run SSH commands from your Flipper Zero over wired Ethernet or WiFi, through an ESP32-S3 add-on board.
Shown in demo mode with example data.
SSH Runner pairs a Flipper Zero app with firmware for an ESP32-S3 board that has a W5500 Ethernet port. The board handles networking and cryptography (libssh); the Flipper is the keyboard and screen. Pick a host, authenticate, run a command or a script, and read the output.
Contents: Features · Screenshots · Hardware · Installation · Usage · Documentation · Building From Source · Security · Roadmap · Contributing · License · Acknowledgments
- Wired or wireless: LAN (W5500 Ethernet) and 2.4 GHz WiFi, DHCP or static, with automatic fallback between them.
- Password or key authentication: Ed25519, ECDSA and RSA keys from the SD card, or keys generated by the app; an encrypted key needs its passphrase only once.
- Host-key pinning per host: prompt, strict or off.
- Commands your way: one-liners, saved commands per host or global, and shell scripts from the SD card.
- Readable output with the exit code and run time; very long output keeps its beginning and end.
- Ready to try: built-in example commands and a system-info script.
- PC companion:
sshrunneredits hosts, commands, keys and scripts over USB, with backups before every change. - Optional secret protection: encrypt the board's stored credentials with an eFuse key.
Every screen below is from the app's demo mode (simulated board, example data), at 4× the Flipper's 128×64 screen.
The PC tool: sshrunner edits hosts, commands, keys and scripts from a computer (PC Tool)
| Part | Notes |
|---|---|
| Flipper Zero | Unleashed unlshd-094 or official 1.5.1 firmware, with an SD card |
| SSH Runner add-on board | ESP32-S3-WROOM-1 (16 MB flash, 8 MB PSRAM), W5500 Ethernet with RJ45, USB-C; plugs straight onto the Flipper's GPIO header, no wiring |
| or Waveshare ESP32-S3-ETH | ESP32-S3R8, 16 MB flash, W5500 Ethernet with RJ45, USB-C; with 3–4 jumper wires, see the wiring below |
| Ethernet cable or a 2.4 GHz WiFi network | the ESP32-S3 has no 5 GHz radio |
| Flipper Zero GPIO | ESP32-S3-ETH | Use |
|---|---|---|
| 13 (TX) | GPIO18 (header H1 pin 10) | always |
| 14 (RX) | GPIO17 (header H1 pin 7) | always |
| 8, 11 or 18 (GND) | GND | always |
| 9 (3V3) | 3V3 header pin | portable use |
- Desk use: three wires; the board is powered from its own USB-C.
- Portable use: add a wire from the Flipper's GPIO header pin 9 (3V3) to the board's 3V3 pin; the board then runs from the Flipper's battery, with no USB-C cable.
Warning
Never plug in the board's USB-C while the 3V3 wire is connected: that ties two power supplies together. Remove the 3V3 wire before connecting USB-C (for example to flash the firmware). Leave "5V on GPIO" off on the Flipper.
Pin details: Hardware and Wiring.
The SSH Runner add-on board (rev 0.1) is built and tested. Its design files are in
hardware/ (CC BY-NC-SA 4.0: source-available, non-commercial), to order
or build yourself; on rev 0.1 the status LED is a hand-fitted part (erratum E1). Its USB-C may
stay plugged in while it sits on the Flipper.
![]() |
![]() |
SSH Runner rev 0.1, the custom add-on PCB: design files, how to order, and errata.
Download the files from the latest release.
The easiest way is the Flipper Apps Catalog: connect the Flipper over USB, open that page in desktop Chrome or Edge and click Install, or find SSH Runner under Apps in the Flipper mobile app. Then open it from Apps > GPIO > SSH Runner.
To install it by hand, download the official build, ssh_runner-official.fap: it runs on the
official and on the Unleashed firmware. Copy it to SD Card/apps/GPIO/ with qFlipper or a card
reader. ssh_runner-unleashed.fap is optional, for Unleashed only (it scrolls long values in
lists instead of showing their end).
If the Flipper reports an API mismatch or an outdated app after a firmware update, update the
app from the catalog or download the latest release. A Flipper app runs when its API major
version equals the firmware's and its minor version is not newer. The official build targets
API 88.2, which the official firmware 1.5.1 (88.2) and Unleashed unlshd-094 (88.19) both
accept.
Download the zip for your board, flipper-ssh-runner-esp32-waveshare-v<version>.zip (Waveshare
ESP32-S3-ETH) or flipper-ssh-runner-esp32-addon-v<version>.zip (SSH Runner add-on, rev 0.1 and
later), unzip it and connect the board's USB-C (3V3 wire removed). On a first install, erase the
flash and write the factory image (-factory.bin) at 0x0; on an update, write only the app
image (-app.bin) at 0x20000, without erasing, which keeps the board's saved WiFi network and
trusted host keys. The simplest way is in the browser, with Spacehuhn's
ESPTool in desktop Chrome or Edge, step by step in the
Quick Start. Or with
esptool (<board> is waveshare or addon):
# first install
esptool.py --chip esp32s3 -p <port> erase_flash
esptool.py --chip esp32s3 -p <port> write_flash 0x0 flipper-ssh-runner-<board>-v<version>-factory.bin
# update
esptool.py --chip esp32s3 -p <port> write_flash 0x20000 flipper-ssh-runner-<board>-v<version>-app.binThe firmware burns no eFuses unless you enable secret protection in the app.
Archives for Linux, macOS and Windows (sshrunner_<version>_<os>_<arch>), plus .deb and
.rpm packages. See cli/README.md.
- Put the add-on board on the Flipper, or wire the Waveshare board to it and power it (USB-C, or the 3V3 wire).
- Open SSH Runner. The header shows the board's address once it has a network.
- Network > LAN: plug in an Ethernet cable, or Network > Join WiFi to pick a network.
- Quick Connect: type
user@host, check the host key, enter the password. - Pick a command, or type one, and read the output. Save the host to reuse it.
Step by step, with what each message means: docs/QUICKSTART.md.
| Document | What it covers |
|---|---|
| Quick Start | Wiring, flashing, installing, the first connection, messages |
| Hardware and Wiring | Pin assignments, desk and portable power |
PC Tool (sshrunner) |
Editing the Flipper's hosts, commands, keys and scripts from a computer |
| Flipper App | Screens, SD card files, examples, demo mode, compatibility |
| Architecture | Repository layout and build outputs |
| UART Protocol | The link between the Flipper and the board |
| Security | Stored secrets, secret protection, host keys, wiping |
| Changelog | Changes in each release |
| Contributing | Issues, pull requests, running the checks |
| Third-Party Components | Components and their licenses |
All documents, grouped: docs/README.md.
Requirements: Docker (the ESP-IDF, uFBT and Go toolchains run in pinned containers or a local Python venv; nothing is installed globally) and Python 3.
# Linux / WSL
tools/check.sh# Windows (PowerShell)
python -m venv venv
venv\Scripts\pip install --cache-dir .cache\pip -r requirements.txt
powershell -ExecutionPolicy Bypass -File tools\check.ps1This builds the Flipper app for both firmwares, the ESP32 firmware and the PC tool, and runs the tests. Repository layout: docs/ARCHITECTURE.md; UART protocol: docs/PROTOCOL.md.
The board stores WiFi credentials, remembered passwords and trusted host keys in its flash,
unencrypted by default. Settings > Security > Protect Secrets encrypts them with a key
burned into an eFuse; this cannot be undone. Private keys stay on the Flipper's SD card. Erase
the board (esptool.py --chip esp32s3 -p <port> erase_flash) before giving it away. Threat
model, details and how to report a vulnerability: docs/SECURITY.md.
- Custom add-on PCB for the Flipper's GPIO header
- Several saved WiFi networks, joining whichever is in range
Issues and pull requests are welcome. See CONTRIBUTING.md for how to report a bug, run the checks and send a change.
The firmware, the Flipper app, the PC tool and the scripts in hardware/tools/ are
GPL-3.0-only.
The hardware design in hardware/ is licensed under the
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
(hardware/LICENSE). Commercial use of the hardware design or any derivative
works is not permitted without explicit permission from the author. For commercial licensing,
contact: scx@gapp.nthu.edu.tw
Third-party components and their licenses: THIRD_PARTY.md.
- libssh and LibSSH-ESP32 by Ewan Parker
- Flipper Zero firmware and Unleashed firmware
- UART Terminal by cool4uma, for the keyboard layout
- Espressif ESP-IDF
- Charm (Bubble Tea, Bubbles, Lip Gloss) for the PC tool's interface














