pingdotgg / pingdotgg/t3code

[Bug]: Open in editor reports no SSH route when using Tailscale SSH without a localhost listener

Open
#11,052 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

accepted bug via-triage
Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

(this issue is brought to you by gpt-6-astra-medium)

Area

apps/server (remote editor discovery), apps/web (editor menu)

Steps to reproduce
  1. Run a T3 server on a Linux host with Tailscale SSH enabled and no conventional SSH listener on localhost port 22.
  2. Connect to that environment from another machine through a URL connection, without a desktop SSH connection profile supplying an explicit SSH alias.
  3. Confirm that ssh <tailnet-host> works from the viewing machine.
  4. Open the project's “Open in editor” menu.
Expected behavior

Offer remote editor links using the working Tailscale SSH destination. A localhost SSH listener should not be required when Tailscale handles SSH connections.

Actual behavior

The menu displays “No SSH route to ” and disables opening the project in an editor, despite successful SSH access from the viewing machine.

Verified diagnostics

Read-only checks from a macOS viewing machine against the affected Linux environment confirmed:

  • A noninteractive SSH login succeeds.
  • tailscale status --json reports BackendState: Running and a valid MagicDNS name.
  • tailscale debug prefs reports RunSSH: true.
  • TCP connections to both 127.0.0.1:22 and [::1]:22 on the remote host fail with connection refused.
  • ss -ltn 'sport = :22' reports no listener.
Cause

RemoteOpenTargets.ts probes localhost port 22 and immediately returns an empty target list if neither loopback family accepts a connection. This happens before Tailscale discovery. The assumption that no local sshd means no SSH destination can work is invalid for Tailscale SSH.

remoteOpen.ts then maps an empty advertised target list, without an explicit SSH profile alias, to remote-unavailable.

Discovery should recognize enabled Tailscale SSH independently of a localhost SSH listener. Tailscale connectivity alone should not be assumed to imply SSH availability.

Impact

Remote opening in an editor is blocked for this valid Tailscale SSH configuration.

Version or commit

Investigated source: d29c56a5c404cb0f58d3b2ac41762fa0d0ac28d4. The affected installed server version was not captured.

Related issues

Related discovery/gating symptoms: #7530 and #8278. This report specifically concerns Tailscale SSH with no localhost SSH listener.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with apps/server/src/environment/RemoteOpenTargets.ts at the cited localhost probe, then trace how apps/web/src/remoteOpen.ts maps advertised targets to the editor menu state. Reproduce the Tailscale SSH setup described in the issue and verify that a valid Tailscale destination is advertised without a localhost listener, while unavailable SSH still remains unavailable.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend, frontend, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
67/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.