Explicação
O GitLab mantém o arquivo ~git/.ssh/authorized_keys
, no qual ele atribui nomes de chave pública de cada SSH key-1
, key-2
e assim por diante.
Após a restauração do backup, o nome é redefinido para key-1
, para que as chaves subseqüentes tenham nomes duplicados. Aqui está o meu arquivo ~git/.ssh/authorized_keys
mostrando a minha chave e a chave do Shung Wang chamada key-1
:
# Managed by gitlab-shell
command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAA...2SkSQ== [email protected]
###################################################################################################################################################################################
#####################################################################################################################################################################################
command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAA...nKQ== [email protected]
...
Aparentemente, a última ocorrência de key-1
é usada para mim e para o Shung.
Eu relatei esse bug do GitLab na questão GitLab 1263 .
Soluções alternativas
Até que o bug seja corrigido, os usuários podem tentar essas soluções alternativas.
Solução 1
Use sudo gitlab-rake gitlab:shell:setup
para reconstruir o arquivo authorized_keys
Solução 2
Eu recomendo tentar a solução 1 primeiro.
Segue-se o que eu realmente fiz antes de descobrir a solução 1.
- Depois de restaurar um backup, faça o login como algum usuário existente e registre uma nova chave pública de SSH
- Pesquise o arquivo
~git/.ssh/authorized_keys
porkey-1
. Se você encontrar dois, você tem o problema descrito acima. - Essas linhas de
######...
não são decoração. São chaves que foram deletadas pelos usuários. Quando uma chave é excluída, o GitLab substitui todos os caracteres com#
, presumivelmente, para que as chaves restantes não se movam no arquivo. Substitua todos os caracteres em todas as chaves SSH criadas antes da restauração de backup pelo caractere#
de maneira semelhante à que você vê no~git/.ssh/authorized_keys
mostrado acima. - Diga a todos os seus usuários que eles devem inserir novamente suas chaves públicas SSH. Se eles reclamarem, lembre-os de agradecer que o restante do backup funcionou.
Em vez de toda essa tediosa edição na etapa 3, suspeito que você possa simplesmente mover o arquivo ~git/.ssh/authorized_keys
de lado e substituí-lo por um arquivo vazio e, em seguida, avisar a todos que insiram novamente suas chaves públicas SSH. No entanto, eu não tentei isso sozinho. Se isso funciona para você, por favor, conte-nos em um comentário.