Acho que o problema está no fato de você ter configurado um comando no arquivo authorized_keys , mas a seção man sshd no formato do arquivo authorized_keys diz claramente:
command="command"
Specifies that the command is executed whenever this key is used for authentication. The command supplied by the user (if any) is ignored. (…)
Isso significa que sempre que git-upload-pack tentar entrar em contato com git-receive-pack (por meio de um comando ssh incluindo a chamada para git-receive-pack , ele será esmagado em favor do comando especificado em .ssh/authorized_keys .
git-shell pode e aceita comunicações relacionadas ao git de entrada, mas como os parâmetros de git-upload-pack foram esmagados para nulos, o primeiro está assumindo que alguém está tentando abrir um terminal comum e o interrompe. man git-shell :
name
git-shell - Restricted login shell for Git-only SSH access
synopsis
git shell [-c ]
description
A login shell for SSH accounts to provide restricted Git access. When -c is given, the program executes non-interactively; can be one of git receive-pack, git upload-pack, git upload-archive, cvs server, or a command in COMMAND_DIR.(…)
Meu conselho seria (supondo que você não tenha feito isso) para criar uma conta de usuário separada para git sozinho e fazer com que essa conta tenha as chaves públicas apropriadas em <git-home>/.ssh/authorized_keys . Além disso, não se esqueça de remover o comando forçado da (s) chave (s) pública (s) em questão.
Além disso, recomendo que você configure a conta de usuário git para usar git-shell como shell padrão, modificando /etc/passwd da seguinte forma:
From "git:*:1000:1000:git systems account:/home/git:/bin/sh" To "git:*:1000:1000:git systems account:/home/git:/usr/local/bin/git-shell"
Se git-shell estiver instalado em algum lugar diferente de /usr/local/bin , which git-shell informará o caminho exato a seguir.
Espero que ajude; -)