Fase 1 — Acesso & Setup Inicial

0:00 / 0:00

A primeira hora com a VM. Sai do estado "recebi um IP, um usuário e uma senha" e chega no estado "to dentro, senha trocada, sudo respondendo, firewall conhecido". Sem essa fase, nenhuma das próximas roda.

Os exemplos usam placeholders genéricos: IP_DA_VM, seu-usuario, senha-inicial, sua-senha-nova. Substitua pelos valores reais do seu setup.

Primeira conexão SSH — comando, fingerprint e a senha invisível +

Abre um terminal no Windows (Windows Terminal, PowerShell, cmd, ou cliente gráfico tipo MobaXterm / PuTTY / Termius — todos funcionam) e roda:

ssh seu-usuario@IP_DA_VM

Da primeira vez: fingerprint do servidor

O SSH mostra uma mensagem grande com a fingerprint da máquina e pergunta se você confia:

The authenticity of host 'IP_DA_VM (IP_DA_VM)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Responde yes e dá Enter. A fingerprint fica guardada no seu computador no arquivo ~/.ssh/known_hosts, e o SSH nunca mais pergunta. Se um dia a fingerprint mudar do nada, o SSH grita — porque pode ser um ataque de homem-no-meio.

A pegadinha: senha invisível

Quando o SSH pede a senha, nada aparece na tela. Sem asterisco, sem ponto, o cursor não se mexe. Dá a impressão de que o teclado não funciona — mas funciona normal. É proposital: quem está do seu lado não vê nem o tamanho da senha. Digita, Enter, vai.

Troca de senha obrigatória — o sistema força antes do shell +

Na primeira vez que você loga, o sistema não te dá o shell de cara. Marca a conta como "senha expirada" e força a troca antes de tudo:

You are required to change your password immediately (administrator enforced).
Changing password for seu-usuario.
Current password:        ← digite a senha-inicial de novo
New password:            ← escolha uma senha NOVA forte
Retype new password:     ← repita a senha nova

Três digitações, todas invisíveis. Se a confirmação bater, o sistema aceita e a sessão SSH cai imediatamente — é normal. Reconecta com a senha nova:

ssh seu-usuario@IP_DA_VM

Dica: no Windows Terminal você consegue colar a senha com Ctrl+Shift+V ou clique direito do mouse. Nada aparece na tela enquanto cola — é normal, só dá Enter.

Quando dá erro: Authentication token manipulation error

Se você ver isso depois de digitar as três senhas:

passwd: Authentication token manipulation error
passwd: password unchanged
Connection to IP_DA_VM closed.

Causas mais comuns, em ordem:

  1. Confundiu o campo Current password. Ele pede a senha atual (ainda é a inicial — senha-inicial). Não a nova que você acabou de inventar. Erro clássico: colar a senha nova nos três campos.
  2. A confirmação não bateu — digitou a senha nova diferente da primeira vez (typo, layout de teclado, copy/paste parcial).
  3. Senha muito fraca — Ubuntu rejeita senha curta, óbvia ou muito parecida com o seu usuário (regra do pam_pwquality). Quando é esse o caso, aparece uma linha tipo BAD PASSWORD: ... logo acima do erro principal.

A sessão cai depois do erro. Reconecta com ssh seu-usuario@IP_DA_VM usando a senha inicial (que ainda é válida — nada foi trocado) e tenta de novo.

Regras mínimas pra uma senha boa

  • Pelo menos 8 caracteres (recomendado 12+)
  • Mistura de maiúsculas + minúsculas + números + símbolos
  • Sem sequências óbvias (12345678, qwerty, seu nome)
  • Anota num gerenciador sério: KeePass, Bitwarden, 1Password

Trocar a senha depois

Em qualquer outro dia, já logado, o comando é:

passwd

Ele pede a senha atual e a nova duas vezes.

Sudo + modelo de responsabilidades — admin da VM vs admin do host +

Dentro da SUA VM você tem sudo total. Isso significa que você é root quando precisa. Pode instalar e remover pacotes, parar e iniciar serviços, abrir e fechar portas no firewall, criar e remover usuários, reconfigurar o que quiser.

sudo apt update
sudo systemctl restart tomcat
sudo ufw allow 8443/tcp

Quando você usa sudo, o sistema pede sua senha (a mesma do login).

O limite: a VM não mexe no host

Num setup típico, dois papéis administrativos coexistem:

PapelEscopoPodeNÃO pode
Você Admin da VM Sudo livre dentro da VM Mexer no host que hospeda a VM
Admin do host Dono do hardware / hypervisor Acessar a VM via console em caso de emergência Mexer no que rola dentro da sua VM no dia-a-dia

Isolamento por firewall (dos dois lados)

O firewall do host bloqueia as portas administrativas (SSH 22, RDP 3389, SMB 445, WinRM) entre a VM e o host. O firewall da VM também bloqueia o mesmo caminho. Os dois lados travam. Se um dia a VM for invadida, o atacante fica preso dentro dela — não consegue saltar pro host nem pras outras VMs do mesmo host.

Essa camada de isolamento não deve ser removida — ela protege você e protege os outros.

O que você pode e o que não pode (resumo)

Pode (sudo livre)NÃO pode
Instalar/remover pacotes (sudo apt install ...)Acessar serviços admin do host (SSH/RDP/SMB/WinRM)
Reiniciar/parar/iniciar serviços (sudo systemctl ...)Mudar o que está rodando fora da VM
Abrir/fechar portas no firewall (sudo ufw ...)Acessar arquivos no host
Criar/remover usuários (sudo adduser ...)(Tudo o resto: dentro da VM você é root)
Instalar Tailscale, cloudflared, Docker, k3s, o que quiser
Rede e firewall (ufw) +

A VM tem um IP fixo, um gateway (saída pra internet), DNS, e um firewall chamado ufw. O ufw é uma camada simples por cima do iptables — bem fácil de operar.

Ver o que está aberto

sudo ufw status

Numa VM típica logo no começo, as portas de entrada abertas são:

PortaServiçoPra quê
22SSHVocê entra por aqui
8080TomcatApp responde aqui (depois de deployar)

A saída pra internet em geral é livre — você consegue baixar pacotes, clonar repositórios, baixar imagens Docker. As regras de saída são mais permissivas que as de entrada.

Abrir uma porta nova

sudo ufw allow 8443/tcp comment 'HTTPS do meu app'
sudo ufw status numbered

O comment é opcional mas ajuda muito a lembrar pra que serve cada regra depois. O status numbered mostra cada regra com um número, útil pra remover uma regra específica.

Cuidado: cada porta aberta é mais uma superfície de ataque. Só abra o que vai usar de verdade.

Bônus — chave SSH (login sem senha) +

Digitar senha toda vez que loga é chato e é menos seguro do que parece. O jeito profissional é usar uma chave SSH. Gera um par de chaves no seu Windows uma única vez (no PowerShell, não na VM):

ssh-keygen -t ed25519

Aceita os defaults dando Enter em tudo (incluindo passphrase vazia, se quiser login sem digitar nada). Isso cria dois arquivos em C:\Users\seu-nome\.ssh\:

  • id_ed25519 — chave privada, nunca compartilhe com ninguém, nunca sai do notebook
  • id_ed25519.pub — chave pública, pode distribuir livremente, é o que vai pra VM

Pegadinha do Explorer do Windows: ele mostra o id_ed25519.pub como tipo "Microsoft Publisher Document" (por causa da extensão .pub). Não é — é só um arquivo de texto. Abre normal no Notepad.

Caminho A — one-liner do PowerShell

No PowerShell do Windows, esse comando lê a sua chave pública e empurra direto pra VM:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh seu-usuario@IP_DA_VM "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Vai pedir sua senha uma última vez. Depois disso, login é direto. Funciona bem quando tudo dá certo — mas o comando é longo e quebra fácil se você colar errado.

Caminho B — manual, em 4 passos dentro da VM

Mais à prova de bobeira. Abre o id_ed25519.pub no Notepad, copia a linha inteira (começa com ssh-ed25519 AAAA... e termina com usuario@MAQUINA), e já logado na VM por senha, cola um comando por vez:

1. Cria a pasta ~/.ssh se não existir:

mkdir -p ~/.ssh

2. Ajusta a permissão da pasta (SSH ignora pastas com permissão aberta demais):

chmod 700 ~/.ssh

3. Acrescenta sua chave no fim do authorized_keys:

echo 'ssh-ed25519 AAAA...sua-chave-publica-inteira... usuario@MAQUINA' >> ~/.ssh/authorized_keys
  • Aspas simples ('...') preservam o conteúdo literal — a chave tem /, +, = que o bash poderia interpretar
  • >> acrescenta no fim (se usar > com uma só, apaga o que tinha — perigoso quando você já tem outras chaves lá)

4. Ajusta a permissão do arquivo (sem isso, o SSH ignora a chave por segurança):

chmod 600 ~/.ssh/authorized_keys

Confere com cat ~/.ssh/authorized_keys — tem que mostrar sua linha inteira. Aí exit, e do PowerShell roda ssh seu-usuario@IP_DA_VM — entra direto, sem pedir senha.

Uma chave Ed25519 de 256 bits é infinitamente mais difícil de adivinhar do que qualquer senha de texto. Mais rápido e mais seguro.

Importante: a chave só funciona pro computador onde a chave privada mora. Se trocar de notebook, gera uma chave nova no novo notebook e adiciona a pública dele no mesmo authorized_keys da VM.

Checklist do primeiro acesso +

Sequência mínima pra deixar a VM utilizável:

  • SSH com seu-usuario / senha-inicial
  • Trocar senha do sistema (forçado pelo OS no primeiro login)
  • Reconectar com a senha nova
  • Confirmar que sudo responde (sudo whoami deve devolver root)
  • Ver as portas abertas: sudo ufw status
  • (Opcional) Configurar chave SSH pra não digitar senha mais
  • (Opcional) Anotar a senha nova num gerenciador (KeePass / Bitwarden)

Com isso pronto, a VM está em estado utilizável pra qualquer uma das próximas fases: Tomcat (deploy de app), PostgreSQL (banco), Tailscale (rede privada) ou Cloudflare Tunnel (domínio próprio com HTTPS).