Acessando a Raspberry Pi remotamente: SSH e VNC
Diversos projetos que fazem uso de conexão de rede, como servidores de arquivos, bots, sistemas de vigilância e servidores de jogos, necessitam de uma maneira fácil e prática de configuração das máquinas que as hospedam. Por exemplo, imagine que você precisasse se deslocar fisicamente toda vez que você necessitasse fazer a menor das configurações, por exemplo adicionar ou remover um novo usuário que pode acessar os filmes da pasta de downloads compartilhada da sua casa.
Felizmente nós podemos facilitar essa e outras tarefas usando protocolos de controle remoto. A ideia geral por trás desses protocolos é um mecanismo que permite acessar e controlar uma interface de usuário, seja ela de prompt de comando ou gráfica, aonde simulamos estar acessando diretamente a máquina em questão.
No caso da Raspberry Pi a necessidade por esses tipos de ferramentas de controle é ainda mais latente se imaginarmos a quantidade de aplicações remotas que podemos fazer com essa placa, principalmente no contexto de Internet das Coisas. Assim, neste tutorial Acessando a Raspberry Pi remotamente: SSH e VNC aprenderemos um pouco da teoria e da prática por trás de duas soluções de controle remoto mais comuns para Raspberrys.
Materias necessários
Primeiramente destacamos os componentes necessários para acompanhar esse projeto: uma Raspberry Pi, uma fonte de 5V/3A e um Cartão SD. Por sorte você encontra aqui na Autocore Robótica um Kit Completo com a versão de 4GB, que contém todo o básico além de cabo HDMI e case com refrigeração.
Preparação inicial: Raspberry Pi OS
Nós veremos nesta seção como instalar um sistema operacional na Raspberry Pi. Usaremos o Raspberry Pi OS, sistema oficial desenvolvido e mantido pela Raspberry Pi Foundation (grupo responsável pela criação e atualização da placa), que vem em três versões:
- Desktop e software recomendados: a versão mais completa do sistema e conta com ambiente gráfico e pacote quase completo de softwares pré-instalados, sendo assim a versão mais recomendada para iniciantes.
- Apenas com desktop: a versão “meio-termo” do sistema e conta com ambiente gráfico e apenas um subconjunto de programas considerados essenciais.
- Versão Lite: a versão mais econômica e leve, conta apenas com ambiente de linha de comando e instalação mínima de programas.
Usaremos a primeira versão, Raspberry Pi OS com desktop e software recomendados, pois é a mais completa e já contará com todos os programas necessários do lado da Raspberry Pi. Além disso, se você estiver explorando a placa pela primeira vez, você terá configurado o ambiente mais confortável não só para esse projeto, mas qualquer outro que te interessar.
Para baixar a imagem do sistema, acesse este link, desça até a seção Raspberry Pi OS e clique em Download na versão Raspberry Pi OS with desktop and recommended software. Da mesma forma se você preferir fazer o download via Torrent, basta clicar no link Download torrent.
Gravando imagem no Cartão SD
Recomendamos dois programas para gravação de imagens em Cartão SD: Win32DiskImager e balenaEtcher, os quais possuem funcionamento semelhante: selecione o arquivo da imagem, escolha a unidade correta do Cartão SD e inicie a gravação. Deixamos a seguir uma descrição dos dois para que você escolha aquele que mais se adequar ao seu gosto.
O Win32DiskImager é o mais simples das duas opções. Sua interface oferece apenas as opções que precisamos: selecionar qual imagem gravar, qual unidade deve ser gravada e inicar gravação, além da função opcional de verificar a integridade da gravação. Sua única desvantagem é que ele não sabe trabalhar com arquivos compactados, como é o caso da imagem que baixamos no passo anterior. Portanto, você precisará retirar o arquivo de imagem primeiro usando um programa como 7Zip e depois usar o Win32DiskImager.
O balenaEtcher é tão simples quanto a opção anterior, mas possui uma interface gráfica mais amigável e, diferente do Win32DiskImager, não é necessário remover a imagem do arquivo compactado antes. Esse é o programa recomendado se você for iniciante.
Uma vez que você gravou a imagem do Raspberry Pi OS no seu Cartão SD, remova-o do computador, insira-o na Raspberry e a ligue; a primeira inicialização é a mais longa pois o sistema fará as configurações iniciais, principalmente a expansão do Cartão para uso total do espaço.
Conectando à rede
Nossa Raspberry precisa estar conectada à rede para que possamos encontrá-la e eventualmente controla-la. Portanto, o primeiro passo a se executar assim que a placa estiver ligada e pronta para uso é garantir que você está conectado à rede.
Se ela estiver conectada via cabo ethernet você não precisará fazer mais nenhuma configuração, mas apenas por garantia recomenda-se que abra o navegador padrão do sistema (Chromium) e tente acessar uma página qualquer. Se tudo correr bem você pode ir para o passo seguinte.
Caso você optar por conectar a sua Raspberry via rede sem-fio a configuração é tão simples quanto em qualquer outro sistema. Acesse o menu de conexão WiFi localizado na barra no canto superior esquerdo, escolha a rede que se quer conectar e entre com a senha.
Ante de continuarmos, uma observação sobre conexões antes de prosseguirmos: conexões via cabo ethernet são mais rápidas e estáveis que aquelas via WiFi. Tenha isso em mente enquanto usar SSH e VNC. Em muitos casos a diferença é tão pequena que se torna imperceptível, mas dependendo do seu projeto você pode querer refletir entre o balanço entre essas duas opções de conexão.
Habilitando SSH e VNC no Raspberry PI OS
Precisamos fazer uma última configuração em nossa Raspberry antes de falarmos sobre a teoria por trás desses duas formas de conexão e como usá-las de fato. Vamos habilitar o sistema para receber conexões desses tipos.
Com a Raspberry ligada e pronta para uso, navegue até o Menu Principal (Ícone de framboesa no canto superior esquerdo) > Preferences > Raspberry Pi Configuration > Interfaces. Clique em Enable nas opções SSH e VNC tal como na imagem a seguir. Depois, aperte em OK e reinicie o sistema.
Pronto! Agora podemos seguir com a discussão sobre SSH e VNC e, finalmente, ver como usá-los.
O que é SSH?
SSH (Secure Shell) é um protocolo de conexão de rede criptografado que permite um computador controlar um segundo computador de maneira segura. Podemos entender melhor como o SHH funciona se detalharmos os termos principais da definição:
- Protocolo: um protocolo é conjunto de regras que definem um processo; em computação, especialmente em Redes de Computadores, um protocolo é um conjunto de mensagens que definiem uma comunicação entre dois ou mais computadores.
- Conexão de rede: o SSH permite que dois computadores usem uma rede (seja local ou global) para se comunicar entre si, trocando mensagens e comandos.
- Criptografado: o protocolo SSH realiza a troca de mensagens a partir de um esquema de Criptografia de chave pública, o que garante que a conexão criada seja segura (mesmo em redes inseguras).
- Controlar: chamamos de shell toda interface que permite um usuário controlar um computador; o SHH expõe um shell de maneira remota e segura para controle a partide uma rede.
As definições acima nos ajudarão a entender também o VNC mais a frente.
O SSH é uma das formas mais usadas para controle e gerencia remota de sistemas. Por ser um protocolo e não uma solução particular, é possível estabelecer conexões entre diferentes sistemas operacionais. Por exemplo, você pode usar um cliente SSH (programa que implementa o protocolo) instalado no Windows e se conectar com uma máquina Linux, ou vice-versa.
Agora que entendemos o que é o SSH, é importante desfazermos um equívoco bastante comum. É normal chamarmos de SSH os programas que permitem a conexão remota entre dois computadores. Essa afirmação está errada: SSH é o protocolo de comunicação, enquanto que os programas são clientes que implementam o protocolo. Existem vários desses programas, sendo o Putty o mais conhecido de todos e aquele que sugerimos usar se você estiver no sistema operacional Windows.
Instalando o Putty
Como já mencionado, o Putty é um cliente SSH. Uma de suas características mais atrativas é que esse programa é multiplataforma, ou seja, existem versões para vários sistemas. Este tutorial abordará a conexão entre uma máquina Windows 10 usando Putty e a Raspberry Pi. Para baixar o Putty, acesse a página de download do programa e escolha a versão adequada ao seu sistema.
Usando o Putty
Abra o Putty a partir do Menu Iniciar. Uma vez com ele ligado você deve encontrar uma janela semelhante a da imagem a seguir. No campo Host Name (or IP address) insira raspberrypi, depois clique em Open.
A conexão deve ser criada rapidamente. Uma janela indiciará que esta é a primeira vez conectando à placa; cliquem em Accept.
Uma janela com um prompt de comando surgirá com a mensagem login as:. As credencias padrão são:
Usuário: pi
Senha: raspberry
Parabéns! Você conseguiu se conectar com SSH com sucesso usando Putty! Agora você tem acesso total ao terminal de usuário da sua Raspberry, podendo efetuar várias tarefas de controle e gerencia do sistema.
Usar SSH é uma maneira bastante amigável de aprender o terminal Linux se você ainda for iniciante. É bastante confortável se conectar remotamente à Raspberry enquanto navega e explora cursos e materiais de estudo, tudo isso do seu computador do dia-a-dia.
Primeira tarefa com SSH: mudar a senha padrão
É recomendado pelo próprio sistema operacional que você modifique o quanto antes a senha padrão da sua Raspberry. O motivo é bem simples de entender: todos os sistemas Raspberry Pi OS saem com a mesma senha padrão e, em muitos casos (como no seu), a plaquina é configurada para uso remoto, por exemplo via SSH. Portanto é uma grande falha de segurança deixar a sua placa exposta à rede com uma senha conhecida globalmente.
Por sorte o procedimento de mudança é fácil: bastar usar o comando passwd e seguir as instruções (inserir senha atual, inserir nova senha, repetir nova senha). Lembre-se de usar a nova senha daqui por diante, inclusive em futuras novas conexões SSH.
BÔNUS: E se o Putty não encontrar a minha Raspberry?
O método usado acima para conexão usou o que chamamos de hostname; um apelido que o dispositivo diz ter para a rede, assim não precisamos decorar o endereço IP que ele recebeu. A ideia por trás do conceito de hostname é bastante semelhante, portanto, aos endereços Web (é muito mais fácil decorar www.google.com do que 148.132.67.4, ou algo do tipo).
Entretanto, alguma configuração do seu roteador pode impedir o uso de hostnames dentro da rede local. Não se preocupe, pois ainda podemos nos conectar à Raspberry através do seu endereço IP completo. Mas para isso precisamos primeiro descobri-lo.
Existem várias formas de vasculhar a rede local à procura dos IPs de cada dispositivo conectado. Abaixo eu cito algumas:
- Usando a tabela de endereços do seu roteador (ver manual do roteador para instruções).
- No Windows, detectando com ajuda de um programa como o Angry IP Scanner.
- No Android, usando um app como o Fing.
- Em ambiente Linux, usando um analisador de rede como nmap.
A imagem abaixo mostra o uso das três primeiras soluções citadas. Aqui eu destaco a minha Raspberry como sendo aquela com hostname MEYE-XXXXXXXX, pois eu estava experimentando com outro sistema operacional; no seu caso isso pode mudar. Note que em todas as ferramentas nós encontramos o mesmo IP (no meu caso 192.168.15.5), como não podia ser diferente. De posse do endereço, a única mudança no passo de conexão do Putty é inseri-lo ao invês do hostname. A conexão deve se estabelecer sem problemas.
Note que você poderá precisar repetir esse procediemento de busca por IP algumas vezes, já que o seu roteador pode atribuir um endereço diferente aos dispositivos de tempos em tempos!
O que é VNC?
VNC (Virtual Network Computing) é um sistema de compartilhamento de desktop que permite que um computador controle o ambiente gráfico de um outro computador a partir do envio de comandos de teclado e mouse. O controlador envia o estado do seu teclado e mouse via rede para o computador controlado, que por sua vez interpreta esses comandos como se vinhessem de periféricos conectados localmente e responde enviando a “imagem” atual do sistema, que é mostrada no controlador. Em outras palavras, é como se conectássemos via rede o nosso teclado, mouse e monitor a um computador diferente.
Os conceitos teóricos de conexão, protocolo e rede que vimos com o SSH se aplicam aqui também, como não podia ser diferente. O VNC é, portanto, outra forma de efetuar conexões remotas, dessa vez com a facilidade de não termos apenas acesso a um terminal de comandos de texto, mas acesso completo à interface gráfica do sistema.
VNC Viewer: o cliente VNC escolhido
Tal como anteriormente com o SSH, o protocolo de conexão pode ser implementado por diferente programas em diferentes sistemas. No caso do VNC optaremos por usar o cliente VNC Viewer para conexão e controle remoto da Raspberry, programa recomendado pela própria Raspberry Pi Foundation. Outros clientes também podem ser experimentados, como o TightVNC e o TeamViewer, e deixamos à curiosidade do leitor de brincar com eles depois.
O download do VNC Viewer pode ser efetuado neste link, bastando apenas escolher a versão que se adequada ao seu sistema operacional; neste tutorial usaremos a versão para Windows. A instalação é simples e intuitiva, basta deixar as opções padrão e estaremos prontos para usar o programa.
Configurações VNC do lado da Raspberry
Se você tiver habilitade o serviço VNC como vimos em um dos primeiros passos deste tutorial e logo após reiniciado a Raspberry, um ícone com a logo VNC surgirá na barra de tarefas no canto superior direito, próximo ao relógio e conexões de rede. Clicando nesse ícone uma janela como a da figura abaixo aparecerá.
A janela de informações mostra as informações necessárias para realizar uma conexão: o endereço de IP atual da Raspberry (no meu caso era 192.168.15.10, mas a sua provavelmente será diferente), além das informações de Checagem de Identidade (Identity check): a assinatura única e a frase de segurança. Essas informações também serão diferentes na sua Raspberry. Você não precisará digitar nenhuma dessas duas informações de checagem, apenas decorá-las (de preferência apenas a frase, que é mais fácil). Essas informações aparecerão na janela de conexão do cliente à título de confirmação (por isso o nome Checagem de Identidade).
Configurações do lado do VNC Viewer
A seguir, e de posse do IP (ou hostname) da Raspberry, inicie o VNC Viewer a partir do Menu Iniciar. A janela que surgirá será semelhante a da imagem a seguir. Inisira o IP no campo de texto no topo da janela e aperte Enter.
Se o VNC Viewer encontrar a Raspberry e esta estiver com o serviço VNC devidamente habilitado, uma janela semelhante a da imagem abaixo surgirá. Aqui você deve inserir as informações de usuário e senha e conferir a Checagem de Identidade; note que no meu caso elas conferem perfeitamente. Clique em Ok e aguarde a conexão ser estabelecida.
Se tudo correr bem, uma janela surgirá com o desktop da sua Raspberry completamente acessível. Pronto, você configurou e aprendeu a usar o básico do VNC!
Demonstração!
Considerações finais
Neste tutorial, falamos um pouco sobre SSH e VNC, duas maneiras de acessar e controlar remotamente a sua Raspberry Pi. A seguir, discutimos suas diferenças e peculiaridades, mostrando que ambas soluções são válidas e apresentam vantagens e desvantagens em função do contexto/projeto que se quer aplicar a Raspberry. Além disso, os clientes Windows Putty e VNC Viewer foram apresentados como sugestões inicias de aplicações para experimentar com esses protocolos de conexão e controle. Dessa forma tentamos introduzir o uso dessas ferramentas importante no controle e gerência de sistemas remotos. Por fim, espero que as dicas aqui te ajudem no seu próximo projeto!