Cursos Magento

4 formas de especificar a chave privada a ser usada em comandos Git

Publicado em 17 de julho de 2023

Git é frequentemente utilizado para publicar projetos em produção, ou mesmo mantê-los atualizados. Além de ser uma boa ideia, quando bem configurado, ele pode ser um bom dedo duro. Isto é, podemos facilmente verificar se algum desenvolvedor, cliente, ou mesmo um hacker modificou alguma coisa em nosso projeto.

Como boa prática, também nunca devemos alterar arquivos diretamente em produção a fim de corrigir bugs ou testar novos desenvolvimentos.

Neste ponto, o git também pode ser um aliado. Com ele, podemos ter chaves de deploy (deploy keys). Estas chaves podem ser configuradas de forma que determinados servidores tenham permissão apenas para puxar (pull) informações de nossos repositórios, mas nunca escrever neles (push).

Como criar uma chave de deploy

Se você estiver usando o Github, acesse a aba Settings do seu repositório, e depois clique em Deploy keys localizado na área de Segurança.

Deploy keys no github

Nesta tela são listadas todas as chaves de deploy cadastradas para seu projeto. Para adicionar uma nova, clique em “Add deploy key”(3).

Adicionando uma deploy key no github

Como gerar a chave ssh

Para gerar uma chave ssh, digite no terminal do servidor, certifique-se de estar logado com o usuário que irá fazer o clone/pull do projeto e siga os passos a seguir:

  1. Digite ssh-keygen para gerar a chave. Especifique o caminho onde a chave será salva (por padrão em /home/do/usuario/.ssh/id_rsa), e deixe os demais dados como padrão.
  2. Em seguida, copie o conteúdo da chave pública gerada.
  3. Cole a chave pública (.pub) gerada no campo Key da tela de adição das chaves de deploy (acima).

Que chave será usada no git clone?

Por padrão, o git usa a chave do usuário, localizada na pasta padrão.

ssh-keygen e chave padrão ssh

No entanto, se especificarmos uma outra chave, como fizemos, precisaremos de alguns passos a mais.

Porque/quando não usar a chave-padrão

Em alguns casos, podemos ter mais de um projeto git no mesmo servidor. Por exemplo um blog, e uma loja virtual que possuem repositórios diferentes.

Consequentemente, precisaremos de chaves diferentes. Isto porque o github não permite que uma mesma chave seja usada em dois projetos distintos. O mesmo vale no Bitbucket ou outros serviços git.

Como especificar a chave que será usada no clone ou pull no git

Existem pelo menos quatro formas de se especificar qual chave ssh será usada em um ou mais comandos git.

1. Especificando a chave ao executar o comando git específico

Para isso, basta digitar:

git -c core.sshCommand="ssh -i ~/.ssh/<your_key>" clone [email protected]:<user>/<repo>.git

Neste caso, estou especificando os parâmetros core.sshCommand="ssh -i ~/.ssh/<sua_chave>" que informam ao git um comando ssh com a nossa chave específica. Veja um exemplo inteiro do comando acima:

git -c core.sshCommand="ssh -i /root/.ssh/id_rsa_woo" clone [email protected]:r-martins/woo-pagseguro-exemplo.git .

Você deverá sempre especificar o -c core.sshCommand="ssh -i ~/.ssh/<sua_chave_privada>" entre a palavra git e o restante do comando.

2. Tornando a configuração global durante aquela sessão

Outra alternativa é exportar/modificar a variável GIT_SSH_COMMAND antes de executar seus comandos git.

export GIT_SSH_COMMAND="ssh -i /caminho/sua/chave/privada"

Após isso, todos os comandos git daquela sessão usarão esta chave.

3. Usando git config (por projeto ou globalmente)

A partir do git 2.10.0, você pode definir o comando acima como uma configuração global do git ou por projeto.

Dentro da pasta do projeto, você pode digitar:

git config core.sshCommand "ssh -i /caminho/chave/privada -o 'IdentitiesOnly yes'"

Isto adicionará a configuração ao arquivo .git/config do projeto atual.

Para tornar a configuração global (todos os projetos deste servidor/usuário), adicione --global ao comando acima.

4. Usando uma chave git diferente em shell script

Se você estiver criando um arquivo de shell script e desejar usar uma chave git diferente em todos os comandos dele, basta adicionar as duas linhas abaixo antes de executar seus comandos git:

# Inicia o ssh-agent
eval "$(ssh-agent -s)"

# Adiciona a chave SSH desejada ao ssh-agent
ssh-add /caminho/chave/privada

Conclusão

Existem formas e ferramentas que lhe permitem realizar deploys de forma profissional e automática sem precisar esquentar tanto a cabeça com a chave que será utilizada.

A exemplo destes serviços, temos o CircleCi, Trevis, Jenkins, e muitos outros.

Mas se você utiliza o git para publicar e gerenciar seus projetos, certamente é bom ter este artigo em seus favoritos. Um dia você vai precisar.

Espero que tenha sido útil pra você.

Grande abraço e até a próxima.

Últimos posts por Ricardo Martins (exibir todos)
Assuntos: |
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/para-magenteiros/chave-git-ssh-como-configurar/"]