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.