diff --git a/app.go b/app.go index 9bd1565..eabc3b5 100644 --- a/app.go +++ b/app.go @@ -337,10 +337,20 @@ func (a *App) runSaveRemotePipeline(pngBytes []byte) error { } slog.Info("save-remote dispatch", "host", cfg.SSH.Host, "user", cfg.SSH.User, "port", cfg.SSH.Port, - "png_size", len(pngBytes)) + "auth_method", cfg.SSH.AuthMethod, "png_size", len(pngBytes)) + + // Select the uploader by auth method: Kerberos delegates to the system + // ssh/scp binaries (reusing the kinit credential cache), while builtin + // uses the in-process Go SSH client. + var uploader application.SSHUploader + if cfg.SSH.IsKerberos() { + uploader = sshpkg.NewKerberosUploader(cfg.SSH) + } else { + uploader = sshpkg.NewUploader(cfg.SSH) + } svc := &application.CaptureAndSSHService{ - Uploader: sshpkg.NewUploader(cfg.SSH), + Uploader: uploader, Clipboard: a.clip, Notifier: &runtimeNotifier{ctx: a.ctx}, Cfg: cfg.SSH, @@ -446,7 +456,17 @@ func (a *App) TestConnection(cfg domain.S3Config) error { func (a *App) TestSSHConnection(cfg domain.SSHConfig) error { slog.Info("RPC TestSSHConnection", "host", cfg.Host, "user", cfg.User, "port", cfg.Port, + "auth_method", cfg.AuthMethod, "strict_host_key", cfg.StrictHostKey, "has_password", cfg.Password != "") + // Kerberos auth delegates to the system ssh binary (see KerberosUploader) + // so its probe path differs from the in-process client. + if cfg.IsKerberos() { + if err := sshpkg.TestKerberosConnection(a.ctx, cfg); err != nil { + slog.Error("RPC TestSSHConnection (kerberos) failed", "err", err) + return err + } + return nil + } if err := sshpkg.TestConnection(a.ctx, cfg); err != nil { slog.Error("RPC TestSSHConnection failed", "err", err) return err diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue index 22341a8..fe3fdb2 100644 --- a/frontend/src/views/SettingsView.vue +++ b/frontend/src/views/SettingsView.vue @@ -43,6 +43,7 @@ interface SSHConfig { host: string port: number user: string + authMethod: string password: string pathPrefix: string strictHostKey: boolean @@ -77,6 +78,7 @@ function defaultConfig(): AppConfig { host: '', port: 22, user: '', + authMethod: 'builtin', password: '', pathPrefix: 'snapgo/', strictHostKey: false, @@ -280,14 +282,26 @@ onMounted(load) placeholder="22" /> - - +
+ + + +