Conectar-se a um Servidor Linux Remoto Usando SSH

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você adquirirá as habilidades essenciais para se conectar e gerenciar um servidor Linux remoto utilizando o protocolo Secure Shell (SSH). Você começará preparando 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 a comunicação a partir de uma máquina cliente.

Assim que o servidor estiver configurado, você praticará os dois métodos principais de interação remota via SSH. Primeiro, você estabelecerá uma sessão de shell totalmente interativa, que lhe dará acesso completo à linha de comando da máquina remota. Em segundo lugar, você aprenderá como executar um comando específico e único no servidor remoto sem a necessidade de iniciar uma sessão interativa completa, uma técnica extremamente eficaz para tarefas de automação e criação de scripts.

Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para concluir cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 99%. Ele recebeu uma taxa de avaliação positiva de 99% dos alunos.

Instalar e Configurar o Servidor OpenSSH

Nesta etapa, você instalará o pacote do servidor OpenSSH, que permite ao seu sistema aceitar 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 em uma rede não protegida. 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 baixadas 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. A flag -y responde automaticamente "sim" a qualquer solicitação, tornando a instalação não interativa.

sudo apt-get install -y openssh-server

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 o status dele usando o comando systemctl, que é uma ferramenta para controlar o sistema systemd e o gerenciador de serviços.

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.

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

Criar um Novo Usuário para Demonstração do SSH

Nesta etapa, você criará uma nova conta de usuário que será utilizada para as 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ê configure 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. Também serão solicitadas informações adicionais, como nome completo, número da sala, etc., mas você pode pressionar Enter para ignorar 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 consultando o arquivo /etc/passwd:

grep sshuser /etc/passwd

Você deve 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 home em /home/sshuser e utiliza o shell bash. Os números exatos de UID (ID do usuário) e GID (ID do grupo) podem variar dependendo dos usuários já existentes no sistema.

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

sudo ls -la /home/sshuser

A saída deve mostrar o conteúdo do diretório home 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 home possui permissões restritas (drwxr-x---), o que significa que apenas o proprietário (sshuser) e usuários do mesmo grupo podem acessá-lo. É por isso que o sudo é necessário para listar seu conteúdo.

Perfeito! Você agora tem uma conta de usuário sshuser com a senha password123 que poderá usar para conexões SSH nas próximas etapas.

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 utiliza 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 distintas, você usaria este 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 que está rodando 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, saber como encontrar o endereço IP da sua máquina voltado para a rede é uma habilidade essencial. O comando moderno para isso no Linux é o 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 (interface de loopback), eth0 (interface Ethernet primária) e possivelmente docker0 (interface de ponte do Docker). Você deve procurar a entrada inet sob sua interface de rede principal, que normalmente é a 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 primário 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 múltiplos endereços IP: o IP da interface de rede primária (172.16.50.114) e o IP da ponte do 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 que está rodando 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 fornece 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 <usuario>@<hostname_ou_ip>. Como você está se conectando ao servidor que roda 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 (fingerprint) da chave pública do servidor e pedirá que você confirme sua autenticidade. Esta é uma medida de segurança para evitar ataques do tipo "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, será solicitada a senha para o usuário sshuser no servidor remoto. Digite 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 home na máquina remota.

/home/sshuser

Para encerrar 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.

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 obter informações rapidamente ou realizar uma tarefa em uma máquina remota e desconectar-se imediatamente em seguida.

A sintaxe para isso consiste em simplesmente anexar o comando que você deseja executar ao final da sua string de conexão ssh habitual. É uma boa prática envolver 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 de host do sistema.

ssh sshuser@127.0.0.1 "hostname"

Será solicitada 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á fechada 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 detalhada 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 múltiplos servidores ou para integrar operações remotas em seus scripts de shell locais. Você aprendeu agora as duas formas 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) no gerenciamento de servidores remotos. Você começou preparando o servidor Linux remoto, o que incluiu a atualização do índice do repositório de pacotes com sudo apt-get update e a instalação do pacote openssh-server. Esse processo configurou o sistema para aceitar conexões SSH de forma segura, 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 tem uma senha definida para conexões SSH. Você verificou a criação do usuário e confirmou que o diretório home 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 que qualquer cliente inicie uma conexão. Por fim, você praticou as duas formas principais de utilizar o SSH: estabelecendo uma sessão de linha de comando interativa completa para trabalhar diretamente no servidor remoto e executando um único comando remoto não interativo, o que é altamente eficiente para tarefas de script e automação.