I'm not convinced we want more and more utility methods on AbstractSoftwareProcessSshDriver. As we add more and more variants, it will make specific use-cases have simpler code but over time I think it will make the class a lot harder to use and understand. Perhaps better to group related methods together into some class; and to take the hit of iterating over something rather than adding a method that does the iterating for you.

For example, copyTemplateMap makes me think a map is going to be copied rather than each entry in the map is a template+dest resource. Renaming it to `copyTemplates` might be easier to understand but does it really pull its weight?

Also, I wonder whether copyTemplate should be on AbstractSoftwareProcessSshDriver at all. Perhaps it would be cleaner to have a separate class for processing templates.

I'm not sure what the right answer is, but I definitely don't want us to end up with dozens of utility methods here with lots of overloading and similar things. For example, look at the state that SshMachineLocation methods are in (e.g. exec*, copy*, installTo) - not a good API to be supporting long term!