Chaves SSH (guardar, gerar e aplicar em VPS), planos de firewall e as próprias chaves de acesso à API.

Antes de começar, veja API do Virtualizor para revendedores: primeiros passos: lá estão a chave de API, o formato da chamada e as funções virt_api usadas nos exemplos em PHP, Python e Node.js.

Neste artigo

  1. Listar as chaves SSH guardadas — act=sshkeys
  2. Guardar uma chave SSH — act=addsshkey
  3. Alterar uma chave SSH guardada — act=editsshkey
  4. Apagar chaves SSH guardadas — act=sshkeys
  5. Aplicar chaves SSH numa VPS — act=sshkeys
  6. Gerar um par de chaves SSH — act=create
  7. Listar os planos de firewall
  8. Criar um plano de firewall
  9. Alterar um plano de firewall
  10. Apagar planos de firewall
  11. Listar as chaves de API — act=apikey
  12. Criar uma chave de API — act=apikey
  13. Apagar uma chave de API — act=apikey

Listar as chaves SSH guardadas

Ação: act=sshkeys · Método: GET

Lista as chaves públicas SSH guardadas na conta, prontas para aplicar em VPS.

Parâmetros

Nenhum além da ação e da autenticação.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=sshkeys&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS"

PHP

$r = virt_api('sshkeys');
print_r($r);

Python

r = virt_api("sshkeys")
print(r)

Node.js

const r = await virtApi('sshkeys');
console.log(r);

Resposta

ssh_keys traz as chaves, com o id de cada uma.

Documentação oficial: List SSH keys.


Guardar uma chave SSH

Ação: act=addsshkey · Método: POST

Guarda uma chave pública SSH na conta. Guardar não instala a chave em nenhuma VPS — para isso, use Aplicar chaves SSH numa VPS.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
addcorpo (POST)1simConfirma.
namecorpo (POST)textosimNome para reconhecer a chave.
valuecorpo (POST)textosimA chave pública, inteira, numa linha.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=addsshkey&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS" \
  --data-urlencode 'add=1' \
  --data-urlencode 'name=notebook-maria' \
  --data-urlencode 'value=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook'

PHP

$r = virt_api('addsshkey', [], [
    'add' => '1',
    'name' => 'notebook-maria',
    'value' => 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',
]);
print_r($r);

Python

r = virt_api("addsshkey", post={
    "add": "1",
    "name": "notebook-maria",
    "value": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook",
})
print(r)

Node.js

const r = await virtApi('addsshkey', {}, {
  add: '1',
  name: 'notebook-maria',
  value: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',
});
console.log(r);

Resposta

done confirma; keyid é o id da chave guardada.

Cuidados

  • Mande só a chave PÚBLICA. A chave privada nunca sai da sua máquina.
  • O campo add não está na tabela da documentação oficial, só no exemplo em curl dela.

Documentação oficial: Add SSH key.


Alterar uma chave SSH guardada

Ação: act=editsshkey · Método: POST

Troca o nome ou a chave pública de uma chave guardada.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
keyidURLnúmerosimId da chave.
editcorpo (POST)1simConfirma.
namecorpo (POST)textosimNome.
valuecorpo (POST)textosimChave pública.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=editsshkey&keyid=3&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS" \
  --data-urlencode 'edit=1' \
  --data-urlencode 'name=notebook-maria' \
  --data-urlencode 'value=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook'

PHP

$r = virt_api('editsshkey', [
    'keyid' => '3',
], [
    'edit' => '1',
    'name' => 'notebook-maria',
    'value' => 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',
]);
print_r($r);

Python

r = virt_api("editsshkey", get={
    "keyid": "3",
}, post={
    "edit": "1",
    "name": "notebook-maria",
    "value": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook",
})
print(r)

Node.js

const r = await virtApi('editsshkey', {
  keyid: '3',
}, {
  edit: '1',
  name: 'notebook-maria',
  value: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',
});
console.log(r);

Resposta

done confirma; ssh_key traz a chave alterada.

Cuidados

  • O cabeçalho da página oficial põe keyid na URL; o exemplo em curl dela manda no corpo. Este artigo segue o cabeçalho, como faz o SDK oficial.
  • A documentação oficial não diz se a alteração chega às VPS onde a chave já foi aplicada. Confira o authorized_keys dentro delas.

Documentação oficial: Edit SSH key.


Apagar chaves SSH guardadas

Ação: act=sshkeys · Método: POST

Apaga uma ou mais chaves guardadas na conta.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
deletecorpo (POST)lista de númerossimIds das chaves, separados por vírgula.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=sshkeys&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS" \
  --data-urlencode 'delete=4'

PHP

$r = virt_api('sshkeys', [], [
    'delete' => '4',
]);
print_r($r);

Python

r = virt_api("sshkeys", post={
    "delete": "4",
})
print(r)

Node.js

const r = await virtApi('sshkeys', {}, {
  delete: '4',
});
console.log(r);

Resposta

done confirma; ssh_keys traz as que sobraram.

Cuidados

  • A documentação oficial não diz se apagar da conta remove a chave das VPS onde ela foi aplicada. Para revogar um acesso com certeza, tire a chave do authorized_keys dentro de cada VPS.

Documentação oficial: Delete SSH key.


Aplicar chaves SSH numa VPS

Ação: act=sshkeys · Método: POST

Instala chaves guardadas na conta dentro de uma VPS, para acesso por chave em vez de senha.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
svsURLnúmerosimId da VPS.
addkeyvpscorpo (POST)1simConfirma.
ssh_keys[]corpo (POST)lista de númerossimIds das chaves. Repita o campo para cada chave.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=sshkeys&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS" \
  --data-urlencode 'addkeyvps=1' \
  --data-urlencode 'ssh_keys[]=5'

PHP

$r = virt_api('sshkeys', [
    'svs' => '101',
], [
    'addkeyvps' => '1',
    'ssh_keys' => ['5'],
]);
print_r($r);

Python

r = virt_api("sshkeys", get={
    "svs": "101",
}, post={
    "addkeyvps": "1",
    "ssh_keys[]": ["5"],
})
print(r)

Node.js

const r = await virtApi('sshkeys', {
  svs: '101',
}, {
  addkeyvps: '1',
  ssh_keys: ['5'],
});
console.log(r);

Resposta

done confirma; ssh_keys traz as chaves da conta.

Cuidados

  • O campo addkeyvps não está na tabela da documentação oficial, só no exemplo em curl dela.

Documentação oficial: Apply SSH key.


Gerar um par de chaves SSH

Ação: act=create · Método: GET

Gera um par de chaves SSH no servidor. O par serve para criar uma VPS com ssh_options=generate_keys (veja Criar uma VPS).

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
generate_keysURL1simPede o par de chaves. Sem ele, a ação create é a de criar VPS.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=create&generate_keys=1&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS"

PHP

$r = virt_api('create', [
    'generate_keys' => '1',
]);
print_r($r);

Python

r = virt_api("create", get={
    "generate_keys": "1",
})
print(r)

Node.js

const r = await virtApi('create', {
  generate_keys: '1',
});
console.log(r);

Resposta

public_key e private_key são o par gerado. A resposta traz também o campo path.

Cuidados

  • A chave privada vem na resposta. Entregue-a ao cliente por um canal seguro e não a guarde em log.
  • Prefira gerar o par na sua máquina (ssh-keygen -t ed25519) e mandar só a pública: assim a privada nunca trafega.

Documentação oficial: Generate Keys.


Listar os planos de firewall

Ação HTTP: não informada pela documentação oficial · Método: GET

Lista os planos de firewall criados pelo usuário e as regras de cada um.

Parâmetros

Nenhum além da ação e da autenticação.

Exemplos

A documentação oficial mostra esta operação só pelo SDK PHP da Virtualizor, sem informar a ação HTTP que ele chama — por isso não há exemplo em curl, Python ou Node.js. A versão do SDK que acompanha o módulo do WHMCS não tem os métodos de firewall. Até a Virtualizor documentar a chamada HTTP, gerencie os planos de firewall pelo painel. Para referência, a chamada pelo SDK, com o método documentado:

$api = new Virtualizor_Enduser_API($host, $chave, $senha);
$r = $api->listfirewallplans();
print_r($r);

Resposta

firewall_plans traz os planos; fw_rules as regras; firewall_status o estado do firewall; firewallplan_templates os modelos prontos.

Documentação oficial: List Firewall Plan.


Criar um plano de firewall

Ação HTTP: não informada pela documentação oficial · Método: POST

Cria um plano de firewall com uma política padrão e regras de exceção.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
fwp_namecorpo (POST)textosimNome do plano.
default_policycorpo (POST)textosimO que fazer com o tráfego que nenhuma regra cobre: DROP (descartar) ou ACCEPT (aceitar).
fwp_notecorpo (POST)textonãoObservação livre.
api_firewall_rulescorpo (POST)lista de regrassimCada regra é uma lista, na ordem do exemplo oficial: versão do IP (4), direção (IN), ação (ACCEPT), protocolo (TCP), portas (22, 22,567 ou ALL) e origem (um IP ou uma faixa, como 0.0.0.0/0).

Exemplos

A documentação oficial mostra esta operação só pelo SDK PHP da Virtualizor, sem informar a ação HTTP que ele chama — por isso não há exemplo em curl, Python ou Node.js. A versão do SDK que acompanha o módulo do WHMCS não tem os métodos de firewall. Até a Virtualizor documentar a chamada HTTP, gerencie os planos de firewall pelo painel. Para referência, a chamada pelo SDK, com o método documentado:

$api = new Virtualizor_Enduser_API($host, $chave, $senha);
$r = $api->addfirewallplan([
    'fwp_name' => 'SSH e web',
    'default_policy' => 'DROP',
    'fwp_note' => 'SSH só do escritório; web aberto',
    'api_firewall_rules' => [
        [4, 'IN', 'ACCEPT', 'TCP', '22', '203.0.113.50'],
        [4, 'IN', 'ACCEPT', 'TCP', '80,443', '0.0.0.0/0'],
    ],
]);
print_r($r);

Resposta

done confirma.

Cuidados

  • Com default_policy em DROP, tudo o que não tiver regra é bloqueado — inclusive o SSH. Libere a porta 22 (ou a sua) antes de aplicar o plano, ou você perde o acesso.

Documentação oficial: Add Firewall Plan.


Alterar um plano de firewall

Ação HTTP: não informada pela documentação oficial · Método: POST

Altera o nome, a política padrão, a observação e as regras de um plano. Os campos de edição levam o prefixo edit_.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
fwpidcorpo (POST)númerosimId do plano.
edit_fwp_namecorpo (POST)textosimNome.
edit_default_policycorpo (POST)textosimDROP ou ACCEPT.
edit_fwp_notecorpo (POST)textonãoObservação.
api_firewall_rulescorpo (POST)lista de regrassimCada regra é uma lista, na ordem do exemplo oficial: versão do IP (4), direção (IN), ação (ACCEPT), protocolo (TCP), portas (22, 22,567 ou ALL) e origem (um IP ou uma faixa, como 0.0.0.0/0).

Exemplos

A documentação oficial mostra esta operação só pelo SDK PHP da Virtualizor, sem informar a ação HTTP que ele chama — por isso não há exemplo em curl, Python ou Node.js. A versão do SDK que acompanha o módulo do WHMCS não tem os métodos de firewall. Até a Virtualizor documentar a chamada HTTP, gerencie os planos de firewall pelo painel. Para referência, a chamada pelo SDK, com o método documentado:

$api = new Virtualizor_Enduser_API($host, $chave, $senha);
$r = $api->editfirewallplan([
    'fwpid' => 33,
    'edit_fwp_name' => 'SSH e web',
    'edit_default_policy' => 'DROP',
    'edit_fwp_note' => 'Inclui HTTPS',
    'api_firewall_rules' => [
        [4, 'IN', 'ACCEPT', 'TCP', '22', '203.0.113.50'],
        [4, 'IN', 'ACCEPT', 'TCP', '80,443', '0.0.0.0/0'],
    ],
]);
print_r($r);

Resposta

done confirma.

Cuidados

  • A documentação oficial não diz se as regras mandadas substituem as do plano ou se somam a elas. Mande a lista completa e confira o plano depois.

Documentação oficial: Edit Firewall Plan.


Apagar planos de firewall

Ação HTTP: não informada pela documentação oficial · Método: POST

Apaga um ou mais planos de firewall.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
delete_fwidscorpo (POST)lista de númerossimIds dos planos.

Exemplos

A documentação oficial mostra esta operação só pelo SDK PHP da Virtualizor, sem informar a ação HTTP que ele chama — por isso não há exemplo em curl, Python ou Node.js. A versão do SDK que acompanha o módulo do WHMCS não tem os métodos de firewall. Até a Virtualizor documentar a chamada HTTP, gerencie os planos de firewall pelo painel. Para referência, a chamada pelo SDK, com o método documentado:

$api = new Virtualizor_Enduser_API($host, $chave, $senha);
$r = $api->deletefirewallplan(['delete_fwids' => [33]]);
print_r($r);

Resposta

done confirma.

Documentação oficial: Delete Firewall Plan.


Listar as chaves de API

Ação: act=apikey · Método: GET

Lista as chaves de API da conta.

Parâmetros

Nenhum além da ação e da autenticação.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=apikey&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS"

PHP

$r = virt_api('apikey');
print_r($r);

Python

r = virt_api("apikey")
print(r)

Node.js

const r = await virtApi('apikey');
console.log(r);

Resposta

apikeys traz as chaves, com o id de cada uma.

Cuidados

  • A resposta traz credenciais. Não a exiba nem a guarde em log.

Documentação oficial: List API key.


Criar uma chave de API

Ação: act=apikey · Método: GET

Cria uma chave de API nova. A primeira chave se cria pelo painel (veja Primeiros passos); daí em diante, dá para criar outras pela própria API — uma por sistema que acessa, por exemplo.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
doURLtextosimSempre add.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=apikey&do=add&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS"

PHP

$r = virt_api('apikey', [
    'do' => 'add',
]);
print_r($r);

Python

r = virt_api("apikey", get={
    "do": "add",
})
print(r)

Node.js

const r = await virtApi('apikey', {
  do: 'add',
});
console.log(r);

Resposta

done confirma; apikeys traz as chaves da conta. A chave nova está entre elas.

Cuidados

  • É uma chamada só de URL, sem corpo: abrir esse endereço já cria uma chave. Não a deixe em link nem em script que rode sozinho.

Documentação oficial: Add API Key.


Apagar uma chave de API

Ação: act=apikey · Método: POST

Revoga uma chave de API. Use quando um sistema deixa de acessar o painel ou quando a chave pode ter vazado.

Parâmetros

ParâmetroOndeTipoObrigatórioDescrição
delcorpo (POST)númerosimId da chave, da lista.

Exemplos

curl

curl -sS "https://$VIRT_HOST:4083/index.php?act=apikey&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS" \
  --data-urlencode 'del=36'

PHP

$r = virt_api('apikey', [], [
    'del' => '36',
]);
print_r($r);

Python

r = virt_api("apikey", post={
    "del": "36",
})
print(r)

Node.js

const r = await virtApi('apikey', {}, {
  del: '36',
});
console.log(r);

Resposta

done confirma; apikeys traz as chaves da conta.

Cuidados

  • Não apague a chave que você está usando na própria chamada, ou o seu sistema perde o acesso.
  • O cabeçalho da página oficial põe del na URL; o exemplo em curl dela manda no corpo, como aqui.

Documentação oficial: Delete API Key.


Texto da Vitt Host, escrito a partir da documentação oficial da Virtualizor, lida em 07/10/2026. Onde a documentação oficial se contradiz, o artigo segue os exemplos dela e aponta a diferença em Cuidados.