Are you trying to provision services and apps? Kubernetes. Are you trying to provision Virtual machines? have a look at rancher harvester. Are you trying to replicate server setup to make it unified? Ansible Are you trying to explicitly control servers with instructions? Terraform
SSH works in containers too, all you have to do is either open the ports or forward.
Once they finish their ipv6 features, Rancher Harvester is going to be one interesting beast for on-premise. You may setup your virtual machines with the regular kubernetes api (libvirt), provision storage throughout the network and could even dife into software defined everything.
If none of these words mean anything to you though, the most common way for smaller orgs is either ansible or terreaform. Dont complicate things just to make them shiny ;)
The most complex thing perhaps is to configure the storage encryption with LUKS or similar. You get that for free in the cloud if you don’t care about letting your cloud provider play with your private keys.
Pyinfra to manage and install software (I'm fed up with custom DSLs, pyinfra is pure python)