Como usar uma chave SSH privada diferente para comandos Git Shell

Conteúdo

Logotipo do Git

Usar chaves SSH é mais seguro do que senhas, e isso também se aplica ao Git. Apesar disto, ao contrário de uma senha, é mais difícil alterar sua chave SSH ou gerenciar várias chaves. Apesar disto, ao editar sua configuração SSH, pode se conectar a vários repositórios Git com chaves diferentes.

Como o SSH funciona com Git?

Git não usa apenas sua chave privada para autenticar quando você usa SSH em vez de HTTPS, na verdade, ele estabelece uma conexão SSH real com o servidor remoto. Faz em silêncio, então você pode não estar ciente dos comandos que está executando, mas use ssh underhood.

Porque ele usa seu padrão ssh comando, você vai agir como se você mesmo tivesse executado, e usará sua chave padrão em ~/.ssh/id_rsa. Provavelmente não é o que você quer se estiver lendo isso, então para mudar isso, você precisará editar a configuração SSH, não o do Git.

Faça uma nova chave SSH

Você precisará de um para fazer isso em primeiro lugar, e fazer isso é bastante simples. Apenas corra ssh-keygen e especifique um novo nome de chave com o -f bandeira. Isso criará uma chave privada e uma chave pública com o .pub extensão.

ssh-keygen -t rsa -f ~ / .ssh / github

Editando ~ / .ssh / config

O arquivo de configuração SSH permite configurar “Hosts” que vai coincidir com base no que você está conectando e permitir modificação do arquivo que ssh Usa.

Host github
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa.github
  IdentitiesOnly yes

isso permitirá que você use uma chave SSH diferente da principal para todas as solicitações que vão para github.com, mas e se você quiser usar duas chaves diferentes para repositórios de git separados? Como um exemplo, um para sua conta de trabalho e um para sua conta pessoal.

Nós vamos, você precisará definir duas configurações com nomes diferentes, usando o mesmo hospedeiro:

Host personal
  Hostname github.com
  IdentityFile ~/.ssh/githubpersonal
  IdentitiesOnly yes

Host work
  Hostname github.com
  IdentityFile ~/.ssh/githubwork
  IdentitiesOnly yes

Em geral, isso resultaria em uma configuração conflitante, mas Git fornece uma maneira de contornar isso. Se você tiver um repositório remoto como o Github ligado ao seu repositório local, Dispose:

git remoto remover origem

Então, em vez de adicionar github.com tão remoto, substitua-o pelo nome do host no arquivo de configuração SSH. O Git reconhecerá isso e usará este host SSH para se conectar. Você pode configurar hosts separados por repositório.

git remote add origin git @ personal:nome de usuário / repository.git

Controle manual

Se você não quiser mexer com as configurações de SSH, ou você apenas deseja substituí-lo temporariamente, Git também fornece o GIT_SSH_COMMAND Variável Ambiental. Você pode

GIT_SSH_COMMAND = 'ssh -i ~ / .ssh / github -o UserKnownHostsFile = / dev / null -o StrictHostKeyChecking = no'

Qualquer comando Git que você executar posteriormente na mesma sessão de shell usará esse comando SSH em vez do padrão. Você também pode configurar um binário SSH totalmente diferente com GIT_SSH.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.