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
- Listar as chaves SSH guardadas —
act=sshkeys - Guardar uma chave SSH —
act=addsshkey - Alterar uma chave SSH guardada —
act=editsshkey - Apagar chaves SSH guardadas —
act=sshkeys - Aplicar chaves SSH numa VPS —
act=sshkeys - Gerar um par de chaves SSH —
act=create - Listar os planos de firewall
- Criar um plano de firewall
- Alterar um plano de firewall
- Apagar planos de firewall
- Listar as chaves de API —
act=apikey - Criar uma chave de API —
act=apikey - 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
add | corpo (POST) | 1 | sim | Confirma. |
name | corpo (POST) | texto | sim | Nome para reconhecer a chave. |
value | corpo (POST) | texto | sim | A 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
addnã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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
keyid | URL | número | sim | Id da chave. |
edit | corpo (POST) | 1 | sim | Confirma. |
name | corpo (POST) | texto | sim | Nome. |
value | corpo (POST) | texto | sim | Chave 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
keyidna 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_keysdentro 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
delete | corpo (POST) | lista de números | sim | Ids 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_keysdentro 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
svs | URL | número | sim | Id da VPS. |
addkeyvps | corpo (POST) | 1 | sim | Confirma. |
ssh_keys[] | corpo (POST) | lista de números | sim | Ids 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
addkeyvpsnã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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
generate_keys | URL | 1 | sim | Pede 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
fwp_name | corpo (POST) | texto | sim | Nome do plano. |
default_policy | corpo (POST) | texto | sim | O que fazer com o tráfego que nenhuma regra cobre: DROP (descartar) ou ACCEPT (aceitar). |
fwp_note | corpo (POST) | texto | não | Observação livre. |
api_firewall_rules | corpo (POST) | lista de regras | sim | Cada 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_policyemDROP, 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
fwpid | corpo (POST) | número | sim | Id do plano. |
edit_fwp_name | corpo (POST) | texto | sim | Nome. |
edit_default_policy | corpo (POST) | texto | sim | DROP ou ACCEPT. |
edit_fwp_note | corpo (POST) | texto | não | Observação. |
api_firewall_rules | corpo (POST) | lista de regras | sim | Cada 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
delete_fwids | corpo (POST) | lista de números | sim | Ids 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
do | URL | texto | sim | Sempre 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âmetro | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
del | corpo (POST) | número | sim | Id 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
delna 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.