Conexão SSH com chaves
Fala pessoal! Vamos falar um pouco de segurança (nunca é demais)?
Se você se conecta em máquinas remotas, servidores principalmente, usando SSH com autenticação de usuário e senha, vale uma atenção. De forma geral, as nuvens já não possibilitam esse tipo de acesso, justamente porque podem abrir possibilidades para que hackers entrem nas suas máquinas.
E por que isso acontece?
Vamos dar um passo atrás. Geralmente as conexões SSH são feitas por portas como 22 ou 2222. É altamente recomendado que estas portas não sejam abertas publicamente, para qualquer IP. Isso porque se um hacker descobrir o IP do seu servidor e usar comandos de port scan ou mesmo o “nmap” (network mapper), poderão localizar estas portas abertas.
Então você me diz que utiliza uma senha forte e que não tem riscos. Não é bem assim.
Invasores geralmente possuem várias ferramentas que possibilitam, entre outras diversas funções, aquelas que ficam testando uma autenticação, seja em sites da internet, seja em portas como SSH, RDP (remote desktop, em servidores Windows), VNC, enfim. Então, se você tem máquinas com IP’s públicos, já vale essa primeira atenção, portas que apenas você ou pessoas autorizadas poderão ter acesso, devem ser restritas aos IP’s das máquinas destas pessoas.
E o que isso tem relação com uso de senha para autenticar via SSH?
Aqui vou abrir um parenteses para falar de chaves SSH antes. Para fazer um paralelo, vamos pensar de forma inovadora, quando você desbloqueia seu celular com a câmera lendo seu rosto, o chamado Face ID, é porque seu rosto é único, mapeado por um software que consegue saber que de fato você, dono do aparelho, quer desbloqueá-lo. Até aqui tudo bem?
Bom, uma chave SSH é como se fosse seu Face ID, sua digital, a íris do seu olho. É uma chave que, uma vez gerada na sua máquina, produz uma versão privada e uma pública. Em máquinas Linux, com o comando “ssh-keygen” você pode gerar as suas chaves, privada e pública. Em máquinas Windows, recomendo usar o PuTTY ou o git bash para quem trabalha com código versionado em repositórios git.
Quando você gera suas chaves SSH, privada e pública, e fornece a pública para um servidor externo, ocorre a validação de suas chaves e isso possibilita seu acesso. Veja, é importante que sua chave privada seja preservada e não fornecida a ninguém. Quando você gera chaves SSH, você pode definir uma senha (isso é bem recomendável), dessa forma além de usar chave para acessar, será necessária a senha da chave para que a validação ocorra.
Mas como autorizo uma chave em um servidor?
Para servidores Linux, seja VPS, VM, em cloud ou on premise, pode se usar um procedimento único, acessando a máquina usando console do provedor de cloud, ou no caso de on premise pelo virtualizador (por exemplo VMWare), enfim, no diretório “home” do usuário que você deseja utilizar, acesse o diretório “.ssh” (se não existir, ele pode ser criado ou pelo comando “ssh-keygen” também é criado).
Dentro do diretório “.ssh”, caso não haja um arquivo chamado “authorized_keys”, você pode criá-lo, usando por exemplo o comando “vim”.
Neste arquivo, vamos colar as chaves públicas que desejamos autorizar para acesso nos servidores que se deseja conceder o acesso.
vim authorized_keys
Se a chave foi adicionada, por exemplo, no diretório “.ssh” do usuário “developer”, então é necessário usá-lo na linha de comando de conexão. Por exemplo, se fossemos conectar em um servidor com o IP 200.10.10.1, onde adicionamos a chave pública, o comando seria:
ssh [email protected]
Como sua chave já está autorizada, a conexão será estabelecida. Caso a chave tenha sido gerada com senha, ela será solicitada neste momento. Ou seja, temos a garantia de chaves SSH e autenticação da mesma para que o acesso seja concedido.
Dúvidas? Comentem aí.
Até a próxima!