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-clilevamsudona 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-clicomgws(sem o-cli): ogwsé um utilitário de automação ainda em desenvolvimento. Quem recupera acesso é ogws-cli.
Ir direto para:
- Conectar por SSH
- Instalação do painel
- Atualização do painel
- Reemitir SSL e desinstalar
- gws-cli, a CLI de recuperação
- Acesso de emergência pelo IP
- Tabela: sintoma e comando
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
passwde o2fa-disableexigem o login como argumento, não têm alvo implícito. Comece sempre porgws-cli users. - Toda troca de senha e reset de 2FA gera registro na aba Logs do painel, com
root@sshcomo 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 |