diff --git a/pkg/controller/vsphere/session/session.go b/pkg/controller/vsphere/session/session.go
index 69584e3f9ae0589a1d5f027302899d7f301081e8..497e2cf98885733a1ce1180e7fb35eba25346182 100644
--- a/pkg/controller/vsphere/session/session.go
+++ b/pkg/controller/vsphere/session/session.go
@@ -67,6 +67,7 @@ func GetOrCreate(
 			return &session, nil
 		}
 	}
+	klog.Infof("No existing vCenter session found, creating new session")
 
 	soapURL, err := soap.ParseURL(server)
 	if err != nil {
@@ -76,20 +77,26 @@ func GetOrCreate(
 		return nil, fmt.Errorf("error parsing vSphere URL %q", server)
 	}
 
-	soapURL.User = url.UserPassword(username, password)
-
+	// Set user to nil there for prevent login during client creation.
+	// See https://github.com/vmware/govmomi/blob/master/client.go#L91
+	soapURL.User = nil
 	client, err := govmomi.NewClient(ctx, soapURL, insecure)
 	if err != nil {
 		return nil, fmt.Errorf("error setting up new vSphere SOAP client: %w", err)
 	}
 
+	// Set up user agent before login for being able to track mapi component in vcenter sessions list
+	client.UserAgent = "machineAPIvSphereProvider"
+	if err := client.Login(ctx, url.UserPassword(username, password)); err != nil {
+		return nil, fmt.Errorf("unable to login to vCenter: %w", err)
+	}
+
 	session := Session{
 		Client:   client,
 		username: username,
 		password: password,
 	}
 
-	session.UserAgent = "machineAPIvSphereProvider"
 	session.Finder = find.NewFinder(session.Client.Client, false)
 
 	dc, err := session.Finder.DatacenterOrDefault(ctx, datacenter)