






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
SSH Criptografia
Tipologia: Notas de estudo
1 / 10
Esta página não é visível na pré-visualização
Não perca as partes importantes!







Agora que já apresentei os comandos ssh , scp e sftp , vou deixar um pouco mais de
tempo para você praticar. Mas enquanto isso, que tal aprender um pouco da teoria por trás do SSH e aproveitar para se livrar da senha a cada login?
Vamos lá?
Como nos informa o verbete sobre criptografia na Wikipédia, Criptografia (Do Grego kryptos, "escondido", e graphein, "escrita") é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da "chave secreta"), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade.
O objetivo da criptografia é justamente aquele mostrado nas figuras abaixo, publicadas no primeiro post desta série:
entre o seu computador e algum outro na Internet:
Com a criptografia, os dados saem do seu computador transformados em algo incompreensível para qualquer pessoa diferente do destinatário. Então, embora ainda possa ser possível
Criptografia básica: meios
(chamada pública ) usada pelo remetente para criptografar os dados antes de enviá-los e a outra (chamada privada ) usada para recuperar a mensagem original a partir da aparente "bagunça" recebida.
de uma palavra pela sua sucessora no alfabeto. Desta forma, eu poderia transmitir a palavra "algoritmo" da seguinte forma: "bmhpsjunp". Para entender a mensagem, o destinatário precisaria, evidentemente, conhecer o método usado e saber usá-lo. Assim, ele conseguiria reverter as letras uma posição e restaurar o conteúdo original da mensagem. Claro que este exemplo mostrou apenas um método trivial e extremamente fácil de ser quebrado. Um bom método (ou algoritmo , como é o nome mais usado) criptográfico utiliza múltiplas rodadas de substituições e transformações dos dados, todas com base em um único número bem comprido, chamado de chave criptográfica ou apenas chave. Sem possuir o número, um bisbilhoteiro poderia capturar uma mensagem criptografada e tentar todos os números que conhece, até encontrar aquele que a decifra. É por isso que as chaves precisam ser números muito compridos, frequentemente na casa dos 2048 bits - ou seja,
variando entre 0 e 2^2048 (dois elevado a 2048), que é esta monstruosidade de 617
dígitos: 323170060713110073007148766886699519604441026697154840321303 454275246551388678908931972014115229134636887179609218980194 941195591504909210950881523864482831206308773673009960917501 977503896521067960576383840675682767922186426197561618380943 384761704705816458520363050428875758915410658086075523991239 303855219143333896683424206849747865645694948561760353263220 580778056593310261927084603141502585928641771167259436037184 618573575983511523016459044036976132332872312271256847108202 097251571017269313234696785425806566979350459972683529986382 155251663894373355436021354332296046453184786049521481935558
Com isso, casa envia a trab a chave pública de casa , que geralmente fica guardada
em /etc/ssh/ssh_host_key.pub e é criada durante a instalação do pacote openssh-server.
trab recebe a chave pública e pede a senha do usuário ftal : ftal@trab's password:
Fulano informa a senha de ftal em trab , trab confere-a e, caso esteja correta, permite
o login: ftal@trab [~]$ _ Viu? O prompt do Bash é diferente nas duas máquinas, o que é altamente recomendável para evitar que você execute comandos na máquina errada.
Login sem senha e chaves do usuário
Agora que você já domina o SSH e entra remotamente nas suas várias máquinas todos os dias, talvez a tarefa de informar a senha a cada novo acesso esteja ficando um pouco incômoda. Vejamos como sanar isso.
Mas primeiro, um pouco de...
História O fabuloso OpenSSH é a implementação do protocolo SSH mais completa que conheço. Ele foi criado pelos desenvolvedores do sistema operacional OpenBSD, um sistema livre lançado sob a licença BSD.
ele é o máximo! :)
Os recursos de geração de chaves e login sem senha que vou descrever a seguir são criações do OpenSSH. Então, mais do que o protocolo SSH, se você deseja agradecer a alguém pelos recursos que já apresentei e continuarei apresentando nesta série de posts, esse alguém é a comunidade de desenvolvedores do OpenSSH.
Gerar chaves
O OpenSSH é capaz de gerar chaves de dois tipos: DSA e RSA.
federal dos EUA, mas o OpenSSH só gera chaves DSA com no máximo 1024 bits é o que já vimos que é um problema potencial.
OpenSSH pode gerar chaves de 4096 bits (inquebráveis na atualidade) ou até mais.
Por padrão, o OpenSSH gera chaves RSA de 2048 bits.
Vamos começar: gere um par de chaves para seu usuário fulano no
computador casa com o comando ssh-keygen :
[fulano@casa ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/fulano/.ssh/id_rsa):
fe:a2:e1:49:cc:a3:d3:41:35:d5:a9:a1:34:c2:07:0f fulano@casa The key's randomart image is: +--[ RSA 2048]----+ |.... | |. o.. o | |. o o o. | |.. o o. | |.. oSo | |. ..E | |. o | | .o+o. | | .BXo. | +-----------------+ [fulano@casa ~]$ _
A saída do comando ssh-keygen é bastante informativa. Ela diz onde salvou a chave
primária ( /home/fulano/.ssh/id_rsa , no caso), onde salvou a chave pública
( /home/fulano/.ssh/id_rsa.pub ), informa a assinatura ( fingerprint ) da chave e ainda
fornece uma espécie de retrato artístico ( randomart ) dessa mesma chave. O objetivo desse retrato artístico é que o usuário sempre olhe para o retrato ao se conectar a um servidor SSH. Se a chave criptográfica do servidor for alterada, sua arte mudará significativamente. Assim, se você entra todos os dias no mesmo servidor, você acaba se acostumando a visualizar um retrato específico - se o retrato mudar algum dia, você vai perceber rapidamente que a chave foi alterada, o que geralmente indica que o servidor foi invadido.
Aparência de uma chave
Fique à vontade para ler suas próprias chaves. Elas estão onde o ssh-keygen disse que as
colocou (por padrão, ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub.
Um exemplo de chave RSA de 2048 bits: [fulano@casa ~]$ cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAx0ICaSI4ddHt6R2VMn2ton3DLJKmSKVk5F8ewRs6f0tyJqH Srr7wMbT5XtQgwDFFNRY4JzXzdcReeaSiYdzoG5sPtgeUiA8T55vuLetvC/EfF/T U2v/mnVy/JrOwWBPCoYbPpanqrGb7HtqKoHCi0ij69ovRb0Oq20eVR5ne/ATrQUE utklByq570PSh8rIkRWB/42PTbv4LTItsLdLkH7v9ehmXS+iSIlV/VVARyvwUCO ZaGZhi0Zq7yXSJbu6wkuCKKdh+ppsb+zSzHABXYtrvSAMXZKVfkvTamsqleXeQoN WrNDTYcQixEKxO4/jyoiY7WWZSP0fgZX0ulbOwIBIwKCAQAti25D6pCP9Xg1SJch e8/qoGcgIYUX60pC0+nFvRSvYbOxDxRo2kgsEDBu951fxalj2MPbkZBpkD6CQ1Sx uI91II3FOLZ5K/CHOigqOJy9TL8yXwu7S+Km9kYrHBIAUIcYWSrMejTz0NMuvR+U r/Hz81iq8ArOHJWjhqfY8QG17VQALr/3pmwWySRgUa/ZTAh4IzWc0riV7Pzf10C 0XYiraIwWp3ZILQpSU7ukwTcVNCPggbSfJQTxKKzorhgxlkbNqYYJ5ohMwIbBbEn S9hVgjzuckK/jFlh9Im5wsk8855zg+DSOqnIpJCk5AmWl9G6VFjQ/zainRcUiIDw uMgLAoGBAOxVyWh8fO2Q4ioStIDLkXFGYw+zF5p8jAYQt8eLjTgs+KyKhheJ/Mo Di4TqEpYjKF/AN58HqnFxVDc/FcN1yv5cq/HpYg/UpWbY7zcVPCqgmNoBdxWNZQa kgD3hQI0vAs/gYGW0jicaz1foBKqV0pST/CxtXRXWy2xsyu8WwCzAoGBANfWbxRi 5B6SmJC3KfBljLI9GGe+XA1BQx/JLKr8la6Lzp3X1dw9Q8PY2m6V6cCqrD5dSgAQ oefp64D82FmTW/0ah2eXT9L3WKrgIw9i8Pzk2f+zur/VOq8u2VPJcHoK8bcAJ5Qs
ftal@trab:~/chave-publica-fulano-casa ftal@trab's password: id_rsa.pub 100% 12KB 12.2KB/s 00: [fulano@casa ~]$ _
do cliente para dentro do arquivo que armazena as chaves públicas do usuário ftal@trab :
[fulano@casa ~]$ ssh ftal@trab ftal@trab's password: ftal@trab [~] $ cat chave-publica-fulano-casa >>
~/.ssh/authorized_keys ftal@trab [~] $ _
Terceiro passo: verificar se o servidor OpenSSH está configurado para aceitar login com autenticação por chave pública: ftal@trab [~] $ sudo grep 'PubkeyAuthentication'
/etc/ssh/sshd_config
PubkeyAuthentication yes
Se a saída do comando mostrar um no no lugar do yes , abra o arquivo e altere para yes.
Já no caso de a saída não incluir uma linha como essa, acrescente a linha ao arquivo: ftal@trab [~] $ sudo su Password:
root@trab [~] $ echo 'PubkeyAuthentication yes' >>
/etc/sshd_config
Quarto passo: tentar a conexão sem senha: root@trab [~] $ exit ftal@trab [~] $ exit
[fulano@casa ~]$ ssh ftal@trab ftal@trab [~] $ _
Parabéns! Você conseguiu!
Login sem senha, técnica fácil
Apresentei primeiro a técnica difícil para que você aprecie mais o trabalho do pessoal do OpenSSH. ;)
Eles criaram há algumas versões o comando ssh-copy-id para fazer justamente tudo isso:
copiar a chave pública do seu usuário para o arquivo de chaves autorizadas no servidor. Seu
uso é simples. Como já copiamos a chave de casa para trab , vamos agora fazer o
procedimento contrário (para permitir o login sem senha de trab para casa :
[fulano@casa ~]$ ssh ftal@trab
ftal@trab [~] $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ftal/.ssh/id_rsa):
Enter same passphrase again:
ftal@trab [~] $ ssh-copy-id -i .ssh/id_rsa.pub fulano@casa
Now try logging into the machine, with "ssh 'fulano@casa'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
ftal@trab [~] $ _ Entre os dois métodos, prefira sempre o fácil, pois ele faz muito mais do que apenas copiar a chave pública; ele:
verifica as permissões do diretório .ssh do servidor para garantir sua segurança
confere se o arquivo de chaves autorizadas é mesmo o padrão
( ~/.ssh/authorized_keys )
garante que a chave copiada seja a pública, não a privada. Se você informar a chave errada
na opção -i , ele dá um alerta. No método difícil, você pode acabar se enganando e expondo sua chave privada - isso obrigaria você a gerar um novo par de chaves, já que a privacidade da sua chave privada foi violada.
Questões de segurança do login por chave A maior praticidade do login por chave (e sem senha) levanta alguns questionamentos de segurança quanto à autenticação. A boa segurança depende de vários aspectos: geralmente "algo que você tem", "algo que você sabe" e "algo que você é". Algo que você tem: um pen drive, um token, um smart card. Algo que você sabe: sua senha. Algo que você é: sua impressão digital, ocular, vocal... A autenticação por senha conta somente com o que você sabe. E é fato que você pode facilmente esquecer qualquer coisa que já soube algum dia. :)
h1qJgCI0juWqtR7NFb4LVG6EFYZ0trDIe1PsANtz2u1dmu/D0aiA0SYh1GQu YdgQxixZLQnKI0DR4Aw4uGQ==
[fulano@casa ~] $ _
Lá está. A linha 63 de fato contém a chave pública antiga de trab. Vamos apagá-la:
[fulano@casa ~] $ sed -ne '63 d' -i .ssh/known_hosts [fulano@casa ~] $ _ Estou aproveitando para mostrar um pouco das utilidades de mais um
programinha fantástico, o sed. Fique à vontade para usar seu editor de
texto preferido (gráfico ou não) para abrir o arquivo ~/.ssh/known_hosts ,
conferir a linha específica e apagá-la.
Feito isso, vamos tentar a conexão novamente. Note que o OpenSSH agora não conhece mais
a máquina trab , então vai tratar a conexão como se fosse com uma máquina nova à qual
você jamais se conectou: [fulano@casa ~] $ ssh ftal@trab
The authenticity of host 'trab (11.22.333.444)' can't be established. RSA key fingerprint is d4:d3:fd:ca:c4:d3:e9:94:97:cc:52:21:3b :4e:ba:e9. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'trab,11.22.333.444' (RSA) to the list of known hosts. ftal@trab [~]$ _
Fora esse problema, dificilmente você encontrará algum outro.
Conclusão
O OpenSSH é meu herói, e espero que se torne também o seu. Sua grande competência em termos de usabilidade e segurança – duas variáveis que geralmente caminham em sentidos opostos – o torna certamente um dos melhores softwares livres disponíveis.
Sua versatilidade também é marcante. Até o momento, vimos apenas os recursos mais básicos, e espero que você esteja praticando para, nos próximos posts, aprender ainda mais sobre os fascinantes recursos avançados do OpenSSH, como o tunelamento de conexões, a execução de comandos de forma não interativa, o compartilhamento de conexões e muito mais.
Por favor, não se esqueça de deixar aqui embaixo suas perguntas, críticas e sugestões! Elas são muito importantes para que mais pessoas entendam os tópicos abordados. A única pergunta estúpida é aquela que não é feita. ;)