Description
Describe the bug
When attempting to establish an SSH connection to a host managed by Tailscale, and Tailscale SSH requires an additional authentication step (directing the user to visit a login.tailscale.com
URL), XPipe fails to start the shell. It appears XPipe times out waiting for a standard shell prompt, as it doesn't recognize or handle the intermediate authentication message from Tailscale.
Steps to Reproduce
- Configure a remote host to use Tailscale SSH.
- Ensure the Tailscale configuration or ACLs require the interactive web-based check for SSH sessions (
To authenticate, visit: https://login.tailscale.com/...
). - Add this host as an SSH connection in XPipe.
- Attempt to open a terminal/shell session to this host via XPipe.
Expected behavior
Ideally, XPipe should detect this specific output from Tailscale SSH. It could:
- Display the authentication message and URL prominently to the user (e.g., in the connection log window or a modal dialog).
- Potentially pause the timeout countdown while waiting for the user to authenticate via the provided URL.
- Allow the connection to proceed once authentication is completed externally.
Actual behavior
XPipe doesn't seem to process the Tailscale authentication message. It waits for a standard shell response, which never comes because the SSH session is blocked pending web authentication. After a timeout period, XPipe throws an error indicating the shell did not start up in time, including the Tailscale message within the exception details.
Error Log
06:15:57:716 - error: Shell did not start up in time as we did not receive any response.
# Tailscale SSH requires an additional check.
# To authenticate, visit: https://login.tailscale.com/a/la584e6c010ed1
io.xpipe.core.process.ProcessOutputException: Shell did not start up in time as we did not receive any response.
# Tailscale SSH requires an additional check.
# To authenticate, visit: https://login.tailscale.com/a/la584e6c010ed1
at io.xpipe.core.process.ProcessOutputException.withParagraph(ProcessOutputException.java:23)
at io.xpipe.ext.proc.util.e.cf(SourceFile:1465)
at io.xpipe.ext.proc.n.p(SourceFile:1689)
at io.xpipe.ext.proc.ssh.o.p(SourceFile:113)
at io.xpipe.ext.proc.n.D(SourceFile:587)
at io.xpipe.ext.proc.n.start(SourceFile:276)
at io.xpipe.app.ext.ShellSession.start(ShellSession.java:30)
at io.xpipe.core.store.SingletonSessionStore.startSessionIfNeeded(SingletonSessionStore.java:54)
at io.xpipe.app.ext.ShellStore.getOrStartSession(ShellStore.java:27)
at io.xpipe.ext.base.action.RunScriptActionMenu$TerminalRunActionProvider$Action.execute(RunScriptActionMenu.java:36)
at io.xpipe.app.comp.store.StoreEntryWrapper.runAction(StoreEntryWrapper.java:345)
at io.xpipe.app.comp.store.StoreEntryComp.lambda$buildMenuItemForAction$46(StoreEntryComp.java:508)
at io.xpipe.app.util.ThreadHelper.lambda$runFailableAsync$1(ThreadHelper.java:45)
at io.xpipe.app.util.ThreadHelper.lambda$wrap$0(ThreadHelper.java:22)
at java.lang.VirtualThread.run(VirtualThread.java:329)
Environment
- XPipe Version: 15.8/2025-03-23-08-10
- Operating System: CachyOS (Arch Linux)
- Tailscale Version (Client): 1.80.3
- Remote Host OS: Arch Linux
- Remote Tailscale Version (Server): 1.80.0
Additional context
This issue prevents users from leveraging XPipe's shell capabilities with Tailscale SSH setups that enforce this additional authentication layer, which is becoming increasingly common for enhanced security.