Passos para dentro de um job do pipeline do GitLab, acessar uma máquina remota via ssh.

Premissas

  • O job roda em um executor do tipo docker
  • A imagem de container do job tem disponível o comando ssh-agent
  • A máquina remota tem um usuário que permite login via ssh, vamos supor que o usuário se chama sonic
  • Um par de chave pública-privada foi criado para o usuário sonic, algo como: ssh-keygen -t rsa -f /tmp/sonic/sonic_key -C 'gitlab-access-user-sonic'
  • A chave pública do usuário sonic foi adicionada a /home/sonic/.ssh/authorized_keys na máquina remota
  • A chave privada será usada na configuração no GitLab

GitLab

Nas configurações de CI/CD do projeto ou do grupo, adicione uma variável chamada SSH_PRIVATE_KEY do tipo File com o conteúdo da chave privada gerada para o usuário sonic.

No job, a env SSH_PRIVATE_KEY vai conter o path para um arquivo que vai ter o conteúdo da chave privada.

Na tag script do job, basta isso para acessar a máquina remota:

- eval $(ssh-agent -s)
- (cat "$SSH_PRIVATE_KEY" && echo) | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan host-remoto.com.br >> ~/.ssh/known_hosts
- chmod 600 ~/.ssh/known_hosts
- ssh sonic@host-remoto.com.br echo "acesso a maquina remota ok"

Se tiver problema de validação da chave do host, revise o comando ssh-keyscan. Um workaround nessa segurança é adicionar -o StrictHostKeyChecking=no ao comando ssh.

Referências