Key Features • Actions • Requirements • Download • Setup • Support • License
SSHDeck is a Stream Deck plugin that connects over SSH to a remote host — a Raspberry Pi, a home server, a VPS — and runs a command at the press of a key. Output streams back live into the key's Property Inspector, and if you're not looking at it, an optional popup can flag the result even while you're doing something else entirely on the PC.
- One key, one command, press a key, run a shell command on a remote host over SSH.
- Live console in the Property Inspector, stdout, stderr and the exit status stream back in real time as the command runs.
- Password or private-key authentication (with an optional passphrase for encrypted keys), configured once and shared across every SSHDeck key.
- Persistent connections, optionally keep a connection open after the command finishes and close it with a second press of the same key.
- Visual key states, the key's icon changes while a command is sending and while a connection is kept open, so you can tell what's happening at a glance.
- Popup notifications (Windows), optionally show a topmost popup with the full command output the moment it finishes, even if another app has focus, no need to keep the Property Inspector open to see the result.
- "Run now" button in the Property Inspector to test a command without leaving the settings panel.
- Concurrency guard, a key won't re-trigger a command that's still running on it.
One press. One remote command.
Runs a single shell command on a remote host over SSH. The key shows the command as its title, and streams stdout/stderr plus the final exit status into the Property Inspector's built-in console as it runs.
Use Run now in the Property Inspector to try a command without pressing the physical key.
Host / IP, Port, Username and the Authentication method (password, or private key with an optional passphrase) are shared globally across every SSH Command key, set them once on any key and every other key reuses them.
Enable Keep connection open until pressed again to leave the SSH connection alive after the command finishes instead of closing it. Press the key a second time to close it manually. While a connection is kept open, the key shows a distinct "connected" icon.
Note: Windows only, this setting is silently ignored on other platforms.
Enable Show a popup on top of everything when the command finishes to get a native, always-on-top popup with the full command output (stdout/stderr) and the final status, success or error, the instant the command settles, regardless of what else is focused on your PC.
- Stream Deck software 7.1 or later.
- Windows 10+ or macOS 12+.
- No local Node.js install is required to use the plugin, Stream Deck runs it on a bundled Node.js 24 runtime. Node.js is only needed for development (see Development).
SSHDeck isn't published on the Elgato Marketplace yet. Grab the latest release from the GitHub Releases page, or build it yourself (see Development).
- Install the plugin from the Releases page (see Download).
- Drag an "SSH Command" action onto any key on your Stream Deck.
- Fill in Host / IP, Port, Username and pick an Authentication method, these are shared across every SSHDeck key.
- Enter the Command to run on that specific key, and optionally enable Keep connection open and/or the notification popup.
- Use Run now to test the command from the Property Inspector, or just press the key.
- Credentials (password, private key path, passphrase) are stored using Stream Deck's local settings storage on your machine, in plain text, not encrypted at rest. Anyone with access to your PC or to your Stream Deck profile files can read them. Prefer private-key authentication over passwords where possible, and use a key dedicated to this purpose if you can.
- No host-key/fingerprint verification is performed, connections use
ssh2's defaults.
Warning
SSHDeck is provided "as is", without warranty of any kind. You use it entirely at your own risk. The author is not responsible for any data loss, unauthorized access, security breach, damage, or other consequence arising from the use, misuse, or inability to use this plugin, including but not limited to how credentials are stored or how commands are executed on your remote hosts. Review the code, store only credentials you're comfortable keeping unencrypted on disk, and act accordingly.
If you find this plugin useful, consider buying me a coffee:
If you can't donate, leaving a ⭐ on the repo goes a long way, it genuinely makes my day.
Feel free to suggest new features by opening an issue on GitHub.
Pull requests are welcome. For major changes, open an issue first to discuss what you'd like to improve.
npm install
npm run build # bundles src/ into com.unai-gonzalez.sshdeck.sdPlugin/bin/plugin.js
npm run watch # rebuilds on change and restarts the plugin via the Elgato CLIThe plugin follows a small MVC-style separation under src/:
src/
plugin.ts Bootstraps and connects the plugin
actions/
ssh-command.ts Controller, Stream Deck lifecycle events only
models/
settings.ts Shared setting/message types
ssh-connection.ts Wraps the ssh2 Client: auth + command execution
connection-registry.ts Tracks running/open connections per key
views/
key-icon-view.ts Paths to the "running"/"connected" key icons
property-inspector-view.ts Sends status/log updates to the Property Inspector
system-notification-view.ts Shows the topmost popup notification (Windows)
The Property Inspector itself (com.unai-gonzalez.sshdeck.sdPlugin/ui/ssh-command.html
and ui/css/ssh-command.css) is the plugin's other View, it renders the settings
form (via sdpi-components) and the live console.
Rollup bundles everything to CommonJS because ssh2 relies on native Node
globals (__dirname, require) at module scope, see rollup.config.mjs for
details.
- ssh2 for the SSH client used under the hood.
- sdpi-components for the Property Inspector UI components.
- Elgato for the Stream Deck SDK.

