Repository navigation
Replies: 1 comment
|
+1 for SSH environments on mobile. My use case is Tailscale SSH, which doesn't use SSH keys, so it'd be great if generating a key were optional. I'd like the same flow as desktop: connect over SSH, start the server, and tunnel to it only while I'm using it. I don't want a server always running and reachable on my VPS. Hoping iOS gets this too. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
The mobile app can only reach an environment's HTTP listener: on the LAN, over Tailscale, at a public URL, or through T3 Connect. Plenty of machines are only reachable over SSH: a server whose only open port is 22, a dev container behind a jump host, a work bastion. The desktop app already covers this with desktop-managed SSH environments. The phone has no equivalent.
Related reports:
Would you approve this direction, with Android first?
The Android app keeps its own ed25519 key and a small SSH config, and implements the
SshEnvironmentGatewayclient capability the desktop already implements.registerSsh, the connection supervisor and saved environments stay as they are, and so do the server and the contracts.Host,HostName,User,Port,ProxyJump,HostKeyAlias;Match,Include,ProxyCommandand host patterns are flagged as unsupported), and review or remove trusted host keys.127.0.0.1on the phone, and pairs through it.prepare: reuse the session while it's open and the server answers, otherwise reconnect, and keep the bearer token while it still has the standard scopes. A host key that is unknown or has changed blocks the reconnect with an explanation. New keys are only trusted while adding an environment.Implementation:
ProxyJumphops, SHA-1, CBC and DSA algorithms switched off, and keepalives so a dead network closes the forward.packages/ssh/src/tunnel.tsinto a Node-freeremoteScripts.tsthe app can import. The desktop's generated scripts are byte-identical before and after.InetAddress.getLoopbackAddress()is::1there, so the forward binds127.0.0.1explicitly.Prototype: compare view. The SSH part adds about 4,000 lines, of which roughly 1,300 are tests and 770 are the moved scripts. The branch also carries the client-certificate commit from #17218. An APK is in the fork's release, and it's what I use on my phone now.
Checked so far:
sshdprocesses: a tunnel-only jump key (restrict,port-forwarding,permitopen=…), fingerprints compared withssh-keygen, unknown and changed host keys, and a blackholed network.vp run check:changedon the branch.Not covered: iOS, which would need a Swift SSH library such as SwiftNIO SSH, and push notifications for these environments.
If the direction works for you, I'd split it into three PRs: the script move (no behavior change), the native module and gateway, then the Settings and Add environment UI. Would you take Android first, and is there a scope you'd rather see?
(Drafted with Claude Code / Claude Opus 5.5, which also wrote the implementation.)
All reactions