fix: 拆分 starssh 的拨号超时与认证超时语义

- 为 LoginInput 新增 DialTimeout,明确区分【TCP/proxy/ssh-agent 拨号超时】和【SSH 握手/认证超时】
- 将 Timeout 收口为握手/认证阶段超时,0 表示不限制,不再在登录入口自动回填默认值
- 新增 effectiveLoginTimeout/effectiveDialTimeout,统一超时决策逻辑
- 调整 login 流程,仅对 login context、ssh.ClientConfig 和握手阶段连接 deadline 使用认证超时
- 调整 transport 拨号链路,默认 TCP dial、proxy dial 与 ssh-agent 建连统一改用 DialTimeout
- 修正 agent forwarding 初始化仍错误复用 LoginInfo.Timeout 的问题
- 保持 LoginSimple 的直观行为:传入 timeout 时同时映射到 Timeout 和 DialTimeout
- 新增 login_timeout_test,覆盖零值不回填、DialTimeout 优先级,以及 ssh-agent 认证路径使用拨号超时的回归测试
This commit is contained in:
2026-04-26 23:29:36 +08:00
parent b29246a9c4
commit 1625997d8f
5 changed files with 143 additions and 18 deletions
+1 -1
View File
@@ -80,7 +80,7 @@ func (s *StarSSH) ensureAgentForwarding() error {
return err
}
keyring, closer, err := newSSHAgentForwarder(s.LoginInfo.Timeout)
keyring, closer, err := newSSHAgentForwarder(effectiveDialTimeout(s.LoginInfo))
if err != nil {
return wrapSSHAgentForwardingUnavailable(err)
}