Skip to content

Add SSH Switch v0.2.2 - #1127

Open
nicholasyoannou wants to merge 1 commit into
SteamDeckHomebrew:mainfrom
nicholasyoannou:add/ssh-switch
Open

nicholasyoannou wants to merge 1 commit into
SteamDeckHomebrew:mainfrom
nicholasyoannou:add/ssh-switch

Conversation

@nicholasyoannou

@nicholasyoannou nicholasyoannou commented Sep 13, 2026

Copy link
Copy Markdown

Add SSH Switch to Plugin Store

SSH Switch 0.2.1 is a simple plugin that provides SSH controls in Decky's Quick Access Menu, allowing you to control startup of the SSH service, alongside an assistant companion on PC to mount the Deck over SFTP/SSHFS (OS-dependant).

  • Start or stop SSH immediately.
  • Choose whether SSH starts at boot, independently of its current running state.
  • Verify the current account password before entering and confirming a replacement password. Blank passwords are rejected.
  • Show the address, port, username, SSH fingerprint and remote folders for connecting from a computer.

The release on the Decky SSH Switch repository also provides companion SSHFS mount and unmount helpers for Windows, Linux and macOS. These run on the user's computer, which can be used alongside the "Connect from Computer" popup for ease of connection. Windows also supports persistent drives and optional saved settings, with the saved password encrypted for that Windows account. The "Connect from Computer" popup adds SSH management alongside the interface information shown by Decky Network Info.

SSH Switch settings New password and confirmation dialog, shown after current-password verification

Task Checklist

Developer

  • I am the original author or an authorized maintainer of this plugin.
  • I have abided by the licenses of the libraries I am utilizing, including attaching license notices where appropriate.
  • Generative AI was NOT used to write a majority of the code I am submitting.

Regarding AI Use: I've used GPT-6 Astra to assist with parts of the implementation, debugging and code review. I’ve modified and tested the Decky plugin on my Steam Deck and the Windows companion scripts on Windows 11.

Plugin

  • I have verified that my plugin works properly on the Stable and Beta update channels of SteamOS.

I've tested and verified the plugin on both update channels on SteamOS (Steam Deck).

  • I have verified my plugin is unique or provides more/alternative functionality to a plugin already on the store.

Similar functionality has been proposed in Easy SSH (#1034), which remains open (but stale), and Decky SSH (#1104), which was closed without merging. Both provide SSH controls from the Quick Access Menu, and Decky SSH also includes password changes with current-password verification.

SSH Switch shares those features and adds separate control over whether SSH starts at boot, along with a “Connect from computer” screen showing the connection details, host fingerprint and available remote folders. The companion mount and unmount scripts for Windows, Linux and macOS use those details to help users access their Deck’s files from their computer, with the Windows script inspired by MonroeWorld's script as a base. This connection and file-access workflow is the main additional functionality offered by this submission.

Backend

  • No: I am using a custom backend other than Python.
  • Yes: I am using a tool or software from a 3rd party FOSS project that does not have it's dependencies statically linked.
  • No: I am using a custom binary that has all of it's dependencies statically linked.

The backend is Python and uses systemctl, sshd and chpasswd. It also dynamically loads SteamOS’s libcrypt.so.1 for password verification and hashing. The plugin does not bundle or download additional native binaries. The companion mounting scripts run separately on the user’s computer.

Community

  • I have tested and left feedback on two other pull requests for new or updating plugins.
  • I have commented links to my testing report in this PR.

Testing

  • Tested by a third party on SteamOS Stable or Beta update channel.

@nicholasyoannou
nicholasyoannou requested a review from a team as a code owner September 13, 2026 23:24
@github-actions github-actions Bot added the plugin-addition Adding a plugin to the Plugin Store label Sep 13, 2026
@github-actions

Copy link
Copy Markdown

Issues Found

No issues with your PR description were found.

Next Steps

  1. If we found any issues above, please edit your pull request description to resolve them and leave a comment saying you've done so.
  2. For the quickest review, please see the Community section of the pull request template for how you can help other developers.
  3. Once your description is correct, a maintainer will review your pull request as soon as possible.

Thank you for your contribution! If you need any help, please reach out on our Discord server. ❤️

@spmzt

spmzt commented Sep 17, 2026

Copy link
Copy Markdown

"Connect from computer" lists only IPv4 addresses (main.py:152). The mount scripts reject IPv6 addresses (mount-unix.sh:14, mount-windows.ps1:19), so the helpers fail on an IPv6-only network.

Other than this, LGTM, tested on SteamOS Beta Channel

@nicholasyoannou nicholasyoannou changed the title Add SSH Switch v0.2.1 Add SSH Switch v0.2.2 Sep 17, 2026
@nicholasyoannou

Copy link
Copy Markdown
Author

@spmzt Thanks for your comment, appreciate the feedback.

I've added IPv6 support to the "Connect from computer" popup displayed, and compatibility in the scripts for IPv6 also. It will only show the IPv6/IPv4 based on if it's enabled. SteamOS seemingly silently switched IPv6 back on by default for some (see ValveSoftware/SteamOS#2024) but oddly I've tested it on my own Steam Deck and the IPv6 loopback is disabled when it's already connected via IPv4 (SteamOS dual-stack network problem). Personal router supports IPv4 and IPv6 but oddly IPv6 is disabled on my Deck.

I've tested this with your IPv6 enabler plugin #1130 and can verify IPv6 connectivity works as intended. I've left some feedback on your referenced PR also. Have tested #1128.

I've also added a quick QOL update for the connectivity scripts to change the default steamdeck to steamdeck.local for mDNS enhacements, and to UI/UX so users can easily find the connection instructions via a QR code/URL link to mount their Steam Deck.

@spmzt

spmzt commented Sep 17, 2026

Copy link
Copy Markdown

Tested again on my Steamdeck, LGTM.

P.S. Not related to this PR, but could you please use python3 instead of python? I'm using FreeBSD (doesn't matter for linux/decky) and I've to change it in order to make tests work:

diff --git a/package.json b/package.json
index 8de0cc6..667353c 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,7 @@
     "clean": "node scripts/clean.mjs",
     "build": "rollup -c",
     "typecheck": "tsc --noEmit",
-    "test": "python -B -m unittest discover -s tests -v",
+    "test": "python3 -B -m unittest discover -s tests -v",
     "package": "node scripts/check-version.mjs && pnpm run clean && pnpm run typecheck && pnpm run build && node scripts/package.mjs",
     "verify-package": "node scripts/verify-package.mjs"
   },

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

plugin-addition Adding a plugin to the Plugin Store

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants