diff --git a/warpgate-protocol-ssh/src/server/session.rs b/warpgate-protocol-ssh/src/server/session.rs
index 7cdad45c..d5c45d4c 100644
--- a/warpgate-protocol-ssh/src/server/session.rs
+++ b/warpgate-protocol-ssh/src/server/session.rs
@@ -1472,12 +1472,17 @@ impl ServerSession {
.map(|(t, opt)| (t.clone(), opt.clone()))
};
- let Some((target, ssh_options)) = target else {
+ let Some((target, mut ssh_options)) = target else {
self.target = TargetSelection::NotFound(target_name.to_string());
warn!("Selected target not found");
return Ok(());
};
+ // Forward username from the authenticated user to the target, if target has no username
+ if ssh_options.username.is_empty() {
+ ssh_options.username = username.to_string();
+ }
+
let _ = self.server_handle.lock().await.set_target(&target).await;
self.target = TargetSelection::Found(target, ssh_options);
Ok(())
diff --git a/warpgate-web/src/admin/Target.svelte b/warpgate-web/src/admin/Target.svelte
index e9ffced1..6a88ac77 100644
--- a/warpgate-web/src/admin/Target.svelte
+++ b/warpgate-web/src/admin/Target.svelte
@@ -148,7 +148,10 @@ async function toggleRole (role: Role) {