Is SSH over TLS 1.2/1.3 overkill? I am designing a protocol that will have security in mind as one of its key goals. Currently I have selected SSH with TLS as the underlying transport.

I selected SSH because it had a variety of extensible authentication methods built-in already, which would not only make it easier to add my own in the future but (in some cases) make it unnecessary to add any at all, depending on how the user wants to authenticate themselves. It also has file transfers built-in, which is a nice bonus for me too.

With that in mind, should I continue using SSH over TLS, or is that overkill? Or should I switch to using normal non-SSH-based sockets?

Side note: this protocol will not be used to access remote systems via a command terminal.
SSH over TLS isn't just an overkill, it's a software bloat / design creep. 


Both protocols provides confidentiality, integrity, and authenticity guarantees, so using two is redundent. And coding for both of them would increase the size of the software, making it harder to maintain software quality, efficiency, and security. 


Benefit of SSH


SSH is already a very good application data encapsulation protocol, and in fact, the most widely used SSH implementation "OpenSSH" allows you to setup your own service running side-by-side with sftp. In my opinion, SSH is easier to setup and have many desireable features for specialized application.

On the other hand TLS carries too much legacy, it has too many options that needs to be supported to maintain compatibility with existing implementations. Even if you implement no support for versions before TLS-1.3, incorporating support for it in code still require considerable amount of expertized skills.