SSH não permite o uso de uma chave com permissões de leitura de grupo

9

Eu tenho um servidor git de desenvolvimento que é implantado em um servidor ativo quando a liveramificação é enviada para. Cada usuário tem seu próprio logon e, portanto, o post-receivegancho que faz a implantação ao vivo é executado sob seu próprio usuário.

Como não quero manter as chaves públicas dos usuários como chaves autorizadas no servidor ativo remoto, criei um conjunto de chaves que pertencem ao sistema git para adicionar aos servidores ativos remotos (no post-receivegancho, estou usando $GIT_SSHpara definir a chave privada com a -iopção).


Meu problema é que, como todos os usuários podem querer implantar para viver, a chave privada do sistema git precisa ser pelo menos legível por grupo e o SSH realmente não gosta disso.

Aqui está uma amostra do erro:

XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa

Eu olhei em volta, esperando encontrar algo para forçar o ssh a continuar com a conexão, mas não encontrei nada além de pessoas dizendo cegamente que você não deveria permitir acesso a nada além de um único usuário.

Jessie Ross
fonte

Respostas:

5

Aqui está uma maneira simples e segura.

Crie um novo usuário para a transferência ssh, que eu chamo de git-sync. Crie um usuário semelhante no servidor com associação ao grupo para o repositório git. Adicione a chave pública para usuário-sincronização no arquivo users_keys2 desses usuários. Estou assumindo que os usuários do git são todos membros do gitgroup. Verifique se o usuário git-sync também é membro deste grupo.

Agora edite seu arquivo / etc / sudoers para incluir uma linha como:

%gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git

Isso permitirá que qualquer membro do grupo gitgroup execute o comando / usr / bin / bit como git-sync sem uma senha.

Agora, coloque algo assim no gancho pós-recebimento:

sudo -u git-sync /usr/bin/git push origin
Kent Hulick
fonte
Isso é melhor do que o que eu estava procurando, obrigado!
21413 Jessie Ross
11

Você PODE usar arquivos de identidade legíveis em grupo, A menos que seja o proprietário da chave. Portanto, basta definir o arquivo de identidade como pertencente, por exemplo, ao usuário root e, em seguida, todos os usuários do repositório git.

Uma boa vantagem disso é que você não precisa do sudo - a solução será mais simples.

Observe que isso funcionará novamente no problema original se você estiver usando o root para enviar para o seu repositório git.

Linus Swälas
fonte
2
Isso é incrível e muito melhor do que as respostas "não faça isso". Obrigado!
22615 Ian McGowan
2
Permissions 0640 for 'id_rsa' are too open.

A chave privada deve permanecer privada. Você não deve permitir que ninguém o leia.

Como não quero manter as chaves públicas dos usuários como chaves autorizadas no servidor ativo remoto, criei um conjunto de chaves que pertencem ao sistema git para adicionar aos servidores ativos remotos (no post-receivegancho, estou usando $GIT_SSHpara definir a chave privada com a -iopção).

  1. configurar um par de chaves para ssh do desenvolvedor para o servidor de produção
  2. no post-receivescript hook, tente algo como isto:

    if [ "live" == "$branch" ]; then
        ssh -t user@prod "git --work-tree=... --git-dir=... checkout -f"
    fi
    
quanta
fonte
Como posso "configurar um par de chaves para ssh do dev para o servidor de produção", é com isso que estou tendo problemas. Eu já tenho 2 no lugar.
Jessie Ross
1
Sobre o desenvolvedor: ssh-keygen, ssh-copy-id user@prod. Sobre o prod: chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys.
quanta
1
O problema é que existem vários usuários, portanto, tenho que repetir isso para todos os usuários que desejam editar horários de cada projeto existente no servidor.
Jessie Ross
Não. Você só precisa configurar apenas mais dois usuários: um para ssh do dev para o prod e outro para executar o git checkout...(no prod).
quanta
O post-receivegancho (máquina de desenvolvimento) é executado pelo usuário que está pressionando uma alteração (portanto, sob a permissão do usuário), para que todos tenham chaves diferentes, não posso ajudar qual usuário será. Existem dois post-receiveganchos em dois servidores diferentes em ação.
Jessie Ross