Estou tentando configurar sem senha ssh
. Eu li os tutoriais básicos na web, mas algo está me incomodando sobre o processo básico.
Digamos que eu esteja sentado em um cliente e queira fazer login em um servidor (que por acaso está na rede local, mas isso não é importante). De qualquer forma, faz sentido para mim que eu queira gerar o par de chaves no servidor e copiar a chave pública no cliente. Há duas razões pelas quais faz sentido gerar o par de chaves no servidor:
- Você já está conectado à conta do servidor na qual deseja ssh sem senha, para que as informações de login possam ser incluídas no par de chaves
- Você obviamente quer apenas a chave pública do servidor no cliente
Ao fazer ssh no servidor, o cliente envia a chave pública criada no servidor. A chave pública corresponde à chave privada no servidor e o login é permitido.
Mas todo tutorial que leio tem o par de chaves sendo criado no cliente e fazendo meu cérebro explodir. Espero que ler isso não faça seu cérebro explodir. o que estou perdendo?
Acho que dar um passo para trás e observar como a criptografia assimétrica funciona ajudaria. Cada entidade (cliente/servidor) começa com um par de chaves - uma chave pública e uma chave privada, que são matematicamente vinculadas.
No processo padrão, copiamos a chave pública do cliente para o servidor. Quando o cliente se conecta, o servidor precisa validar que o cliente realmente possui esse par de chaves (lembre-se de que a chave pública deve ser pública, ou seja, compartilhada com outras partes). Assim, ele pega a chave pública, criptografa uma mensagem aleatória com ela (*) e a envia ao cliente. O cliente recebe a mensagem criptografada, a descriptografa com sua chave privada e pergunta ao servidor - 'Ei, essa é a mensagem?'. Se o servidor concordar, o cliente é considerado autenticado e a conexão prossegue.
Vamos inverter o cenário e ver o que acontece. O servidor tem um par de chaves e a chave pública está com o cliente. A chave privada é necessária para provar a identidade e está disponível apenas para o servidor. Assim, um cliente pode verificar a identidade do servidor, mas o inverso não é possível. Qualquer um que colocar as mãos na chave pública do servidor (que, novamente, deve ser pública), pode se conectar ao servidor. Este é obviamente um problema de segurança.
Ao fazer com que cada cliente use seu próprio par de chaves com a chave privada no lado do cliente, o servidor pode verificar a identidade de cada cliente individual. Somente os clientes que têm suas chaves públicas adicionadas à lista de chaves autorizadas do servidor podem se conectar. As chaves privadas no lado do cliente geralmente são protegidas com uma camada adicional de criptografia e uma senha.