Skip to content

fix(ios): support None as an SSH tunnel auth method#1931

Merged
datlechin merged 1 commit into
mainfrom
fix/ios-ssh-none-auth-1912
Jul 21, 2026
Merged

fix(ios): support None as an SSH tunnel auth method#1931
datlechin merged 1 commit into
mainfrom
fix/ios-ssh-none-auth-1912

Conversation

@datlechin

Copy link
Copy Markdown
Member

Summary

Adds iOS parity for the None SSH tunnel auth method.

The None method (for hosts like Tailscale SSH that handle authentication themselves) shipped on macOS in v0.59.0 (#1907, #1909). The iOS app models SSH config with a separate type that was never taught the case, so a macOS connection using None, once synced to iOS, silently decoded to Password and then failed to connect with a misleading "No SSH password provided."

Changes

iOS now honors None SSH tunnels. iOS uses libssh2 too, so this is real support rather than a clean error:

  • SSHConfiguration (TableProModels): add the .none case and decode "none" / "None".
  • iOS SSHTunnel: add authenticateNone, mirroring the macOS NoneAuthenticator sequence (libssh2_userauth_list then libssh2_userauth_authenticated).
  • iOS SSHTunnelFactory: dispatch .none.
  • IOSConnectionImportService: map "none" when importing a .tablepro file.

Tests:

  • Extract the macOS None form gate into SSHAuthMethod.supportsTwoFactorAuthentication (same behavior, now testable) and cover it in TableProTests.
  • iOS model decode tests for .none: the macOS and lowercase raw values, an encode/decode round trip, and the unknown-value fallback to Password.

Testing

  • swift test --filter SSHConfigurationTests: 4/4 pass.
  • swiftlint lint --strict: clean on changed in-scope files.

Notes

  • The macOS feature already shipped, so issue Please add “None” as an authentication method for SSH tunnels #1912 has a reply pointing the reporter to v0.59.0, plus the Tailscale check-mode caveat (that mode rejects none).
  • Out of scope: adding None to the iOS form's auth picker (it is curated to Password / Private Key), and the pre-existing iOS to macOS raw-value casing question.

Ref #1912

@datlechin
datlechin merged commit 9e8a5cf into main Jul 21, 2026
3 checks passed
@datlechin
datlechin deleted the fix/ios-ssh-none-auth-1912 branch July 21, 2026 14:01

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e016d3a031

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

case privateKey
case sshAgent
case keyboardInteractive
case none

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Render None as None in the iOS tunnel summary

When a synced or imported connection uses this newly supported .none value, ConnectionInfoView.swift:107 treats every non-password method as "Private Key". The tunnel can now authenticate successfully without a key, but its connection details misleadingly report Private Key; add an explicit None display case (and ideally handle the other enum cases rather than collapsing them).

Useful? React with 👍 / 👎.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant