# O que é SSH? Protocolo SSH explicado

A cada dia que passa, a segurança desempenha um papel mais importante na internet. O protocolo de segurança SSH (*Secure Socket Shell*), por exemplo, parte do **conjunto de protocolos TCP/IP**, permite que usuários estabeleçam uma conexão segura entre dois computadores. Ele é usado desde 1995 e foi atualizado diversas vezes ao longo do tempo. Aprenda o que é SSH, conheça seus termos mais importantes e entenda como a criptografia funciona no protocolo SSH.

Fato *Shell* é a parte do sistema operacional que permite que usuários acessem o computador. Normalmente, a expressão diz respeito à uma linha de comando baseada em texto (*prompt* de comando, terminal ou *console*), mas a interface gráfica do usuário também é chamada de *shell*. Já o método de estabelecer uma conexão é chamado *Secure Socket Shell*.

## Para que serve o protocolo SSH?

O protocolo SSH possibilita que dois computadores estabeleçam uma conexão direta e segura dentro de uma rede potencialmente insegura, como é o caso da internet. Seu uso é necessário para que terceiros não consigam acessar o fluxo de dados, pois isso pode fazer com que dados sensíveis caiam em mãos erradas. Antes do surgimento do *Secure Socket Shell*, outras formas de estabelecer uma conexão direta entre dois computadores existiam. No entanto, as aplicações da época, como *Telnet*, *Remote Shell* e *rlogin*, eram inseguras. Já o SSH **criptografa a conexão entre dois computadores**, permitindo que um desses computadores seja operado remotamente pelo outro.

O protocolo SSH não oferece apenas uma **conexão criptografada**, como também garante que conexões sejam estabelecidas somente entre computadores designados, ou seja, ataques [*man-in-the-middle*](https://www.ionos.com/pt-br/digitalguide/servidor/seguranca/ataque-man-in-the-middle/) ficam impossibilitados. Isso assegura que dados transmitidos não sejam manipulados enquanto estiverem a caminho do destinatário. Computadores remotos sempre foram acessados por linhas de comando, usadas para enviar instruções ao dispositivo remoto. No entanto, hoje também é possível usar o protocolo VNC (*Virtual Network Computing*) para espelhar uma interface gráfica do usuário (que nem sempre está disponível nos servidores) no seu próprio computador e, dessa forma, controlar outro computador.

Muitas áreas podem aplicar o protocolo SSH para:

- Gerenciar servidores que não podem ser acessados localmente.
- Transmitir arquivos com segurança.
- Criar backups com segurança.
- Possibilitar a conexão entre dois computadores utilizando criptografia de ponta-a-ponta.
- Fazer a manutenção de outros computadores remotamente.

O desenvolvimento do SSH também influenciou outros protocolos. Por exemplo, o protocolo FTP (inserguro), usado para transferir arquivos entre servidores, passou por aprimoramentos que deram origem ao [SFTP: SSH File Transfer Protocol](https://www.ionos.com/digitalguide/server/know-how/sftp-ssh-file-transfer-protocol/ "SFTP: SSH File Transfer Protocol").

Uma vantagem do SSH é que o protocolo pode ser executado em **todos os sistemas operacionais comuns**. Originalmente uma aplicação para Unix, o protocolo SSH também passou a ser implementado em todas as distribuições do Linux e do macOS. Ele também pode ser usado no Windows, caso você instale o programa correspondente.

## SSH vs OpenSSH

O *Secure Socket Shell* foi criado em 1995, em um projeto de código aberto. Nesse mesmo ano, o desenvolvedor Tatu Ylönen fundou uma empresa que expandiu esse protocolo e começou a trabalhá-lo comercialmente. Assim o projeto, inicialmente aberto, se **transformou em um software privado**. A comunidade de TI não aceitou a “privatização” e desenvolveu uma divisão aberta do protocolo SSH-1: o **OpenSSH**. Como ambos continuam a ser desenvolvidos, duas variações desse protocolo estão disponíveis: o protocolo privado SSH-2 (mais evoluído, já que vulnerabilidades de segurança foram encontradas no SSH-1), e o protocolo público OpenSSH.

O OpenSSH e o SSH são relativamente parecidos em termos de funcionalidade e escopo. A diferença está, principalmente, no custo e no suporte oferecido. Caso opte por adquirir o protocolo SSH, você receberá **suporte 24 horas**. Esse recurso é especialmente útil para grandes empresas, com gerentes de TI alternados. Por outro lado, o OpenSSH oferece a vantagem de ter uma comunidade e de ser de código aberto, o que significa que o projeto está em constante desenvolvimento e conta com contribuições de diversos especialistas.

## Como funciona o protocolo SSH?

O *Secure Socket Shell* faz uso de múltiplas técnicas de criptografia e autenticação. Por um lado, isso garante que os fluxos de dados não sejam lidos ou manipulados. Por outro lado, somente dispositivos autorizados podem entrar em contato uns com os outros.

### Autenticação

Para começar, o servidor SSH e o cliente autenticam um ao outro. O servidor envia um **certificado** ao cliente para verificar se é o servidor correto. Sempre que esse contato é estabelecido, há o risco de um terceiro se colocar entre os dois participantes e interceptar a conexão. No SSH, o próprio certificado é criptografado, não sendo possível imitá-lo. Como o cliente sabe qual é o certificado correto, nenhum terceiro consegue contatar o servidor em questão.

No entanto, após a autenticação do servidor, o cliente também precisa comprovar que tem acesso autorizado. Uma senha pode ser usada para essa finalidade. Ela (ou seu valor de *hash* criptografado) é armazenada no servidor. Assim, usuários são obrigados a inserir a **senha** sempre que se conectarem a um servidor diferente durante a mesma sessão. Existe também um método alternativo de autenticação do cliente, que usa um par de chaves composto por uma chave pública e uma chave privada.

A **chave privada** é criada exclusivamente para o seu próprio computador, e é protegida por uma frase-passe, mais longa que uma senha comum. Ela é armazenada somente no seu computador e permanece sempre oculta. Caso queira estabelecer uma conexão SSH, você deverá informar a frase-passe para ter acesso à chave privada.

Também existem chaves públicas no servidor (assim como no próprio cliente). O servidor cria um problema criptográfico com sua **chave pública** e o envia ao cliente. Em seguida, o cliente descriptografa o problema com sua própria chave privada, devolve a solução e informa ao servidor que a conexão foi permitida, uma vez que é legítima.

Durante uma sessão, você só precisa inserir a frase-passe uma vez para se conectar a qualquer número de servidores. Ao final dela, os usuários devem se desconectar de seus computadores locais para garantir que terceiros não tenham acesso físico a eles, que têm acesso ao servidor.

### Criptografia

Após a autenticação mútua, os dois participantes da comunicação estabelecem uma conexão criptografada. Para que isso ocorra, é gerada uma chave que expira quando a sessão é encerrada. Ela não deve ser confundida com o par das chaves pública e privada, que é usado apenas para a troca de chaves. A chave usada na criptografia simétrica **é válida apenas por uma sessão**. Tanto cliente quanto servidor têm a mesma chave, portanto, todas as mensagens trocadas entre eles podem ser criptografadas e descriptografadas. Cliente e servidor criam a chave simultaneamente, mas de forma independente. No chamado **algoritmo de troca de chaves**, ambas as partes usam tanto informações públicas quanto secretas para criar a chave.

Outra forma de criptografia realizada pelo protocolo SSH ocorre por meio de **hashing**. Um *hash* é um tipo de assinatura de dados transmitidos. Um algoritmo gera um *hash* único a partir dos dados a serem transmitidos. Se eles forem manipulados, o valor de *hash* é automaticamente alterado. Dessa forma, o destinatário saberá que terceiros alteraram os dados no meio do caminho. Os valores de *hash* são projetados de forma que não possam ser simulados com facilidade. Não é possível criar duas transmissões diferentes com o mesmo *hash*. O recurso é conhecido como proteção contra colisão (*collision protection*).

### Portas SSH

Portas TCP são terminais (*endpoints*) que abrem servidores e clientes, permitindo a comunicação entre eles. É por meio das portas que os parceiros de comunicação recebem e enviam pacotes de dados. O TCP tem um espaço de endereçamento de 16 bits, o que possibilita a abertura de 65.535 portas. No entanto, a ***Internet Assigned Numbers Authority* (IANA)** atribui um número de porta para determinadas aplicações. Por padrão, todas as conexões SSH são executadas na **porta 22**.

Nota Como a porta pela qual as conexões SSH passam é amplamente conhecida e transmite dados sensíveis, ela é o destino favorito de criminosos virtuais. Por esse motivo, alguns usuários acreditam que faz sentido realocar a porta SSH. No entanto, isso só aumenta a proteção a curto prazo. Com um *port scanner*, é possível descobrir todas as portas usadas por um computador.

O protocolo SSH também permite o **redirecionamento de portas (*port forwarding*)**. A porta SSH de um cliente ou de um servidor é usada por um outro participante dentro da rede local, para criar uma conexão segura pela internet. Para fazer isso, os participantes criam um túnel: os dados são recebidos pela porta 22 e encaminhados ao cliente que está na rede local.

### Clientes SSH

O cliente SSH costuma ser o próprio computador que você usa para estabelecer uma conexão com o servidor. Em alguns casos (a depender do seu sistema opercional), você precisará instalar um **software para estabelecer uma conexão SSH**. Esse tipo de programa costuma ser chamado de *SSH clients*. O [Tectia SSH](https://www.ssh.com/products/tectia-ssh/ "Site do Tectia SSH") é pago, vem da comunicação de segurança SSH e contém, adicionalmente, um *server software*. Há, também, alternativas gratuitas, como o software de código aberto [PuTTy](https://www.chiark.greenend.org.uk/~sgtatham/putty/ "Site do PuTTy") (para Windows e Linux) e o [lsh](http://www.lysator.liu.se/~nisse/lsh/ "Site oficial do Ish"), que funciona em todos os sistemas operacionais baseados em Unix.

Dica Alguns programas oferecem aos usuários uma interface gráfica que simplifica a configuração e a implementação do protocolo SSH. A princípio, o Secure Socket Shell também pode ser executado por linha de comando, mesmo sem ter sido instalado no macOS ou em outro sistema operacional em Unix.

### Servidores SSH

O servidor SSH é a contraparte do cliente. O termo também é usado para se referir ao software. Boa parte dos softwares de clientes também funciona nos servidores. Além disso, existem **softwares projetados exclusivamente para servidores SSH**. É normal que o SSH seja iniciado nos servidores quando o computador é inicializado. Assim, você consegue acessar o servidor externamente a qualquer momento, via SSH.

A rigor, o servidor SSH não precisa estar localizado em um centro de dados remoto. Por exemplo, um usuário também pode instalar um **servidor SSH em seu próprio computador** e aproveitar as vantagens do redirecionamento de portas do conforto do seu lar.


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/servidor/ferramentas/o-que-e-ssh-protocolo-ssh/](https://www.ionos.com/pt-br/digitalguide/servidor/ferramentas/o-que-e-ssh-protocolo-ssh/) for AI/LLM consumption.