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"
/>
-
-
+
+
+
+
+