O protocolo SSH é definido pelo que os programas ssh e sshd aceitam. (Existe um padrão definido para isso, mas é uma coisa após o fato e é principalmente ignorado quando uma das implementações adiciona novos recursos.) Uma vez que existem várias implementações daqueles (OpenSSH, F-Secure, PuTTY, etc. ) ocasionalmente você descobrirá que um deles não suporta o mesmo protocolo que os outros. Basicamente, define a negociação de autenticação e a criação de um fluxo de dados multiplexado. Esse fluxo pode transportar uma ou mais sessões de terminal (com OpenSSH e ControlMaster ) e zero ou mais túneis (encaminhando conexões de soquete locais ou remotas para o outro lado; o encaminhamento X11 é um caso especial de encaminhamento remoto). Também define "subsistemas" que podem ser usados no fluxo; As sessões de terminal são o subsistema básico, mas outras podem ser definidas. sftp é um desses.
ssh o utilitário usa o protocolo SSH para falar com sshd em outra máquina. Como isso funciona depende de qual versão ele é (veja acima), mas a essência é que ele tenta descobrir qual versão do protocolo SSH usar, então ele e sshd negociam os métodos de autenticação suportados, então ele tenta autenticar você usando um desses métodos (solicitando a senha do usuário remoto / paasword da chave privada / frase da chave S conforme necessário) e, na autenticação bem-sucedida, configura um fluxo multiplexado com o sshd .
sshd , como dito acima, implementa o lado do servidor do protocolo SSH.
sftp é um subsistema (atualmente, o único padrão) definido na maioria das implementações de sshd . Quando o subsistema SFTP é solicitado, sshd conecta sftp-server à sessão do subsistema; o programa sftp , em seguida, fala com ele, da mesma forma que ftp , mas com as transferências de arquivos multiplexadas no fluxo, em vez de usar conexões separadas, como com ftp .
su não tem nada a ver com ssh , sshd ou sftp , exceto na medida em que pode haver módulos PAM para organizar o fluxo multiplexado disponível no shell ou programa executado por ele.