Study Notes

SSH

O Secure Shell é um protocolo de aplicação que estabelece um túnel criptografado entre um cliente-servidor.

Para uma comunicação ssh funcionar é preciso:

Cliente: O cliente precisa ter instalado um software de ssh client como o ssh (em Unix) ou o PuTTY no Windows. Além disso, endereço do servidor usuario@ip_servidor (a porta é well-known PORT: tcp 22 inferida).

Como funciona


1. Handshake e Negociação

Primeiro, é estabelecido uma conexão TCP inicial (3-way handshake) na porta 22. Depois, o client e o server trocam informações e negociam para decidir qual protocolo ssh usar, quais algorítimos e etc.

2. Key Exchange

Cliente e servidor utilizam Diffie-Hellman algorithm (ou variantes) para gerarem uma chave de sessão simétrica (sem que a mesma chave seja exposta na rede)

3. Autenticação do Servidor

O servidor envia sua chave pública (host key) para o cliente, que a verifica se conhece/essa chave em ~/.ssh/known_hosts (que armazena, de forma criptografada/hash, em cada linha do arquivo |1|hash_salt|hash_do_host| tipo_chave chave_publica_do_servidor). Ou seja, se é a primeira vez conectando (não conhece o host) é exibido a mensagem: "The authenticity of host servidor.exemplo.com (192.168.1.100) cant be established. ED25519 key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no/fingerprint)?". E, se aceito, os dados do servidor serão salvos no arquivo do cliente. Se a host key não corresponder é mostrado uma mensagem de alerta (pode significar que você está sendo alvo de um ataque ou que o administrador do servidor simplesmente reinstalou o sistema e gerou uma nova chave).

4. Autenticação do Cliente

Comumente, o cliente pode se autenticar de 2 formas diferentes:

  1. Password Authentication: O client conecta usando o nome de usuário e o servidor solicita a senha desse usuário.
  2. Public Key Authentication: É muito mais segura, porém, se perder a chave privada perde o acesso. Nesse método, é usado da criptografia assimétrica novamente, onde o client gera um par de chaves (publica + privada). A chave pública key.pub é copiada para o servidor ~/.ssh/authorized_keys. A configuração do ssh do servidor fica em /etc/ssh/sshd_config.
PasswordAuthentication yes       # Permite login com senha
PubkeyAuthentication yes         # Permite login com chave pública
AuthenticationMethods publickey,password  # Exige os dois
PermitRootLogin no              # Impede root via SSH (recomendado)

how it works

On this page