Use outros processos como intermediário. Seu serviço da Web (ou qualquer outro) grava novas solicitações em um spool em algum lugar. O intermediário observa o spool, remove e sanity verifica as novas entradas e anexa o que é válido ao arquivo authorized_keys do git
. O mesmo intermediário pode dar feedback que o serviço da Web pode ler. Mas um usuário http
comprometido não pode manipular o intermediário ou o usuário git. Seu intermediário pode ser um daemon ou até mesmo um trabalho cron.
Como alternativa, já que obviamente você está com más idéias :), podemos aproveitar o fato de que 1), não importa qual, o usuário git
terá acesso de gravação ao seu próprio arquivo authorized_keys
e 2) você concorda com qualquer pessoa que tenha acesso SSH ao usuário git
. Portanto, como o seu usuário http
se enquadra em "qualquer pessoa", forneça ao seu par de chaves ssh de http
e adicione a chave pública ao arquivo de chaves autorizadas do usuário git
. Agora, seu serviço da Web pode simplesmente fazer um ssh -n git@localhost echo $key >> ~/.ssh/authorized_keys
. Não há lapso na segurança aqui, porque um estranho com acesso SSH seria capaz de fazer exatamente isso de qualquer maneira.
Se a obtenção de um shell não for algo que você deseja para seu usuário git
de acesso aberto (porque a segurança é importante, você sabe), mas se você ainda permitir que git push
seja emitido sobre SSH, então você pode obter meta realmente criando um repositório apenas para commits de chave pública. Seu usuário http
terá um clone desse repositório e seu serviço da web emitirá commits e push. Em seguida, um gancho do lado do servidor pode verificar a (s) chave (s) no commit e adicioná-lo ao arquivo authorized_keys do seu usuário git
após a validação.
Mas vamos supor que tudo isso seja concluído de alguma forma de alguma forma. O que você terá é um sistema em que qualquer pessoa pode conceder acesso SSH para seu usuário git
. Então, qual é o sentido da autenticação SSH? Você quer que estranhos tenham acesso ao shell? Por que não apenas anular a senha do usuário git
e permitir senhas vazias? Ou, se você não pretende que esses usuários tenham algo a não ser a capacidade de clonar o SSH, por que não evitar toda essa confusão apenas servindo seus repositórios através do protocolo http ou git?