12 Dec
Postado por: Pedro Pereira - @pogao em: SSH
O OpenSSH é talvez a ferramenta mais utilizada por administradores de sistemas atualmente. Quando de seu desenvolvimento, o objetivo dele foi substituir ferramentas inseguras como telnet, rlogin, etc. Ele permite que você se conecte de forma segura a qualquer dispositivo (como switches, roteadores, servidores Linux, FreeBSD, OpenBSD, Solaris, etc.) que esteja executando um servidor SSH com suporte aos protocolos 1 ou 2.
Aqui vamos ver como configurar o SSH para se autenticar utilizando certificados, para deixar o acesso ao seu servidor mais prático e mais simples. Todos os passos descritos aqui não dependem de distribuição X ou Y: você pode executar este procedimento em qualquer distribuição e tudo irá funcionar tranquilamente.
Sempre antes de você se conectar a um servidor via SSH, uma tentativa de estabelecer a identidade desta máquina é feita. Quando não é possível estabelecer a identidade, um aviso como o seguinte é exibido:
The authenticity of host ’192.168.1.104 (192.168.1.104)’ can’t be established.
RSA key fingerprint is 8c:d0:d2:2a:14:d6:28:44:84:be:8d:21:f7:9e:d1:7b.
Are you sure you want to continue connecting (yes/no)?
Basicamente, o que essa mensagem quer te dizer é que não foi possível garantir que o host com IP 192.168.1.104 é realmente o host 192.168.1.104 ao qual você queria se conectar (alguém pode ter derrubado a máquina 192.168.1.104 e substituido por outra, com um software que grava todos os usuários e senhas digitados enquanto simula um diálogo do SSH). Também é fornecida para você a chave RSA do host, para que você confira (alguém faz isso? :) ). E, finalmente, pergunta se você quer continuar mesmo assim. Respondendo “yes”, o processo de autenticação continua sem problemas (mas você ainda não pode garantir que é o host certo até que tenha fornecido usuário e senha); respondendo “no”, você volta para o BASH, sem acesso ao servidor!
Para resolver este problema, você pode utilizar certificados que garantem a autenticidade tanto do cliente quanto do servidor. Além disso, como é praticamente impossível alguém conseguir o seu certificado sem acesso à sua máquina, você nem vai precisar utilizar senhas para se conectar (o que é excelente quando se usa muito o SCP para copiar arquivos entre hosts).
Também existe o problema do brute-force. Neste tipo de ataque, serão testadas várias combinações de usuários/senhas. É uma forma garantida de que, em um determinado momento, o atacante irá conseguir encontrar uma combinação de usuário/senha válidos. Veja bem, em momento algum eu disse que é rápido e/ou viável, disse que é possível e muito comum na Internet.
Para melhorar a segurança dele neste ponto, você tem pelo menos duas alternativas:
Embora softwares de monitoramento de logs sejam bastante efetivos, eles muito provavelmente não funcionam em dispositivos como switches, roteadores, etc., além disso é mais fácil que eles possuam algum bug do que a autenticação através de certificados que já foi extensivamente testada e provada por milhares de pessoas. Por isso, recomendo que você utilize a segunda opção em todos os seus dispositivos que possuam SSH habilitado.
O melhor de tudo isso, é que implantar esse tipo de autenticação é extremamente simples. Vamos lá!
A autenticação vai acontecer assim:
Para isso, vamos começar gerando o certificado do cliente. Para isso execute o seguinte comando:
# ssh-keygen -t rsa -b 2048
O “ssh-keygen” não precisa necessariamente ser executado como root. Se a chave criada para o usuário “x” for reconhecida pelo servidor, o usuário “x” poderá logar como “root” no servidor, explico isso mais com mais detalhes adiante.
Executando o “ssh-keygen” será gerada uma chave RSA de 2048 bits (eu especifiquei na linha comando, mas não é necessário já que este é o padrão). O mínimo para o RSA é de 768 bits. Algumas perguntas serão feitas para você. Os valores exibidos entre “()” são os valores padrão e, se quiser mantê-los, basta pressionar “enter”, não precisa escrever a opção novamente:
Agora, temos que falar para o servidor que ele deverá aceitar esse certificado. Para isso, transferimos o certificado para o servidor de forma segura:
# scp /root/.ssh/id_rsa.pub root@192.168.1.104:/root
Isso irá copiar a chave pública do cliente para o servidor, no diretório /root. Agora, temos que adicionar esse certificado ao banco de dados que contém os certificados aceitos por esse servidor. No servidor, execute:
# cat id_rsa.pub >> /root/.ssh/authorized_keys
Vale lembrar que o diretório “.ssh” só existirá se você tiver utilizado o SSH pelo menos 1 vez, anteriormente (se ele não existir, pode criá-lo na mão). Caso o arquivo authorized_keys não exista, basta executar o comando citado acima.
Pronto! Agora você já pode se conectar ao servidor de uma forma absolutamente segura, sem medo que roubem a sua senha (já que você não a envia através da rede) e sem medo de ataques brute force (que são totalmente inofensivos contra autenticação baseada em certificados RSA).
A autenticação via certificados pode ser utilizada para qualquer usuário válido no servidor, não apenas para o usuário root. Seguindo os passos descritos anteriormente, você poderá logar sem senha como root utilizando o seguinte comando:
$ ssh root@192.168.1.104
Isso, considerando que você não esteja executando este comando como root. Se estiver, basta:
# ssh 192.168.1.104
Isso acontece pois, quando você não especifica um usuário, o SSH entende que o login a ser utilizado para logar no servidor remoto é o mesmo do usuário que executou o comando. Portanto, se você executou o comando acima como root, você não precisa da parte “root@” do comando. Isso acontece com qualquer usuário, mas dois detalhes devem ser observados:
Além disso, é necessário que o usuário especificado tenha acesso de leitura e escrita ao “authorized_keys”.
Resumindo, se a sua chave pública está presente no arquivo “authorized_keys” do usuário “x” mas não do usuário “y”, você poderá fazer o login como usuário “x” mas não como “y”. Esta regra é a mesma para todos os usuários do sistema.
Leia o resto do texto: Página 1 Página 2 Página 3Gostou do post? Então assine o feed RSS e não perca os próximos! |
![]() |
17 Comentários
ssh, port forward, linux, openbsd, freebsd, mac os x, acesso remoto, vpn | Pedro Pereira
12|Dec|2009 1[...] deste post? Você também vai gostar do post “SSH sem senha: autenticação através de certificados RSA“. Para mais artigos sobre SSH, clique na categoria “SSH” no menu à direita! [...]
SSH Port knocking | Pedro Pereira
20|Dec|2009 2[...] vimos no post “SSH sem senha“, existem algumas maneiras muito boas de aumentar a segurança do SSH. Uma maneira que não [...]
iRedOS: Servidor de e-mails completo em 20 minutos | Pedro Pereira
20|Apr|2010 3[...] SSH sem senha: autenticação através de certificados RSA [...]
Samuel
05|Dec|2011 4excelete !!!!
Muito objetivo.
Pedro Rezende
12|Jan|2012 5Muito bom! Muito obrigado pelo artigo!!!
Truque Ssh: Sem Senha | Planeta Globo.com
27|Jan|2012 6[...] http://www.pedropereira.net/ssh-sem-senha-autenticacao-atraves-de-certificados-rsa/ [...]
Carlos
07|Mar|2012 7Amigo Pedro.
Mesmo com a chaves criada sem palavra passe, pede a senha. Necessita fazer alguma alteração no arquivo ssh_config? configuração do cliente SSH?
Pedro Pereira
09|Mar|2012 8Carlos,
Você chegou a fazer isso?
“Agora, você não vai mais precisar que o SSH permita que os usuários tentem autenticar-se através de senhas. Por isso, você pode desabilitar esta opção editando o arqivo /etc/ssh/sshd_config. Procure a linha:
PasswordAuthentication yes
E troque o “yes” por “no”:
PasswordAuthentication no
Se houver um “#” no início dessa linha, remova-o para que a opção surta efeito. Agora salve o arquivo e reinicie o daemon do SSH. No CentOS
# service sshd restart
No Debian:
# /etc/init.d/ssh restart”
Teve algum problema?
[]‘s
Pedro Pereira
Everton
16|May|2012 9Olá Pedro,
estou usando esse tipo de conxão para se conectar a pastas de um servidor, coloquei a configuração direto no fstab para carregar na inicialização, em algumas máquinas com a versão ubuntu 11.04 ou anterior carrega automaticamente, em outras não, só carrega se clicar no icone de atalho, a linha do fstab é essa:
#montagem pasta virtual.
#sshfs#user25@192.168.0.254:/home/convidado/pasta_virtual /media/pasta_virtual fuse noauto,users,exec,uid=1000,gid=33,allow_other,reconnect,BatchMode=yes,transform_symlinks,sshfs_sync,umask=002,comment=sshfs 0 0
tem algma dica do que possa ser?
Pedro Pereira
16|May|2012 10@Everton,
Acredito que o problema seja o “noauto” nas opções da linha do FSTab. Em um ambiente de testes, experimente mudar para “auto” e reiniciar para ver se funciona.
[]‘s
Pedro Pereira.
O que são as ACLs ( Cisco Routers etc.. ) « fenixdragom
18|May|2012 11[...] objetivos em mente: impedir determinado host de enviar pacotes para uma rede, permitir acesso via SSH à um dispositivo apenas partindo de determinada máquina, determinar qual tráfego será [...]
Como pensar em senhas fortes | Pedro Pereira - Consultoria Linux, Cisco, OpenBSD
08|Aug|2012 12[...] senhas e autentique seus usuários apenas através de certificados, como já vimos no post “SSH sem senha: autenticação através de certificados RSA“. Verifique quais serviços da sua rede permitem que você use certificados ao invés de [...]
Configurações para melhorar a segurança do SSH (hardening) | Pedro Pereira - Consultoria Linux, Cisco, OpenBSD
19|Sep|2012 13[...] Esta dica vale ouro e passar a usar chaves ao invés de senhas sozinho já aumenta e muito a segurança do seu sistema. Já expliquei passo a passo como fazer esta configuração no post “SSH sem senha: autenticação através de certificados RSA“. [...]
Luiz
27|Feb|2013 14Levei dias sem sucesso, vi aqui no teu site e em 10 minutos feito. Perfeito. Parabéns.
Pedro Pereira
27|Feb|2013 15Luiz,
Cara, você não sabe como um comentário desses me deixa feliz. Faço o possível para colocar conteúdo de qualidade aqui, para que todos possam seguir e conseguir implantar as soluções em seus ambientes.
Muito obrigado pelo feedback!
[]‘s
Pedro Pereira
Celso Faria
14|Apr|2013 16Pedro,
Muito boa a dica.
Há alguma forma de fazer essa conexão com certificado SSL assinado por uma CA (certificado válido), convertendo para chave RSA?
A intenção é autenticar um túnel ssh (que é criptografado) com essa chave.
Abs.
Pedro Pereira
19|Apr|2013 17Celso,
Para falar a verdade eu não sei. Mas acredito que pegando a chave RSA do seu certificado e colocando nos lugares corretos, não haja problemas para que a autenticação seja feita. Infelizmente, nunca tentei isso então não sei se funciona. Mas não vai machucar fazer um teste :)
Qualquer coisa, é só dar um grito.
[]‘s
Pedro Pereira
Deixe seu comentário!
Acompanhe!
Busca
Mais Lidos
Comentários Recentes
A design creation of Design Disease
Pedro Pereira: Administrador de redes: Linux, Cisco, FreeBSD, OpenBSD. Consultoria e serviços em software livre utilizando Samba, Subversion, Postfix, OpenLDAP, Cacti, Nagios e vários outros! Copyright © 2007 - Pedro Pereira – Consultoria Linux, Cisco, OpenBSD - is proudly powered by WordPress
Visite também tem-aqui.com.
Esta obra escrita por Pedro Augusto de Oliveira Pereira está licensiada sob a Creative Commons Atribuição-Uso Não-Comercial-Vedada a Criação de Obras Derivadas 3.0 Brasil License.