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:
- Password Authentication: O client conecta usando o nome de usuário e o servidor solicita a senha desse usuário.
- 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)