Conectar a um servidor Linux remoto usando SSH

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá as habilidades essenciais para se conectar e gerenciar um servidor Linux remoto usando o protocolo Secure Shell (SSH). Você começará configurando o ambiente remoto, o que envolve a instalação e configuração do pacote do servidor OpenSSH. Após garantir que o servidor esteja pronto para aceitar conexões, você aprenderá como obter seu endereço IP, um passo crucial para estabelecer uma conexão a partir de uma máquina cliente.

Uma vez que o servidor esteja configurado, você praticará dois métodos principais de interação remota via SSH. Primeiro, você estabelecerá uma sessão de shell totalmente interativa, concedendo acesso completo à linha de comando da máquina remota. Em segundo lugar, você aprenderá como executar um comando único e específico no servidor remoto sem iniciar uma sessão interativa completa, uma técnica altamente eficaz para tarefas de script e automação.

Instalar e configurar o servidor OpenSSH

Nesta etapa, você instalará o pacote do servidor OpenSSH, que permite que seu sistema aceite conexões SSH de entrada. O SSH, ou Secure Shell, é um protocolo de rede criptográfico para operar serviços de rede de forma segura sobre uma rede não segura. O pacote openssh-server contém os componentes principais para hospedar um servidor SSH.

Primeiro, é uma boa prática atualizar a lista de pacotes do seu sistema para garantir que você obtenha a versão mais recente do software. O usuário labex possui privilégios de sudo, que são necessários para o gerenciamento de pacotes em todo o sistema.

Execute o seguinte comando para atualizar o índice de pacotes:

sudo apt-get update

Você verá uma saída semelhante à seguinte, indicando que as listas de pacotes estão sendo obtidas dos repositórios:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
Fetched 1,845 kB in 2s (1,040 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up-to-date.

Agora, você pode instalar o pacote openssh-server usando o apt-get. O sinalizador -y responde automaticamente "yes" a quaisquer prompts, tornando a instalação não interativa.

sudo apt-get install -y openssh-server

Em alguns ambientes LabEx, o Ubuntu pode exibir uma caixa de diálogo de reinicialização de serviço durante a instalação. Se isso acontecer, não reinicie o vncserver, pois reiniciá-lo pode desconectar a área de trabalho do navegador e deixar a página cinza. Use uma destas opções seguras:

  • Pressione Tab para selecionar <Cancel>, depois pressione Enter.
  • Ou pressione Space para desmarcar a seleção vncserver, depois selecione <Ok>.

Se a área de trabalho do navegador ainda ficar cinza, atualize a página do LabEx para reconectar à sessão e continuar com o laboratório.

Após a conclusão do comando, você deverá ver uma saída confirmando a instalação e configuração do openssh-server e suas dependências:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  ncurses-term openssh-sftp-server ssh-import-id
...
Setting up openssh-server (1:8.9p1-3ubuntu0.1) ...
...
Creating SSH2 ECDSA key; this may take some time ...
Creating SSH2 ED25519 key; this may take some time ...
...

O serviço do servidor OpenSSH, chamado sshd, deve iniciar automaticamente após a instalação. Você pode verificar seu status usando o comando systemctl, que é uma ferramenta para controlar o sistema e o gerenciador de serviços systemd.

Verifique o status do serviço SSH:

sudo systemctl status ssh

A saída deve mostrar que o serviço está active (running). Isso confirma que o servidor SSH está pronto para aceitar conexões.

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-10-30 10:30:00 UTC; 5s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1234 (sshd)
      Tasks: 1 (limit: 4617)
     Memory: 1.2M
        CPU: 8ms
     CGroup: /system.slice/ssh.service
             └─1234 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

...

Pressione a tecla q no seu teclado para sair da visualização de status e retornar ao prompt de comando.

Ótimo! O servidor OpenSSH agora está instalado e em execução no seu sistema. Na próxima etapa, você criará um novo usuário para demonstração de SSH e, em seguida, aprenderá como encontrar o endereço IP do servidor e conectar-se a ele.

Criar um novo usuário para demonstração de SSH

Nesta etapa, você criará uma nova conta de usuário que será usada para conexões SSH. Como o usuário padrão labex possui privilégios de sudo, mas não sabemos sua senha para autenticação SSH, precisamos criar um usuário dedicado com uma senha conhecida para esta demonstração.

Primeiro, crie um novo usuário chamado sshuser usando o comando adduser. Este comando criará a conta de usuário e solicitará que você defina uma senha e outros detalhes.

sudo adduser sshuser

Você será solicitado a inserir e confirmar uma senha para o novo usuário. Para este laboratório, use password123 como senha. Você também será solicitado a fornecer informações adicionais, como nome completo, número da sala, etc., mas pode pressionar Enter para pular esses campos.

Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

Agora, verifique se o usuário foi criado com sucesso verificando o arquivo /etc/passwd:

grep sshuser /etc/passwd

Você deverá ver uma saída semelhante a:

sshuser:x:1000:1000:,,,:/home/sshuser:/bin/bash

Isso confirma que a conta sshuser foi criada com um diretório pessoal em /home/sshuser e usa o shell bash. Os números exatos de UID (ID do usuário) e GID (ID do grupo) podem variar dependendo dos usuários existentes no sistema.

Você também pode verificar se o diretório pessoal do usuário foi criado. Observe que você precisa de privilégios de sudo para acessar o diretório pessoal de outro usuário:

sudo ls -la /home/sshuser

A saída deve mostrar o conteúdo do diretório pessoal do usuário:

total 20
drwxr-x--- 2 sshuser sshuser 4096 Jun 30 09:26 .
drwxr-xr-x 5 root    root    4096 Jun 30 09:26 ..
-rw-r--r-- 1 sshuser sshuser  220 Jun 30 09:26 .bash_logout
-rw-r--r-- 1 sshuser sshuser 3771 Jun 30 09:26 .bashrc
-rw-r--r-- 1 sshuser sshuser  807 Jun 30 09:26 .profile

Observe que o diretório pessoal possui permissões restritas (drwxr-x---), o que significa que apenas o proprietário (sshuser) e os usuários no mesmo grupo podem acessá-lo. É por isso que o sudo é necessário para listar seu conteúdo.

Perfeito! Agora você tem uma conta de usuário sshuser com a senha password123 que você pode usar para conexões SSH nas etapas a seguir.

Obter o endereço IP do servidor SSH

Nesta etapa, você aprenderá como encontrar o endereço IP do seu servidor SSH. Um endereço IP é um rótulo numérico exclusivo atribuído a cada dispositivo conectado a uma rede de computadores que usa o Protocolo de Internet para comunicação. Para estabelecer uma conexão SSH, a máquina cliente precisa saber o endereço IP do servidor ao qual deseja se conectar.

Em um cenário típico com duas máquinas separadas, você usaria esse endereço IP para se conectar a partir do cliente. No entanto, para este laboratório, você está trabalhando em uma única máquina virtual que atuará tanto como servidor SSH quanto como cliente SSH. Para se conectar ao servidor SSH em execução na sua própria máquina, você pode usar um endereço IP especial, 127.0.0.1, também conhecido como localhost. Este endereço sempre se refere à própria máquina local.

Mesmo assim, é uma habilidade essencial saber como encontrar o endereço IP da sua máquina voltado para a rede. O comando moderno para isso no Linux é ip.

Para exibir informações sobre todas as interfaces de rede no seu sistema, use o comando ip addr:

ip addr

A saída listará todas as interfaces de rede, como lo (a interface de loopback), eth0 (a interface Ethernet principal) e possivelmente docker0 (interface de ponte Docker). Você está procurando a entrada inet sob sua interface de rede principal, que normalmente é eth0.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:01:82:ae brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.114/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159625sec preferred_lft 1892159625sec
    inet6 fe80::216:3eff:fe01:82ae/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:86:fe:f0:88 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

No exemplo acima, o endereço IP principal para a interface eth0 é 172.16.50.114. Você também pode ver uma interface docker0 se o Docker estiver instalado no sistema.

Um comando mais simples para exibir apenas os endereços IP da máquina é hostname -I.

hostname -I

Este comando imprimirá uma lista separada por espaços dos endereços IP da máquina.

172.16.50.114 172.17.0.1

A saída mostra vários endereços IP: o IP da interface de rede principal (172.16.50.114) e o IP da ponte Docker (172.17.0.1).

Agora você sabe como encontrar o endereço IP da sua máquina. Na próxima etapa, você usará o endereço localhost (127.0.0.1) para se conectar ao servidor SSH em execução nesta mesma máquina.

Estabelecer uma sessão SSH interativa com o servidor remoto

Nesta etapa, você usará o cliente ssh para estabelecer uma sessão interativa com o servidor OpenSSH que você configurou. Uma sessão interativa oferece um prompt de linha de comando no servidor remoto, permitindo que você execute comandos como se estivesse fisicamente logado nele.

Para se conectar, você usa o comando ssh seguido pelo nome de usuário e o endereço do servidor, no formato ssh <user>@<hostname_or_ip>. Como você está se conectando ao servidor em execução na sua própria máquina (localhost) como o usuário sshuser, você usará o endereço IP 127.0.0.1.

Abra um terminal e execute o seguinte comando:

ssh sshuser@127.0.0.1

Na primeira vez que você se conectar a qualquer novo servidor SSH, seu cliente SSH exibirá a impressão digital da chave pública do servidor e solicitará que você confirme sua autenticidade. Esta é uma medida de segurança para evitar ataques de "man-in-the-middle". Você deve digitar yes e pressionar Enter para continuar.

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '127.0.0.1' (ED25519) to the list of known hosts.

Após confirmar a chave do host, você será solicitado a inserir a senha do usuário sshuser no servidor remoto. Insira a senha password123 que você definiu ao criar o usuário.

sshuser@127.0.0.1's password:

Assim que você inserir a senha correta, você estará logado e verá a mensagem de boas-vindas do servidor e um novo prompt de comando. Observe como o prompt pode mudar para indicar que você está no host remoto.

Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

sshuser@ubuntu:~$

Para confirmar que você está em uma sessão remota, você pode executar um comando como pwd para imprimir o diretório de trabalho atual.

pwd

A saída mostrará seu diretório pessoal na máquina remota.

/home/sshuser

Para fechar a sessão SSH interativa e retornar ao shell da sua máquina local, basta digitar exit e pressionar Enter.

exit

Você verá uma mensagem confirmando que a conexão foi encerrada e seu prompt de comando original retornará.

logout
Connection to 127.0.0.1 closed.

Agora você estabeleceu e encerrou com sucesso uma sessão SSH interativa.

Executar um comando único remotamente via SSH

Nesta etapa, você aprenderá como executar um único comando em um servidor remoto sem iniciar uma sessão interativa completa. Este é um recurso poderoso do SSH, amplamente utilizado em scripts e para automação, pois permite que você recupere informações rapidamente ou execute uma tarefa em uma máquina remota e, em seguida, desconecte-se imediatamente.

A sintaxe para isso é simplesmente anexar o comando que você deseja executar ao final da sua string de conexão ssh usual. É uma boa prática colocar o comando remoto entre aspas para evitar que o shell local o interprete.

Vamos tentar executar o comando hostname no servidor remoto. Este comando imprime o nome do host do sistema.

ssh sshuser@127.0.0.1 "hostname"

Você será solicitado a inserir a senha (password123) exatamente como antes. Depois de inseri-la, o comando hostname será executado no servidor remoto, sua saída será impressa no seu terminal e a conexão SSH será encerrada automaticamente.

sshuser@127.0.0.1's password:
iZrj91w6gb8osv0mra83hdZ

Observe que você retorna imediatamente ao seu prompt de comando local sem precisar digitar exit.

Você também pode executar comandos mais complexos. Por exemplo, vamos listar o conteúdo do diretório raiz (/) no servidor remoto usando ls -l /.

ssh sshuser@127.0.0.1 "ls -l /"

Novamente, insira a senha password123 quando solicitado. A saída será uma listagem longa dos arquivos e diretórios no sistema de arquivos raiz do servidor remoto.

sshuser@127.0.0.1's password:
total 72
lrwxrwxrwx   1 root root     7 Apr 21  2022 bin -> usr/bin
drwxr-xr-x   4 root root  4096 May 30  2023 boot
drwxr-xr-x  19 root root  4080 Jun 30 09:23 dev
drwxr-xr-x 137 root root 12288 Jun 30 09:26 etc
drwxr-xr-x   5 root root  4096 Jun 30 09:26 home
lrwxrwxrwx   1 root root     7 Apr 21  2022 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Apr 21  2022 lib32 -> usr/lib32
lrwxrwxrwx   1 root root     9 Apr 21  2022 lib64 -> usr/lib64
lrwxrwxrwx   1 root root    10 Apr 21  2022 libx32 -> usr/libx32
drwx------   2 root root 16384 Dec 28  2022 lost+found
drwxr-xr-x   2 root root  4096 Apr 21  2022 media
drwxr-xr-x   2 root root  4096 Apr 21  2022 mnt
drwxr-xr-x   5 root root  4096 Feb 27  2023 opt
dr-xr-xr-x 231 root root     0 Jun 30 09:22 proc
drwx------   8 root root  4096 Jun 30 09:26 root
drwxr-xr-x  35 root root  1060 Jun 30 09:30 run
lrwxrwxrwx   1 root root     8 Apr 21  2022 sbin -> usr/sbin
drwxr-xr-x  10 root root  4096 Feb 18  2023 snap
drwxr-xr-x   2 root root  4096 Apr 21  2022 srv
dr-xr-xr-x  13 root root     0 Jun 30 09:22 sys
drwxrwxrwt  18 root root  4096 Jun 30 09:30 tmp
drwxr-xr-x  14 root root  4096 Apr 21  2022 usr
drwxr-xr-x  13 root root  4096 Apr 21  2022 var

Este método é incrivelmente eficiente para gerenciar vários servidores ou para integrar operações remotas aos seus scripts de shell locais. Agora você aprendeu as duas maneiras principais de usar o SSH: para sessões interativas e para execução de comandos únicos.

Resumo

Neste laboratório, você aprendeu as etapas fundamentais para habilitar e usar o Secure Shell (SSH) para gerenciamento de servidores remotos. Você começou preparando o servidor Linux remoto, o que envolveu a atualização do índice do repositório de pacotes usando sudo apt-get update e, em seguida, a instalação do pacote openssh-server. Esse processo configurou o sistema para aceitar conexões SSH de entrada com segurança, iniciando automaticamente o serviço sshd.

Em seguida, você criou uma conta de usuário dedicada (sshuser) com uma senha conhecida (password123) para fins de autenticação SSH, já que o usuário padrão labex possui privilégios de sudo, mas não possui uma senha para conexões SSH. Você verificou a criação do usuário e confirmou que o diretório pessoal foi estabelecido corretamente.

Com o servidor e a conta de usuário prontos, você aprendeu como obter o endereço IP do servidor, uma informação crucial para qualquer cliente iniciar uma conexão. Você então praticou as duas maneiras principais de usar o SSH: estabelecer uma sessão de linha de comando completa e interativa para trabalhar diretamente no servidor remoto e executar um comando único e não interativo remotamente, o que é altamente eficiente para tarefas de script e automação.