How to enable SSH on DSM Appliance when deployed via VCFA 9.1.1

In my initial post introducing VMware Data Services Manager (DSM) 9.1.1 features, I mentioned that DSM can now be deployed directly from VCF Automation. As part of a concerted effort to make Data Services (and the VCF platform) highly secure, SSH access is not automatically enabled on the DSM 9.1.1 appliance. In this post, I will show you how to enable it should you need SSH access to the DSM appliance.

The first step is to gain SSH Access to the vCenter server. The steps are outlined in this Knowledge Base article on troubleshooting. Once you’ve managed to get a shell open on your vCenter server, the following commands can be used to retrieve the root password to gain access to the Supervisor.

Command> shell
Shell access is granted to root

root@sfo-w01-vc01 [ ~ ]# cd /usr/lib/vmware-wcp/
root@sfo-w01-vc01 [ /usr/lib/vmware-wcp ]# ./decryptK8Pwd.py
Read key from file
Connected to PSQL
Cluster: domain-c9:09ddf26c-f7e2-4333-b023-aa4a36024b79
IP: 192.168.1.200
PWD: AbCdEfGhIj
------------------------------------------------------------
root@sfo-w01-vc01 [ /usr/lib/vmware-wcp ]# sshpass -p 'AbCdEfGhIj' ssh -o \
stricthostkeychecking=no root@192.168.1.200
Last login: Fri Sep 18 10:45:31 2026 from 192.168.1.130
===============================================================================
EXERCISE EXTREME CAUTION when accessing a vSphere Supervisor control plane VM.
When running commands on a Supervisor control plane VM, you are acting with
elevated permissions that BYPASS PROTECTIONS. You may cause DATA LOSS, disrupt
running workloads, or PERMANENTLY DAMAGE the Supervisor, Supervisor Services
including the vSphere Kubernetes Service (VKS), or VKS Clusters.
Graceful recovery from changes made with these elevated permissions may not
be possible; it may be necessary to REDEPLOY THE ENTIRE SUPERVISOR, recreate
all VKS clusters, and redeploy all workloads.
===============================================================================
08:09:45 up 12 days, 22:03,  0 users,  load average: 7.72, 6.12, 5.87
tdnf update info not available yet!
root@423789b3f055e8e9961d56e456f323d6 [ ~ ]#

Once successfully logged onto the Supervisor, query the Data Service Manager deployment. In VCFA 9.1.1, the DSM is deploying using the VM Service feature. The follow commands can be used to check the name of the appliance and the opened ports on it. Note that on the Control Plane VM (Supervisor), the kubectl command is aliased to a simple ‘k’.

root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k get vm -A | grep dsm
svc-dsm-provider-operator-r77bq   dsm-appliance                     PoweredOn     10d


root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k get vmservice -n svc-dsm-provider-operator-r77bq
NAME                          TYPE           AGE
dsm-appliance-internal        ClusterIP      10d
dsm-appliance-lb              LoadBalancer   10d


root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k get vmservice -n svc-dsm-provider-operator-r77bq \
dsm-appliance-lb -o yaml
apiVersion: vmoperator.vmware.com/v1alpha5
kind: VirtualMachineService
metadata:
  creationTimestamp: "2026-09-10T13:25:35Z"
  finalizers:
  - vmoperator.vmware.com/virtualmachineservice
  generation: 1
  name: dsm-appliance-lb
  namespace: svc-dsm-provider-operator-r77bq
  ownerReferences:
  - apiVersion: provider.dataservices.vmware.com/v1alpha1
    blockOwnerDeletion: true
    controller: true
    kind: DSMAppliance
    name: dsm-appliance
    uid: 14347c54-628d-4a35-ad8d-802d02ea23bc
  resourceVersion: "2065849"
  uid: a25607df-b720-4e58-bb86-cee6525ea006
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    dsm.vmware.com/appliance-name: dsm-appliance
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.168.41.72

By default, the DSM appliance is only servicing the https port, 443. This allows administrator to connect to the DSM UI via a browser using the loadBalancer IP address, but no other ports are accessible via that address. To allow SSH access (port 22), create a new YAML manifest similar to the above for an additional VM Service on the DSM Appliance. A sample manifest will look something similar to the following:

apiVersion: vmoperator.vmware.com/v1alpha5
kind: VirtualMachineService
metadata:
  name: dsm-appliance-lb-additional
  namespace: svc-dsm-provider-operator-r77bq
spec:
  ports:
  - name: ssh
    port: 22
    protocol: TCP
    targetPort: 22
  selector:
    dsm.vmware.com/appliance-name: dsm-appliance
  type: LoadBalancer

Apply the manifest. This creates a new VM Service. Note that the SSH port 22 is opened on a different IP address compared to the IP address associated with the https port above. However both redirect to the same DSM appliance:

root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k apply -f dsm-ssh.yaml
virtualmachineservice.vmoperator.vmware.com/dsm-appliance-lb-additional created


root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k get vmservice -n svc-dsm-provider-operator-r77bq
NAME TYPE AGE
dsm-appliance-internal ClusterIP 10d
dsm-appliance-lb LoadBalancer 10d
dsm-appliance-lb-additional LoadBalancer 14s


root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k get vmservice -n svc-dsm-provider-operator-r77bq dsm-appliance-lb-additional -o yaml
apiVersion: vmoperator.vmware.com/v1alpha5
kind: VirtualMachineService
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"vmoperator.vmware.com/v1alpha5","kind":"VirtualMachineService","metadata":{"annotations":{},"name":"dsm-appliance-lb-additional","namespace":"svc-dsm-provider-operator-r77bq"},"spec":{"ports":[{"name":"ssh","port":22,"protocol":"TCP","targetPort":22}],"selector":{"dsm.vmware.com/appliance-name":"dsm-appliance"},"type":"LoadBalancer"}}
  creationTimestamp: "2026-09-21T08:27:34Z"
  finalizers:
  - vmoperator.vmware.com/virtualmachineservice
  generation: 1
  name: dsm-appliance-lb-additional
  namespace: svc-dsm-provider-operator-r77bq
  resourceVersion: "16164207"
  uid: ae4a417c-bedc-4d08-bd6b-b11264b47751
spec:
  ports:
  - name: ssh
    port: 22
    protocol: TCP
    targetPort: 22
  selector:
    dsm.vmware.com/appliance-name: dsm-appliance
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.168.41.73

At this point, SSH is opened to the DSM appliance via a new loadBalancer IP address. This means that we should be able to SSH to it. However, in order to be able to login as the root user, the root password must also be retrieved. This is help in a secret called dsm-appliance-root-cred in the same namespace. Here is just one example of how to retrieve it.

root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k get secrets -n svc-dsm-provider-operator-r77bq
NAME                                 TYPE                             DATA   AGE
dsm-appliance-root-cred              Opaque                           1      10d
dsm-po-values                        Opaque                           1      10d
dsm-provider-operator-pull-regcred   kubernetes.io/dockerconfigjson   1      10d


root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# k get secrets -n svc-dsm-provider-operator-r77bq \
dsm-appliance-root-cred --template='{{.data.root_password}}' | base64 -d; echo
9L0b^9Lu%V@8mXl
root@423789b3f055e8e9961d56e456f323d6 [ ~ ]#

Now we have SSH opened, we have the IP address to reach the DSM appliance and we have the root password. Let’s see if we can successfully access it.

root@423789b3f055e8e9961d56e456f323d6 [ ~ ]# ssh root@192.168.41.73
Welcome to Photon 5.0 (\m) - Kernel \r (\l)
(root@192.168.41.73) Password: 9L0b^9Lu%V@8mXl

root@photon-6ca473c9efbb [ ~ ]# docker ps
CONTAINER ID   IMAGE                                                  COMMAND                  CREATED       STATUS       PORTS                      NAMES
dc797efaaa57   dsm-tsql-provisioner:9.1.1.0.25641961                  "/provisioner --conf…"   5 days ago    Up 5 days                               dsm-tsql-provisioner-service
77121de7aacd   vc-session-manager:9.1.1.0.25641961                    "/vc-session-manager…"   10 days ago   Up 10 days                              vc-session-manager-service
e155538f05d9   telegraf:v1.38.4_vmware.1                              "/bin/sh -c 'telegra…"   10 days ago   Up 10 days                              dsm-telegraf-service
c50cdede22b4   provider-update-service:9.1.1.0.25641960               "/bin/sh -c '/usr/ja…"   10 days ago   Up 10 days                              provider-update-service
8ecc8312b858   provider-monitoring-service:9.1.1.0.25641960           "/bin/sh -c '/usr/ja…"   10 days ago   Up 10 days                              monitoring-service
2ddc5884de06   registry:3                                             "/entrypoint.sh /etc…"   10 days ago   Up 10 days                              docker-registry
1297b75df54e   simplified-gateway:9.1.1.0.25641961                    "/gateway --v=5 --ds…"   10 days ago   Up 10 days   127.0.0.1:5443->6443/tcp   sgw-service
554efa07f087   dsm/cluster-api-controller:1.13.2_vmware.2             "/manager --leader-e…"   10 days ago   Up 10 days                              kubernetes-service-capi-1
aee34cb51ecf   dsm/kubeadm-bootstrap-controller:1.13.2_vmware.2       "/manager --leader-e…"   10 days ago   Up 10 days                              kubernetes-service-kadm-1
234b8a29a113   dsm/cluster-api-ipam-provider-in-cluster:1.1.0         "/manager --leader-e…"   10 days ago   Up 10 days                              kubernetes-service-caip-1
3d0d49c989fe   dsm/kubeadm-control-plane-controller:1.13.2_vmware.2   "/manager --leader-e…"   10 days ago   Up 10 days                              kubernetes-service-kcp-1
1718cea3e5e0   dsm/cluster-api-vsphere-controller:1.16.1_vmware.2     "/manager --leader-e…"   10 days ago   Up 10 days                              kubernetes-service-capv-1
cf767b7526af   kubernetes-service:9.1.1.0.25641963                    "/opt/moneta/kuberne…"   10 days ago   Up 10 days   0.0.0.0:6443->6443/tcp     kubernetes-service
a2b5b3972550   provider-service:9.1.1.0.25641960                      "/usr/bin/bash -c 'v…"   10 days ago   Up 10 days                              provider-service
3f4d4399ee9d   bitnami-influxdb:1.12.4-photon-5                       "/bin/sh -c 'influxd…"   10 days ago   Up 10 days                              influxdb-service
85df57a66487   provider-ui:9.1.1.0.25641967                           "/bin/sh -c '/usr/sb…"   10 days ago   Up 10 days   0.0.0.0:443->8443/tcp      provider-ui


root@photon-6ca473c9efbb [ ~ ]# kg get postgresclusters -A
NAMESPACE                   NAME                 STATUS   STORAGE   VERSION                AGE
7b6916-tenant-03-ns-g8krt   tenant-03-pg-db-01   Ready    20Gi      18.4+vmware.v9.1.1.0   10d

Everything looks to be working as expected. Remember that once you are finished with your troubleshooting on the DSM appliance, remove the VM Service that was created earlier. This will ensure that SSH access to the DSM appliance is once again removed. Retain the YAML manifest though, as you can re-apply it when you need to open SSH access once again.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.