Skip to content

Repository files navigation


SSHDeck Logo

Run SSH commands on any remote host directly from your Stream Deck.

Key FeaturesActionsRequirementsDownloadSetupSupportLicense

Get it on Marketplace

Marketplace download badge

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.


Key Features

  • 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.

Actions

SSH Command

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.

Connection settings

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.

Keep connection open

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.

Popup notifications

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.


Requirements

  • 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).

Download

SSHDeck isn't published on the Elgato Marketplace yet. Grab the latest release from the GitHub Releases page, or build it yourself (see Development).


Setup

  1. Install the plugin from the Releases page (see Download).
  2. Drag an "SSH Command" action onto any key on your Stream Deck.
  3. Fill in Host / IP, Port, Username and pick an Authentication method, these are shared across every SSHDeck key.
  4. Enter the Command to run on that specific key, and optionally enable Keep connection open and/or the notification popup.
  5. Use Run now to test the command from the Property Inspector, or just press the key.

Security notes

  • 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.


Support

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.


Future improvements

Feel free to suggest new features by opening an issue on GitHub.


Contributing

Pull requests are welcome. For major changes, open an issue first to discuss what you'd like to improve.


Development

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 CLI

Project structure

The 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.


Thanks

  • ssh2 for the SSH client used under the hood.
  • sdpi-components for the Property Inspector UI components.
  • Elgato for the Stream Deck SDK.

License

MIT


About

Run SSH commands on any remote host directly from your Stream Deck.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages