Articles

Como configurar a autenticação baseada em chaves SSH num servidor Linux

Posted on

Introdução

SSH, ou shell seguro, é um protocolo encriptado utilizado para administrar e comunicar com servidores. Ao trabalhar com um servidor Linux, é provável que passe a maior parte do seu tempo numa sessão terminal ligada ao seu servidor através de SSH.

Embora existam algumas formas diferentes de iniciar sessão num servidor SSH, neste guia, vamos concentrar-nos na configuração de chaves SSH. As chaves SSH proporcionam uma forma fácil, mas extremamente segura, de iniciar sessão no seu servidor. Por esta razão, este é o método que recomendamos para todos os utilizadores.

Como funcionam as chaves SSH?

Um servidor SSH pode autenticar clientes usando uma variedade de métodos diferentes. O mais básico destes métodos é a autenticação por senha, que é fácil de usar, mas não a mais segura.

P>As senhas são enviadas para o servidor de forma segura, mas geralmente não são complexas ou suficientemente longas para serem resistentes a atacantes repetidos e persistentes. O poder de processamento moderno combinado com scripts automatizados torna muito possível a forçagem de uma conta protegida por palavra-passe. Embora existam outros métodos para acrescentar segurança adicional (fail2ban, etc.), as chaves SSH provam ser uma alternativa fiável e segura.

SSH são dois pares de chaves criptográficas seguras que podem ser usadas para autenticar um cliente a um servidor SSH. Cada par de chaves consiste numa chave pública e numa chave privada.

A chave privada é retida pelo cliente e deve ser mantida em absoluto segredo. Qualquer compromisso da chave privada permitirá ao atacante entrar nos servidores que estão configurados com a chave pública associada, sem autenticação adicional. Como precaução adicional, a chave pode ser codificada em disco com uma frase-chave.

A chave pública associada pode ser partilhada livremente sem quaisquer consequências negativas. A chave pública pode ser utilizada para encriptar mensagens que só a chave privada pode decifrar. Esta propriedade é utilizada como uma forma de autenticação usando o par de chaves.

A chave pública é carregada para um servidor remoto no qual se quer poder iniciar sessão com SSH. A chave é adicionada a um ficheiro especial dentro da conta do utilizador em que se vai iniciar sessão chamado ~/.ssh/authorized_keys.

Quando um cliente tenta autenticar-se usando chaves SSH, o servidor pode testar o cliente sobre se ele está na posse da chave privada. Se o cliente puder provar que possui a chave privada, uma sessão shell é gerada ou o comando solicitado é executado.

Como criar chaves SSH

O primeiro passo para configurar a autenticação da chave SSH no seu servidor é gerar um par de chaves SSH no seu computador local.

Para tal, podemos usar um utilitário especial chamado ssh-keygen, que está incluído com o conjunto de ferramentas padrão OpenSSH. Por defeito, isto irá criar um par de chaves RSA de 2048 bits, o que é bom para a maioria dos usos.

No seu computador local, gere um par de chaves SSH digitando:

ssh-keygen
Generating public/private rsa key pair.Enter file in which to save the key (/home/username/.ssh/id_rsa):

O utilitário irá pedir-lhe para seleccionar um local para as chaves que serão geradas. Por defeito, as chaves serão armazenadas no directório ~/.ssh dentro do directório home do seu utilizador. A chave privada será chamada id_rsa e a chave pública associada será chamada id_rsa.pub.

Usualmente, o melhor é manter a localização por defeito nesta fase. Ao fazê-lo, permitirá ao seu cliente SSH encontrar automaticamente as suas chaves SSH ao tentar autenticar. Se desejar escolher um caminho não padrão, digite-o agora, caso contrário, prima ENTER para aceitar o padrão.

Se tiver gerado anteriormente um par de chaves SSH, poderá ver um prompt com o seguinte aspecto:

/home/username/.ssh/id_rsa already exists.Overwrite (y/n)?

Se optar por sobregravar a chave no disco, já não poderá autenticar-se usando a chave anterior. Tenha muito cuidado ao seleccionar sim, pois este é um processo destrutivo que não pode ser invertido.

Created directory '/home/username/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again: 

Next, ser-lhe-á pedido que introduza uma frase-chave para a chave. Esta é uma frase-chave opcional que pode ser usada para encriptar o ficheiro da chave privada no disco.

Pode estar a perguntar-se que vantagens oferece uma chave SSH se ainda precisar de introduzir uma frase-chave. Algumas das vantagens são:

  • A chave SSH privada (a parte que pode ser protegida por frases-passe), nunca é exposta na rede. A frase-chave só é utilizada para decifrar a chave na máquina local. Isto significa que a força bruta baseada na rede não será possível contra a frase-chave.
  • A chave privada é mantida dentro de um directório restrito. O cliente SSH não reconhecerá as chaves privadas que não são mantidas em directórios restritos. A chave em si deve também ter permissões restritas (leitura e escrita apenas disponíveis para o proprietário). Isto significa que outros utilizadores do sistema não podem bisbilhotar.
  • li> Qualquer atacante que deseje decifrar a frase-chave privada SSH já deve ter acesso ao sistema. Isto significa que eles já terão acesso à sua conta de utilizador ou à conta de raiz. Se estiver nesta posição, a frase-chave pode impedir o atacante de entrar imediatamente nos seus outros servidores. Isto dar-lhe-á tempo para criar e implementar um novo par de chaves SSH e remover o acesso à chave comprometida.

p>Desde que a chave privada nunca seja exposta à rede e esteja protegida através de permissões de ficheiro, este ficheiro nunca deverá ser acessível a mais ninguém para além de si (e do utilizador root). A frase-chave serve como uma camada adicional de protecção no caso destas condições serem comprometidas.

Uma frase-chave é uma adição opcional. Se introduzir uma, terá de a fornecer sempre que utilizar esta chave (a menos que esteja a executar software de agente SSH que armazene a chave decifrada). Recomendamos a utilização de uma frase-chave, mas se não quiser definir uma frase-chave, pode simplesmente premir ENTER para contornar este aviso.

Your identification has been saved in /home/username/.ssh/id_rsa.Your public key has been saved in /home/username/.ssh/id_rsa.pub.The key fingerprint is:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

Tem agora uma chave pública e privada que podem ser utilizadas para autenticar. O passo seguinte é colocar a chave pública no seu servidor para que possa usar a autenticação da chave SSH para iniciar sessão.

Como incorporar a sua chave pública ao criar o seu servidor

Se estiver a iniciar um novo servidor DigitalOcean, pode incorporar automaticamente a sua chave pública SSH na conta raiz do seu novo servidor.

P>Para o fundo da página de criação de gotas, existe uma opção para adicionar chaves SSH ao seu servidor:

Integração da chave SSH

Se já tiver adicionado um ficheiro de chave pública à sua conta DigitalOcean, vê-lo-á aqui como uma opção seleccionável (há duas chaves existentes no exemplo acima: “Chave de trabalho” e “Chave de casa”). Para incorporar uma chave existente, basta clicar sobre ela e ela irá destacar. Pode incorporar várias chaves num único servidor:

Se ainda não tiver uma chave SSH pública carregada na sua conta, ou se quiser adicionar uma nova chave à sua conta, clique no botão

Principal chave SSH

Na caixa “Conteúdo da chave SSH”, cole o conteúdo da sua chave SSH pública. Assumindo que gerou as suas chaves utilizando o método acima, pode obter o conteúdo da sua chave pública no seu computador local digitando:

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNqqi1mHLnryb1FdbePrSZQdmXRZxGZbo0gTfglysq6KMNUNY2VhzmYN9JYW39yNtjhVxqfW6ewc+eHiL+IRRM1P5ecDAaL3V0ou6ecSurU+t9DR4114mzNJ5SqNxMgiJzbXdhR+j55GjfXdk0FyzxM3a5qpVcGZEXiAzGzhHytUV51+YGnuLGaZ37nebh3UlYC+KJev4MYIVww0tWmY+9GniRSQlgLLUQZ+FcBUjaqhwqVqsHe4F/woW1IHe7mfm63GXyBavVc+llrEzRbMO111MogZUcoWDI9w7UIm8ZOTnhJsk7jhJzG2GpSXZHmly/a/buFaaFnmfZ4MYPkgJD [email protected]

Colar este valor, na sua totalidade, na caixa maior. Na caixa “Comentário (opcional)”, pode escolher uma etiqueta para a chave. Esta será exibida como o nome da chave na interface DigitalOcean:

SSH nova chave

Quando criar o seu Droplet, as chaves SSH públicas que seleccionou serão colocadas no ficheiro ~/.ssh/authorized_keys da conta do utilizador raiz. Isto permitir-lhe-á entrar no servidor a partir do computador com a sua chave privada.

Como copiar uma chave pública para o seu servidor

Se já tiver um servidor disponível e não tiver incorporado chaves aquando da criação, poderá ainda carregar a sua chave pública e utilizá-la para autenticar no seu servidor.

O método que utiliza depende em grande parte das ferramentas que tem disponíveis e dos detalhes da sua configuração actual. Os métodos seguintes produzem todos o mesmo resultado final. O método mais fácil e mais automatizado é o primeiro e os que se seguem requerem passos manuais adicionais se não conseguir utilizar os métodos anteriores.

Cópia da sua chave pública Utilizando SSH-Copy-ID

A forma mais fácil de copiar a sua chave pública para um servidor existente é utilizar um utilitário chamado ssh-copy-id. Devido à sua simplicidade, este método é recomendado se disponível.

A ferramenta ssh-copy-id está incluída nos pacotes do OpenSSH em muitas distribuições, pelo que poderá tê-la disponível no seu sistema local. Para que este método funcione, já deve ter acesso SSH baseado em palavra-passe ao seu servidor.

Para utilizar o utilitário, basta especificar o anfitrião remoto a que gostaria de se ligar e a conta de utilizador a que tem acesso SSH com palavra-passe. Esta é a conta onde a sua chave SSH pública será copiada.

A sintaxe é:

ssh-copy-id username@remote_host

Pode ver uma mensagem como esta:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes

Isto significa apenas que o seu computador local não reconhece o anfitrião remoto. Isto irá acontecer na primeira vez que se ligar a um novo anfitrião. Digite “sim” e prima ENTER para continuar.

Next, o utilitário irá digitalizar a sua conta local para a tecla id_rsa.pub que criámos anteriormente. Quando encontrar a chave, pedir-lhe-á a palavra-passe da conta do utilizador remoto:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new [email protected]'s password:

Digite a palavra-passe (a sua digitação não será exibida para fins de segurança) e prima ENTER. O utilitário ligar-se-á à conta no anfitrião remoto utilizando a palavra-passe que forneceu. Irá então copiar o conteúdo do seu ~/.ssh/id_rsa.pub tecla num ficheiro na home da conta remota ~/.ssh directório chamado authorized_keys.

Verá uma saída que se parece com isto:

Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.

Neste ponto, a sua chave id_rsa.pub foi carregada para a conta remota. Pode continuar para a secção seguinte.

Cópia da sua chave pública Usando SSH

Se não tiver ssh-copy-id disponível, mas tiver acesso SSH baseado em palavra-passe a uma conta no seu servidor, pode carregar as suas chaves usando um método SSH convencional.

Podemos fazer isto, produzindo o conteúdo da nossa chave SSH pública no nosso computador local e canalizando-o através de uma ligação SSH para o servidor remoto. Por outro lado, podemos assegurar que o directório ~/.ssh existe sob a conta que estamos a utilizar e depois enviar o conteúdo que enviámos para um ficheiro chamado authorized_keys dentro deste directório.

Utilizaremos o >> símbolo de redireccionamento para anexar o conteúdo em vez de o sobrescrever. Isto permitir-nos-á adicionar chaves sem destruir chaves previamente adicionadas.

O comando completo terá o seguinte aspecto:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Pode ver uma mensagem como esta:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes

Isto significa apenas que o seu computador local não reconhece o anfitrião remoto. Isto irá acontecer na primeira vez que se ligar a um novo anfitrião. Digite “sim” e prima ENTER para continuar.

Depois, ser-lhe-á pedida a password da conta a que está a tentar ligar-se:

[email protected]'s password:

Depois de introduzir a sua password, o conteúdo da sua id_rsa.pub chave será copiado para o fim do ficheiro authorized_keys da conta do utilizador remoto. Continue para a secção seguinte se isto foi bem sucedido.

Copiando a sua Chave Pública Manualmente

Se não tiver disponível acesso SSH baseado em palavra-passe ao seu servidor, terá de fazer o processo acima manualmente.

O conteúdo do seu id_rsa.pub terá de ser adicionado a um ficheiro em ~/.ssh/authorized_keys na sua máquina remota, de alguma forma.

Para exibir o conteúdo do seu id_rsa.pub chave, escreva-o no seu computador local:

cat ~/.ssh/id_rsa.pub

Verá o conteúdo da chave, que pode parecer algo como isto:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Acesso ao seu anfitrião remoto usando qualquer método que tenha disponível. Por exemplo, se o seu servidor for uma DigitalOcean Droplet, pode iniciar sessão utilizando a consola web no painel de controlo:

Acesso à consola DigitalOcean

Após ter acesso à sua conta no servidor remoto, deve certificar-se de que o directório ~/.ssh é criado. Este comando irá criar o directório se necessário, ou não fazer nada se ele já existir:

mkdir -p ~/.ssh

Agora, pode criar ou modificar o ficheiro authorized_keys dentro deste directório. Pode adicionar o conteúdo do seu ficheiro id_rsa.pub ao fim do ficheiro authorized_keys, criando-o se necessário, utilizando isto:

echo public_key_string >> ~/.ssh/authorized_keys

No comando acima, substitua o comando public_key_string pelo comando cat ~/.ssh/id_rsa.pub que executou no seu sistema local. Deve começar com ssh-rsa AAAA....

Se isto funcionar, pode avançar para tentar autenticar sem palavra-passe.

Autenticar no seu Servidor Usando Chaves SSH

Se tiver completado com sucesso um dos procedimentos acima, deverá ser capaz de iniciar sessão no anfitrião remoto sem a palavra-passe da conta remota.

O processo básico é o mesmo:

ssh username@remote_host

Se esta for a primeira vez que se liga a este anfitrião (se utilizou o último método acima), poderá ver algo como isto:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes

Isto significa apenas que o seu computador local não reconhece o anfitrião remoto. Escreva “sim” e depois prima ENTER para continuar.

Se não forneceu uma frase-chave para a sua chave privada, será imediatamente ligado à sua conta. Se forneceu uma frase-chave para a chave privada quando criou a chave, será obrigado a introduzi-la agora. Posteriormente, uma nova sessão shell deverá ser criada para si com a conta no sistema remoto.

Se for bem sucedida, continue a descobrir como bloquear o servidor.

Desactivar a autenticação da senha no seu servidor

Se for capaz de iniciar sessão na sua conta usando SSH sem uma senha, terá configurado com sucesso a autenticação baseada na chave SSH na sua conta. Contudo, o seu mecanismo de autenticação baseado em palavra-passe ainda está activo, o que significa que o seu servidor ainda está exposto a ataques de força bruta.

Antes de completar os passos nesta secção, certifique-se de que tem a autenticação baseada em chave SSH configurada para a conta raiz neste servidor, ou de preferência, que tem a autenticação baseada em chave SSH configurada para uma conta neste servidor com acesso sudo. Este passo irá bloquear os logins baseados em palavra-passe, de modo a garantir que ainda poderá obter acesso administrativo é essencial.

Após as condições acima mencionadas serem verdadeiras, inicie sessão no seu servidor remoto com chaves SSH, seja como root ou com uma conta com privilégios de sudo. Abra o ficheiro de configuração do daemon SSH:

sudo nano /etc/ssh/sshd_config

No ficheiro, procure por uma directiva chamada PasswordAuthentication. Isto pode ser comentado. Descomente a linha e defina o valor para “não”. Isto irá desactivar a sua capacidade de iniciar sessão através de SSH usando palavras-passe de conta:

PasswordAuthentication no

Guardar e fechar o ficheiro quando estiver terminado. Para implementar efectivamente as alterações que acabámos de fazer, tem de reiniciar o serviço.

Em máquinas Ubuntu ou Debian, pode emitir este comando:

sudo service ssh restart

Em máquinas CentOS/Fedora, o daemon é chamado sshd:

sudo service sshd restart

Após ter completado esta etapa, fez com sucesso a transição do seu daemon SSH para responder apenas às chaves SSH.

Conclusion

Deverá agora ter a autenticação baseada em chaves SSH configurada e a correr no seu servidor, permitindo-lhe iniciar sessão sem fornecer uma palavra-passe de conta. A partir daqui, há muitas direcções que pode seguir. Se quiser saber mais sobre como trabalhar com SSH, consulte o nosso guia SSH essentials.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *