Comandos Gw Server

Referência dos comandos que você roda por SSH no GW Server. O SSH é obrigatório em três momentos: instalar o painel, aplicar uma atualização marcada como via SSH e recuperar o acesso quando a interface web não abre. Todo o resto se faz pelo painel.

Vale para todos os comandos desta página:

  • Conecte como usuário root. Os comandos do gws-cli levam sudo na frente e funcionam mesmo se você já estiver como root.
  • Os endereços de instalação e atualização baixam sempre a versão mais recente, então não mudam com o tempo.
  • Não confunda gws-cli com gws (sem o -cli): o gws é um utilitário de automação ainda em desenvolvimento. Quem recupera acesso é o gws-cli.

Ir direto para:

Conectar ao servidor por SSH

Use um cliente SSH (Termius, PuTTY) e entre com o IPv4 do servidor, como usuário root, com a senha ou a chave definida na contratação da VPS. No PuTTY, colar comando é com o botão direito do mouse.

Quando usar: sempre que precisar rodar qualquer comando desta página.

Instalação do painel

Comando único, rodado como root no servidor recém-contratado (Ubuntu, DNS já apontado):

bash <(curl -sL https://cdn.g-web.link/gw-server/install.sh)

Se o servidor não tiver o curl, este faz o mesmo:

wget -qO gws https://cdn.g-web.link/gw-server/install.sh && sudo bash gws

O instalador faz perguntas: usuário e senha do painel (senha com mínimo de 12 caracteres, com maiúscula, minúscula e número), domínio do painel (o subdomínio apontado para o IP), e-mail do administrador e WhatsApp (opcional, só para avisos críticos de segurança). No fim mostra um resumo para confirmar. A instalação leva cerca de 5 minutos.

Quando usar: primeira instalação do painel num servidor limpo. É a única etapa em que o SSH é obrigatório na operação normal.

Preparo opcional antes de instalar

Nada aqui é obrigatório (o instalador já roda a atualização do sistema), mas ajuda a enxergar cedo qualquer erro:

apt-get update
apt-get upgrade
dpkg-reconfigure tzdata
hostnamectl set-hostname cloud.seudominio.com

O dpkg-reconfigure tzdata abre o seletor de fuso (América, depois São Paulo). O hostnamectl set-hostname usa o mesmo endereço com que você acessa o servidor. Em alguns provedores, como a DigitalOcean, o hostname já vem definido.

Quando usar: logo depois de conectar por SSH, antes de rodar o instalador.

Atualização do painel

O caminho normal é pelo painel, em Configurações, Atualizações. Algumas atualizações mexem em partes do servidor que exigem root (regras de sistema, jails do fail2ban, crons de monitoramento). Nesses casos o painel avisa na tela que a atualização não pode ser aplicada por ali e mostra o comando, com botão de copiar.

Canal estável

bash <(curl -sL https://cdn.g-web.link/gw-server/panel/panel-install.sh) --update

Roda como root. É a atualização mais completa: aplica todas as migrações de forma idempotente, instala sempre a última versão e reaplica as proteções do servidor. Serve também para forçar a reinstalação quando a atualização pelo botão do painel dá erro. Ao terminar, recarregue a página do painel para conferir a nova versão.

Quando usar: o painel marcou a atualização como via SSH, ou a atualização pelo botão falhou.

Canal beta

bash <(curl -sL https://cdn.g-web.link/gw-server/sandbox/panel/panel-install.sh) --update

É o mesmo comando do canal estável, só com /sandbox a mais no caminho. O painel já mostra o comando certo para o canal configurado, use o botão de copiar.

Quando usar: só em servidor de teste, no canal beta. Em produção, fique no estável.

Snapshot antes de atualizar

Sempre faça um snapshot do servidor antes de qualquer atualização, pelo painel ou por SSH. O snapshot é feito no provedor de cloud (DigitalOcean, Vultr e Hetzner têm a opção "snapshot"; na Oracle é o backup do volume de inicialização), não no painel do GW Server. A atualização por SSH aplica tudo de uma vez e não pergunta de novo, então o snapshot é o único desfazer.

Outras ações do panel-install.sh

O mesmo script aceita mais dois modos, rodados como root.

Reemitir o SSL do painel

bash <(curl -sL https://cdn.g-web.link/gw-server/panel/panel-install.sh) --ssl

Quando usar: o certificado do domínio do painel não emitiu ou expirou, e você quer resolver pela linha de comando.

Remover o painel

bash <(curl -sL https://cdn.g-web.link/gw-server/panel/panel-install.sh) --uninstall

Irreversível. Remove o painel do servidor. Só rode com certeza e com backup.

gws-cli, a CLI de recuperação

O gws-cli fica em /usr/local/bin/gws-cli e é instalado automaticamente pelo panel-install.sh. Ele lê e grava direto nos arquivos do painel, sem depender de a interface web estar no ar. É para quando você, ou um cliente, perdeu o acesso: senha esquecida, 2FA travado, IP banido, ou SMTP fora do ar.

  • Exige root: sudo gws-cli <comando>.
  • O painel guarda credenciais em dois arquivos: o admin em /etc/gws-panel/settings.json, os clientes do Módulo de Usuários em /var/www/22222/htdocs/data/users.json. O login informado decide o destino: se bate com o admin, vai no primeiro; senão, procura entre os clientes.
  • O passwd e o 2fa-disable exigem o login como argumento, não têm alvo implícito. Comece sempre por gws-cli users.
  • Toda troca de senha e reset de 2FA gera registro na aba Logs do painel, com root@ssh como autor, sem gravar a senha.

O bloqueio do fail2ban por senha errada vale para as portas web (80 e 443) e do painel (22222). A porta SSH (22) não entra nesse bloqueio, por isso o SSH continua funcionando justamente para você rodar estes comandos.

gws-cli users

sudo gws-cli users

Lista o admin e todos os clientes do Módulo de Usuários, com status, método de 2FA, número de sites e nome de cada um. Mostra também o e-mail do admin e a contagem de clientes.

Quando usar: primeiro passo de qualquer recuperação, para confirmar a grafia exata do login antes de qualquer outro comando.

gws-cli passwd

sudo gws-cli passwd <login>

Altera a senha do login informado. Pede a nova senha duas vezes (mínimo de 8 caracteres) e nunca a exibe na tela. O hash é gerado via PHP com bcrypt, e a senha nunca aparece como argumento visível.

Sem argumento, o comando recusa e mostra os logins do servidor com a grafia exata. Vale para o admin e para clientes, só muda o login.

A busca aceita qualquer caixa (gabriel encontra Gabriel), mas a tela de login diferencia maiúsculas de minúsculas. Digite a grafia que o comando confirma, não a que você digitou no terminal.

Quando usar: senha do painel esquecida, sua ou de um cliente, ou suspeita de comprometimento.

gws-cli 2fa-disable

sudo gws-cli 2fa-disable <login>

Desativa a autenticação em duas etapas do login informado, limpando o segredo TOTP e qualquer código pendente. Efeito imediato.

O admin pode ter 2FA por e-mail ou TOTP; clientes só têm TOTP. Se o login já estiver sem 2FA, o comando avisa em vez de dar erro, é seguro rodar mais de uma vez. Depois de recuperar o acesso, reative o 2FA pelo perfil.

Quando usar: perdeu o celular ou o app autenticador, ou o SMTP parou e o código por e-mail não chega.

gws-cli liberar

sudo gws-cli liberar <IP>

Destrava um IP nas três camadas que podem estar bloqueando de uma vez: remove o ban do fail2ban, adiciona à lista branca global, o que impede o próximo ban, e tira da lista negra.

Sem argumento, o comando detecta o IP de onde a sua sessão SSH veio e devolve a linha pronta:

sudo gws-cli liberar

Como coloca o IP na lista branca, isento de futuros bans, é o certo para o seu próprio acesso. Para tirar da lista branca depois, edite /var/www/22222/htdocs/data/f2b-global-whitelist.conf e salve a lista branca pelo painel.

Quando usar: você errou a senha vezes demais no painel, num site ou num app, e o acesso caiu. É o comando de pânico.

gws-cli unban

sudo gws-cli unban <IP>

Remove o ban de um IP em todos os jails do fail2ban, só isso, sem mexer na lista branca. Se o IP voltar a errar a senha, é banido de novo normalmente.

Quando usar: soltar o IP de um terceiro, um cliente que errou a senha, sem isentá-lo de futuros bans. Para o seu próprio acesso, prefira o liberar.

gws-cli turnstile

sudo gws-cli turnstile status
sudo gws-cli turnstile off

Mostra ou desliga o desafio anti-bot (Cloudflare Turnstile) da tela de login. O off só baixa a bandeira: a sitekey e a secret continuam guardadas, para você corrigir a chave e religar em Configurações, Firewall. Não existe on de propósito. O status nunca imprime a chave secreta.

Quando usar: ninguém consegue entrar depois de ativar o desafio, quase sempre porque a sitekey está presa ao domínio errado.

gws-cli tentativas

sudo gws-cli tentativas status
sudo gws-cli tentativas limpar

Mostra ou zera o freio por conta do login: o intervalo obrigatório entre tentativas depois de senhas erradas na mesma conta (5 falhas geram 5s, 10 geram 15s, 20 ou mais geram 30s). O limpar zera a contagem de todas as contas, não desliga o freio.

Este freio conta por conta e ignora o IP, então o gws-cli liberar, que age no IP, não resolve este caso.

Quando usar: a tela de login responde "Muitas tentativas nesta conta" e você não quer esperar.

gws-cli status

sudo gws-cli status

Resumo do painel: URL de acesso pelo domínio e pela porta 22222, admin, método de 2FA ativo, número de clientes e estado dos serviços (nginx, PHP-FPM, MariaDB, fail2ban) e das jails.

Quando usar: não lembra o endereço do painel, ou quer conferir rápido se os serviços estão de pé.

Instalar o gws-cli manualmente

Já vem instalado em todo servidor pelo panel-install.sh. Se por algum motivo sumiu:

curl -fsSL https://cdn.g-web.link/gw-server/panel/gws-cli -o /usr/local/bin/gws-cli
chmod +x /usr/local/bin/gws-cli

Dependências: PHP 8.x, só para o passwd; Python 3, para todos os comandos; e fail2ban, só para unban e status.

Quando usar: o comando gws-cli não é encontrado no servidor.

Acesso de emergência pelo IP, porta 22222

Não é comando SSH, mas é o caminho vizinho: quando o painel não abre pelo domínio, porque o SSL não emitiu, o DNS mudou ou o domínio expirou, acesse pelo navegador:

https://SEU_IP:22222

O aviso de certificado inválido nesse endereço é esperado, prossiga. O acesso é limitado, partes da gestão de sites não funcionam sem certificado válido, e serve para destravar. Depois, reemita o SSL ou corrija o domínio em Configurações, Domínio do painel.

Quando usar: o painel não responde pelo domínio, mas o servidor está de pé.

Inspecionar as configurações, somente leitura

cat /etc/gws-panel/settings.json | python3 -m json.tool

Mostra o conteúdo do arquivo de configuração do painel formatado, sem alterar nada.

Quando usar: conferir usuário do admin, canal de atualização ou base do CDN sem mexer em nada.

Tabela: sintoma e comando

Situação Comando
Instalar o painel num servidor novo bash <(curl -sL https://cdn.g-web.link/gw-server/install.sh)
Atualização marcada como via SSH bash <(curl -sL https://cdn.g-web.link/gw-server/panel/panel-install.sh) --update
Atualização por SSH no canal beta bash <(curl -sL https://cdn.g-web.link/gw-server/sandbox/panel/panel-install.sh) --update
SSL do painel não emite ou expirou bash <(curl -sL https://cdn.g-web.link/gw-server/panel/panel-install.sh) --ssl
Não sabe quais logins existem sudo gws-cli users
Esqueceu a senha do painel sudo gws-cli passwd <login>
2FA travado, celular perdido ou SMTP fora sudo gws-cli 2fa-disable <login>
Seu IP foi banido e o acesso caiu sudo gws-cli liberar
Soltar o IP de um terceiro sem isentar sudo gws-cli unban <IP>
Login não aceita ninguém após ligar o anti-bot sudo gws-cli turnstile off
"Muitas tentativas nesta conta" sudo gws-cli tentativas limpar
Não sabe a URL do painel, ou quer checar serviços sudo gws-cli status
Painel não abre pelo domínio Acesse https://SEU_IP:22222 no navegador