Primeiro login:
- L envia o nome de usuário e a solicitação de autenticação SSH para S1
- S1 retorna mecanismos de autenticação SSH disponíveis, com "senha" como um deles
- L escolhe "senha" e envia a senha simples para S1
- S1 fornece nome de usuário e senha para a pilha do PAM.
- No S1, o PAM (geralmente
pam_krb5
oupam_sss
) solicita um TGT (ticket de concessão de ticket) do Kerberos KDC.- S1 obtém um TGT.
- Estilo antigo (sem preauth): S1 envia um AS-REQ e recebe um AS-REP contendo o TGT.
- Novo estilo (com preauth): S1 usa sua senha para criptografar o registro de data e hora atual e anexa-o ao AS-REQ. O servidor descriptografa o registro de data e hora e verifica se está dentro do tempo permitido. se a descriptografia falhar, a senha será imediatamente rejeitada. Caso contrário, um TGT é retornado no AS-REP.
- S1 tenta descriptografar o TGT usando uma chave gerada a partir de sua senha. Se a decodificação for bem-sucedida, a senha será aceita como correta.
- O TGT é armazenado em um cache de credenciais recém-criado. (Você pode inspecionar a variável de ambiente
$KRB5CCNAME
para localizar o ccache ou usarklist
para listar seu conteúdo.)
- S1 obtém um TGT.
- O S1 usa o PAM para executar verificações de autorização (dependentes da configuração) e abre a sessão.
- Se
pam_krb5
for chamado no estágio de autorização, ele verificará se~/.k5login
existe. Em caso afirmativo, ele deve listar o principal do Kerberos do cliente. Caso contrário, a única entidade principal permitida éusername@DEFAULT-REALM
.
- Se
Segundo login:
- S1 envia um nome de usuário e uma solicitação SSH automática para S2
- S2 retorna auth mechs disponíveis, sendo um deles "gssapi-with-mic" 1
- O S1 solicita um tíquete para
host/s2.example.com@EXAMPLE.COM
, enviando um TGS-REQ com o TGT para o KDC e recebendo um TGS-REP com o tíquete de serviço dele. - S1 gera um "AP-REQ" (pedido de autenticação) e envia para S2.
- S2 tenta descriptografar o pedido. Se for bem sucedido, a autenticação é feita. (PAM não é usado para autenticação.)
- Outros protocolos, como o LDAP, podem optar por criptografar outras transmissões de dados com uma "chave de sessão" incluída na solicitação; no entanto, o SSH já negociou sua própria camada de criptografia.
- Se a autenticação for bem-sucedida, o S2 usará o PAM para realizar verificações de autorização e abrir a sessão, o mesmo que o S1.
- Se o encaminhamento de credenciais estiver ativado e o TGT tiver o sinalizador "encaminhado", o S1 solicitará uma cópia do TGT do usuário (com o sinalizador "encaminhado" definido) e o enviará para o S2, onde será armazenado em um novo ccache . Isso permite logins recursivos autenticados pelo Kerberos.
Note que você também pode obter TGTs localmente. No Linux, você pode fazer isso usando kinit
e, em seguida, conectar usando ssh -K
. No Windows, se você estiver conectado a um domínio do Windows AD, o Windows fará isso por você; caso contrário, MIT Kerberos pode ser usado. O PuTTY 0.61 suporta o uso do Windows (SSPI) e do MIT (GSSAPI), embora você deva habilitar o encaminhamento (delegação) manualmente.
1 gssapi-keyex
também é possível, mas não foi aceito no OpenSSH oficial.