agentsclimarketplace

Tailscale setup

Skill gabriel-f-santos/coding-agents/skills/tailscale-setup

Guia setup completo do Tailscale: conta, cliente na máquina local, ACL policy e geração de auth key para servidor. Invocada pelo /hetzner-vm e /linux-vm-hardening quando ssh_mode=tailscale, ou diretamente para configurar um tailnet do zero. Use quando for usar Tailscale como VPN de acesso SSH a servidores.From its SKILL.md

Install
npx -y skills add gabriel-f-santos/coding-agents --skill tailscale-setup

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

5.5 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

Tailscale Setup

Configura o tailnet completo: conta → cliente local → ACL policy → auth key para servidor. Quando invocada por outra skill, os passos já concluídos podem ser pulados — perguntar ao usuário o que já está feito.

Estado atual

echo "=== Tailscale cliente ===" \
  && (tailscale version 2>/dev/null || echo "NAO INSTALADO") \
  && echo "=== Status ===" \
  && (tailscale status 2>/dev/null | head -5 || echo "nao conectado")

Passo 1 — Conta Tailscale

Se o usuário ainda não tem conta:

Acesse https://tailscale.com e clique em Get started. Pode usar conta Google, GitHub, Microsoft ou email. O plano gratuito cobre até 3 usuários e 100 dispositivos — suficiente para uso pessoal.

Confirmar que tem conta antes de continuar.

Passo 2 — Instalar cliente na sua máquina

Verificar o estado acima.

Se já instalado e conectado (tailscale status mostra IP 100.x.x.x): pular este passo.

Se não instalado, perguntar ao usuário:

"Tailscale não encontrado na sua máquina. Posso instalar agora?"

Se confirmar, detectar o OS e instalar:

Linux (Ubuntu/Debian) — rodar diretamente:

curl -fsSL https://tailscale.com/install.sh | sh

macOS — rodar diretamente se brew disponível:

brew install tailscale

Ou orientar a baixar em https://tailscale.com/download/mac se não tiver brew.

Windows: não é possível instalar via terminal — orientar a baixar em https://tailscale.com/download/windows.

Após instalar, autenticar (abre o browser):

sudo tailscale up

Verificar conexão:

tailscale status
# deve mostrar seu dispositivo com IP 100.x.x.x

Passo 3 — Configurar ACL Policy

A ACL define quem pode acessar o quê no tailnet. Sem ela, o Tailscale SSH fica bloqueado mesmo com o servidor enrollado.

Acessar: https://login.tailscale.com/admin/acls

Substituir o conteúdo pelo JSON abaixo (ajustar users com o email da conta Tailscale):

{
  "tagOwners": {
    "tag:server": ["autogroup:admin"]
  },
  "grants": [
    {
      "src": ["autogroup:admin"],
      "dst": ["tag:server"],
      "ip":  ["*"]
    }
  ],
  "ssh": [
    {
      "action": "accept",
      "src":    ["autogroup:admin"],
      "dst":    ["tag:server"],
      "users":  ["deploy", "root"]
    }
  ]
}

Clicar em Save para aplicar.

O que cada bloco faz:

BlocoFunção
tagOwnersDefine que admins controlam a tag tag:server
grantsLibera tráfego de rede: admin → servidores com tag server
sshAutoriza SSH especificamente para os usuários deploy e root

Se quiser adicionar mais usuários do time ao SSH, adicionar os emails em src:

"src": ["autogroup:admin", "[email protected]"]

Passo 4 — Gerar auth key para o servidor

Acessar: https://login.tailscale.com/admin/settings/keys

Clicar em Generate auth key com estas configurações:

CampoValorPor que
Descriptionhetzner-prod (ou nome do servidor)Identificação
Reusable✅ SimPermite recriar o servidor sem gerar nova key
Ephemeral❌ NãoServidor persiste offline sem sair do tailnet
Pre-authorized✅ SimPula fila de aprovação manual
Tagstag:serverAplica as ACL rules do Passo 3
Expiry1 diaA key é usada só no boot — expira antes de ser reutilizada

Copiar o token tskey-auth-...mostrado apenas uma vez.

Confirmar ao usuário:

"Auth key gerada. Guarde o token tskey-auth-... — vamos usá-lo no terraform.tfvars."

Passo 5 — Após o servidor subir

Quando o servidor terminar o cloud-init, verificar que entrou no tailnet:

tailscale status
# deve aparecer o novo servidor com IP 100.x.x.x e tag:server

Conectar via SSH:

# pelo IP do tailnet (não o IP público da Hetzner)
ssh deploy@$(tailscale ip -4 nome-do-servidor)

# ou pelo nome do dispositivo no tailnet
tailscale ssh deploy@nome-do-servidor

O comando tailscale ssh autentica automaticamente pelo tailnet — sem precisar de chave SSH no cliente.

Troubleshooting

ProblemaCausaSolução
Servidor não aparece em tailscale statuscloud-init ainda rodandoAguardar ~10 min após terraform apply
SSH recusado com "permission denied"ACL policy não salvaVerificar https://login.tailscale.com/admin/acls
tailscale ssh não encontra o hostNome diferente do esperadotailscale status para ver o nome exato
Servidor sumiu do tailnettailscaled crashouHetzner Console → sudo systemctl restart tailscaled
Auth key expirou antes de usarExpiry curto demaisGerar nova key com expiry maior

Recuperação de emergência (lockout)

Se perder acesso via Tailscale:

  1. Hetzner Console (sempre funciona): dashboard Hetzner → servidor → Console

    • Acessa o terminal via VNC no browser, sem depender de rede
    • De lá: sudo systemctl status tailscaled e sudo systemctl restart tailscaled
  2. Se precisar reinscrutar o servidor no tailnet:

    sudo tailscale up --auth-key=NOVA_KEY --ssh --advertise-tags=tag:server
    

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,970. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.