Secure Shell (SSH) e’ um protocolo de rede cryptografado. Usamos
SSH para ter acesso a outro computador de forma segura em um
ambiente nao seguro.
“A little bit of math can accomplish what all the guns and barbed
wire can’t: a little bit of math can keep a secret.”
– Edward Snowden
Historia
Tatu Ylönen, pesquisador na Teknillinen korkeakoulu,
em Helsinki, Finlandia, criou o SSH em 1995. A primeira versao do
protocolo leva o nome de SSH-1. O objetivo do protocolo e'
subtistuir os protocolos telnet, ftp, rlogin e rsh. Fornecendo
autenticacao e seguranca na comunicao entre as maquinas.
Em 1999, desenvolvedores do OpenBSD fizeram um fork da
ultima versao open-source do SSH (1.2.12), e esse fork ganhou o
nome de OpenSSH.
O OpenSSH se tornou a implementacao mais popular e usada no ano
de 2005. Ele e’ o servidor default de varios sistemas operacionais e
distribuicoes.
OpenSSH
Existem varias implementacoes de servidores SSH. Porem a mais
usada, conhecida e (na minha opiniao) melhor versao e’ do
OpenBSD, chamado de OpenSSH. Deste ponto para
frente, irei tratar OpenSSH apenas como SSH.
Instalacao
SSHD (servidor do SSH) ja’ deve estar instalado em seu sistema
operacional. Caso nao, recomendo voce trocar de sistema operacional.
Configuracao
Normalmente o arquivo de configuracao do SSHD esta’ localizado em
/etc/ssh/sshd_config
.
Algumas opcoes que eu gosto de deixar configurado:
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile
Local onde as chaves publicas sao colocadas para serem usadas/aceitas
como authentication para um usuario. Recomendo deixar no default
(.ssh/authorized_keys .ssh/authorized_keys2
).
ChallengeResponseAuthentication
Diz se o usuario pode logar usando o teclado… =) Eu sempre deixo
como no.
Detalhe, ChallengeResponseAuthentication e’ um alias hoje, o nome
da opcao agora e’ KbdInteractiveAuthentication.
PasswordAuthentication
Diz se o usuario pode usar password para authentication. Nunca deixe
yes aqui… sempre no.
PermitEmptyPasswords
Configura se um usuario pode ser logar sem password. Deixe como no.
PermitRootLogin
Configura se o servidor vai aceitar o root fazer login. Recomendo
deixar sempre em no.
PubkeyAuthentication
Especifica se usuario pode entrar usando chaves primarias contra
chaves publicas. Deixe como yes.
Client
Novamente, seu sistema ja’ deve vir com OpenSSH Client
instalado. Caso nao, recomendo mudar de sistema operacional!
Gerar Chaves
Devemos usar sempre chaves para fazer authentication. Para gerar um
par de chaves, use o comando:
ssh-keygen -t ed25519
Segue um screen-shot mostrando o ssh-keygen.
Eu setei o destino da chave criada para /tmp/ssh-demo
so’ para
nao re-escrever a minha chave atual. Se for a primeira vez que esta'
criando a chave, apenas aceite o default.
Use uma senha forte, que voce nao vai esquecer!
E nao use RSA! Use ed25519.
Authentication
Para voce configurar um user conseguir logar usando a chave
privada dele. Coloque a chave publica do user no
~/.ssh/authorized_keys
.
Nesse exemplo, eu usei minha chave publica, localizada em
~/.ssh/id_ed25519.pub
no arquivo ~/.ssh/authorized_keys
.
Conectar
Para conectar a um SSHD, simplemente use o comando:
ssh seuUserNaMaquinDestino@maquinaDestino
Exemplo:
ssh umgeher@umgeher.org
Tunnel SSH
Com SSH podemos criar um tunnel de uma forma muito simples.
Vamos usar o seguinte senario.
Eu estou na minha workstation, chamada raven. Vou conectar em uma
maquina remota, chamada, tyr. A maquina tyr esta’ dentro de
uma rede que existe varios servicos la’ dentro, porem quero conectar
na maquina lunna que tem um HTTPd servido uma intranet. Eu via
SSH consigo fazer com que meu browser local, na maquina raven,
consiga conectar na intranet na maquina remota lunna.
Um simples comando:
ssh -L 8080:192.168.20.245:80 umgeher@tyr
No caso, lunna tem um ip fixo dentro da rede, onde tyr tem
acesso, 192.168.20.245. No meu browser eu vou acessar a intranet
via localhost:8080. Essa porta esta’ ligada a porta 80 da
maquina lunna via a minha connection ssh da maquina tyr.
Explicando o argumento -L, Porta Local : IP Destino : Porta
Destino.
/comments ~umgeher/changelog@lists.sr.ht?Subject=Re: age
/permalink https://umgeher.org/posts/2022/01/age.html