Docs/ Segurança/ Chaves SSH

Chaves SSH

Gerencie chaves SSH para autenticação segura com provedores Git e acesso a servidores remotos.

Visão Geral

Chaves SSH no sh0 servem a dois propósitos principais:

  • Autenticação com provedor Git: Clonar repositórios privados do GitHub, GitLab, Bitbucket ou qualquer servidor Git que suporte SSH.
  • Acesso a servidor remoto: Conectar a nós remotos em uma configuração multi-servidor via túneis SSH.

O sh0 armazena chaves privadas SSH criptografadas em repouso usando AES-256-GCM. As chaves são descriptografadas apenas em memória quando necessárias para autenticação.

Gerando um Par de Chaves SSH

Se você não tem um par de chaves SSH, gere um usando o seguinte comando. O sh0 suporta chaves Ed25519 (recomendado) e RSA.

Ed25519 (recomendado):

Terminal
ssh-keygen -t ed25519 -C "sh0-deploy-key" -f ~/.ssh/sh0_deploy

RSA (4096 bits):

Terminal
ssh-keygen -t rsa -b 4096 -C "sh0-deploy-key" -f ~/.ssh/sh0_deploy

Isso cria dois arquivos:

  • ~/.ssh/sh0_deploy -- a chave privada (mantenha em segredo)
  • ~/.ssh/sh0_deploy.pub -- a chave pública (segura para compartilhar)
Warning
Nunca compartilhe sua chave privada. Apenas a chave pública (arquivo .pub) deve ser adicionada aos provedores Git. A chave privada é enviada ao sh0 para que ele possa se autenticar em seu nome.

Adicionando Chaves SSH ao sh0

Você pode adicionar chaves SSH pelo painel ou pela API.

Via Painel:

  1. Navegue até Configurações → Chaves SSH.
  2. Clique em Adicionar Chave SSH.
  3. Insira um nome descritivo (ex.: "Chave de Deploy GitHub").
  4. Cole o conteúdo do seu arquivo de chave privada.
  5. Clique em Salvar.
Formulário de adição de chave SSH com campos de nome e chave privada

Via API:

Terminal
curl -X POST https://your-server:9000/api/ssh-keys \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "GitHub Deploy Key",
    "private_key": "-----BEGIN OPENSSH PRIVATE KEY-----\\n...\\n-----END OPENSSH PRIVATE KEY-----"
  }'

Chaves SSH para Provedores Git

Para implantar a partir de repositórios privados, o sh0 precisa de uma chave SSH com acesso de leitura ao repositório. Veja como configurar para provedores comuns:

GitHub:

  1. Vá ao seu repositório → Settings → Deploy Keys.
  2. Clique em Add deploy key.
  3. Cole o conteúdo da sua chave pública (arquivo .pub).
  4. Deixe "Allow write access" desmarcado (o sh0 precisa apenas de acesso de leitura).
Página de configuração de deploy key do GitHub

GitLab:

  1. Vá ao seu projeto → Settings → Repository → Deploy Keys.
  2. Adicione uma nova deploy key com sua chave pública.
  3. Conceda acesso somente leitura.

Bitbucket:

  1. Vá ao seu repositório → Configurações → Chaves de acesso.
  2. Clique em Adicionar chave e cole sua chave pública.
Tip
Você pode usar o mesmo par de chaves SSH para múltiplos repositórios, ou gerar uma chave separada para cada repositório para controle de acesso mais granular. O sh0 suporta múltiplas chaves e as testa em ordem ao conectar a um provedor Git.

Chaves SSH para Acesso ao Servidor

Ao adicionar nós remotos a uma configuração multi-servidor, o sh0 usa chaves SSH para estabelecer túneis seguros. A chave deve estar autorizada no servidor remoto.

  1. Adicione a chave SSH ao sh0 (conforme descrito acima).
  2. Copie a chave pública para o arquivo ~/.ssh/authorized_keys do servidor remoto:
Terminal
ssh-copy-id -i ~/.ssh/sh0_deploy.pub deploy@remote-server

Ao adicionar o nó no sh0, selecione esta chave SSH para autenticação. O sh0 a usará para estabelecer o túnel SSH para o daemon Docker remoto.

Configuração de nó com dropdown de seleção de chave SSH

Impressões Digitais de Chave

Cada chave SSH tem uma impressão digital única que você pode usar para verificar sua identidade. O sh0 exibe a impressão digital SHA-256 para cada chave armazenada.

Terminal
# View the fingerprint of a local key file
ssh-keygen -lf ~/.ssh/sh0_deploy.pub

Compare esta impressão digital com a mostrada no painel do sh0 para verificar se você enviou a chave correta.

Gerenciando Múltiplas Chaves

O painel de Chaves SSH lista todas as chaves armazenadas no sh0. Para cada chave, você pode ver:

  • Nome e impressão digital da chave
  • Tipo de chave (Ed25519, RSA)
  • Data de adição
  • Quais aplicações ou nós usam a chave
Painel de gerenciamento de chaves SSH mostrando todas as chaves armazenadas com seus detalhes
Tip
Use nomes descritivos para suas chaves (ex.: "GitHub - production-api", "Node - EU Frankfurt") para que você possa identificar facilmente qual chave é usada para qual finalidade.

Removendo Chaves

Para remover uma chave SSH do sh0:

  1. Navegue até Configurações → Chaves SSH.
  2. Clique no ícone de excluir ao lado da chave que deseja remover.
  3. Confirme a exclusão.
Terminal
curl -X DELETE https://your-server:9000/api/ssh-keys/key_abc123 \
  -H "Authorization: Bearer YOUR_TOKEN"
Danger
Remover uma chave SSH que está em uso por uma aplicação ou nó quebrará implantações e conexões de servidor. O sh0 avisará se a chave está em uso antes de permitir a exclusão.