Trabalho Remoto via SSH

Conecte-se a uma máquina remota via SSH e trabalhe em um projeto remoto usando autenticação por alias, chave ou senha, configurada no arquivo ssh.md. Use quando o usuário solicitar acesso SSH a um servidor, executar comandos em uma máquina remota, inspecionar ou editar arquivos em um projeto remoto, ou trabalhar em um projeto remoto.

O que é Trabalho Remoto via SSH?

Esta skill permite que agentes de IA (como Claude Code, Cursor ou Codex) estabeleçam conexões SSH seguras com máquinas remotas e trabalhem em projetos remotos de forma estruturada e segura. Ela lê as configurações de conexão de um arquivo `ssh.md` localizado na raiz do projeto, suportando três métodos de autenticação: alias (usando o arquivo de configuração SSH), chave privada (com suporte a proxy jump) e senha (via sshpass com variável de ambiente). A skill valida rigorosamente a configuração antes de cada sessão, verifica a existência de arquivos de chave e impede o uso de opções inseguras como StrictHostKeyChecking=no. Durante a execução, todos os comandos são executados dentro do diretório do projeto remoto, e a skill solicita confirmação antes de comandos destrutivos. Ela também gerencia a criação do arquivo `ssh.md` a partir de um template caso ele não exista, e o adiciona ao `.gitignore` do projeto para evitar vazamento de credenciais.

Funciona com✓Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/sabiviji/remote-work-ssh/tree/HEAD/.agents/skills/remote-work-ssh

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Trabalho Remoto via SSH faz?

Os detalhes da conexão estão em ssh.md na pasta do projeto. Leia-o antes de cada sessão remota. Nunca adivinhe hosts, usuários, portas, caminhos de chave ou senhas.

Quando Ativar

  • O usuário pede para conectar, fazer login ou executar algo em uma máquina remota
  • O usuário pede para inspecionar, editar, construir ou testar um projeto remoto
  • O usuário menciona um servidor, VPS ou host remoto e espera acesso SSH

Passo 1: Localizar ssh.md

A pasta do projeto é git rev-parse --show-toplevel, ou o diretório atual se isso falhar. ssh.md sempre reside em <pasta_do_projeto>/ssh.md.

Se não existir, crie-o a partir do template e informe ao usuário para preenchê-lo:

  1. Encontre ssh.example.md. Ele está na pasta desta skill, que depende do agente. Verifique estes caminhos em ordem e use o primeiro que existir: .agents/skills/remote-work-ssh/, .claude/skills/remote-work-ssh/, .opencode/skills/remote-work-ssh/, ~/.agents/skills/remote-work-ssh/, ~/.claude/skills/remote-work-ssh/, ~/.config/opencode/skills/remote-work-ssh/. Se nenhum existir, execute find ~ -path '*remote-work-ssh*' -name ssh.example.md 2>/dev/null | head -n 1.
  2. Copie-o para <pasta_do_projeto>/ssh.md.
  3. Adicione ssh.md ao .gitignore do projeto se estiver faltando. Crie .gitignore se necessário.
  4. Pare e diga ao usuário para preencher ssh.md.

Passo 2: Validar a Configuração

ssh.md contém um bloco YAML. Verifique estes campos:

  • auth deve ser alias, key ou password.
  • remote_project_path deve estar definido.
  • Campos para o método escolhido devem estar definidos:
authCampos obrigatórios
aliasalias
keyhost, user, identity_file (port padrão é 22)
passwordhost, user, password_env (port padrão é 22)

Se um campo obrigatório estiver faltando ou auth for desconhecido, pare e informe exatamente qual campo está errado. Não recorra a outro método.

Passo 3: Conectar

alias

Resolva a entrada primeiro, depois conecte:

ssh -G <alias> | grep -E '^(hostname|user|port) '
ssh -o BatchMode=yes <alias> 'hostname && whoami'

key

  • Confirme que identity_file existe. Se não existir, pare.
  • Use apenas essa chave:
ssh -o BatchMode=yes -o IdentitiesOnly=yes -i <identity_file> -p <port> <user>@<host> 'hostname && whoami'
  • Se proxy_jump estiver definido, adicione -J <proxy_jump>.

password

  • Verifique se sshpass está instalado com command -v sshpass. Se estiver faltando, pare e diga ao usuário para instalá-lo.
  • Verifique se a variável de ambiente nomeada por password_env está definida, sem imprimir seu valor.
  • Passe o valor para sshpass através da variável de ambiente SSHPASS e -e. Não coloque a senha em um argumento de linha de comando ou em qualquer saída.
  • Desabilite tentativas baseadas em chave para que apenas a senha seja usada:
SSHPASS="$(printenv <password_env>)" sshpass -e ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password -p <port> <user>@<host> 'hostname && whoami'
  • Se proxy_jump estiver definido, adicione -J <proxy_jump>.
  • Não use BatchMode=yes aqui, pois isso desabilita a autenticação por senha.

Chaves de host (todos os métodos)

  • Se a chave do host for desconhecida ou tiver mudado, pare. Mostre a impressão digital e peça ao usuário para verificá-la.
  • Nunca defina StrictHostKeyChecking=no ou opções similares que pulem a verificação.

Passo 4: Trabalhar no Projeto Remoto

  • Execute cada comando dentro de remote_project_path, por exemplo ssh ... 'cd <remote_project_path> && <command>'. Coloque o caminho entre aspas.
  • Antes de assumir que uma ferramenta existe na máquina remota, verifique seus manifestos ou execute command -v <tool>.
  • Não escreva fora de remote_project_path a menos que o usuário solicite.

Regras de Segurança

  • Pergunte antes de comandos destrutivos como rm -rf, force pushes, descarte de bancos de dados, operações de disco ou reinicializações de serviços.
  • Nunca imprima, copie, registre ou confirme senhas, conteúdos de chave ou tokens.
  • Não armazene credenciais em nenhum arquivo que não seja o ssh.md do projeto ou o ambiente.
  • Não execute comandos na máquina remota que o usuário não tenha solicitado.

Operações Não Suportadas

  • Armazenar senhas em arquivos rastreados ou nesta skill
  • Lidar com MFA interativo ou códigos de uso único em nome do usuário
  • Desabilitar verificação de chave de host
  • Conectar a hosts que não estão definidos em ssh.md

Habilidades Relacionadas