Alguns utilitários como git e Gitolite podem restringir quais comandos uma chave SSH pode executar fazendo modificações nos authorized_key
arquivos.
O Gitolite, por exemplo, altera a entrada no authorized_keys
arquivo assim:
command="/usr/bin/gitolite/src/gitolite-shell username",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
Como esse comando está sendo executado na extremidade receptora, ele precisa processar o fluxo de dados que chega pela conexão SSH.
Como comandos como esse processam os dados de entrada, por exemplo, lêem o fluxo de dados de entrada e o enviam para quaisquer diretórios ou processos que o utilizem?
Eles fazem isso como qualquer outro comando executado pelo SSH. O SSH conecta seu stdin/stdout/stderr no cliente ao stdin/stdout/stderr ao comando iniciado no servidor. Em seguida, o comando pode ler dados de stdin como normalmente faria e enviar dados via stdout e stderr como normalmente faria.
Ser restringido por
authorized_keys
não faz diferença, exceto que a alocação de TTY pode ser desabilitada como no caso específico fornecido na pergunta (como o encaminhamento de porta e outras coisas), portanto, mesmo que você tenha solicitado um TTY, ele não seria criado.Não seria diferente se você realmente corresse
É só que, neste caso, o servidor ignora o que você especificou e executa o comando definido em
authorized_keys
.