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:
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:
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:
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:
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.