Primeiro, observe que command=
não chama um subsistema SSH. Ele simplesmente executa o comando como se fosse dado na linha de comando do cliente SSH; por exemplo,
ssh yourhost "svnserve -t --tunnel-user=alice"
ssh yourhost "git upload-pack /pub/git/myproject.git"
ssh yourhost "ls -la"
Os exemplos acima devem deixar mais claro que a comunicação com svnserve
ou git
ou ls
acontece sobre o mesmo stdio (stdin / stdout / stderr) que qualquer outra interação SSH. Para SVN e Git, o cliente ssh
serve apenas como uma ferramenta para invocar comandos remotamente.
Os subsistemas "reais", conforme configurados usando a opção Subsystem
em sshd_config
, não são muito diferentes. A única grande diferença é que eles podem ser invocados por um nome estático e conhecido, em vez de depender do shell de login remoto (bash, zsh, & c) para localizar o executável correto. Por exemplo, o servidor SFTP pode ser /usr/lib/ssh/sftp-server
em uma máquina, MULTINET_COMMON_ROOT:[MULTINET]SFTP-SERVER2.EXE
em outra, embutido em sshd
na terceira ( Subsistema sftp interno-sftp ), mas em todos os casos os clientes ainda podem encontre-o usando o nome sftp
.
Pelo menos no OpenSSH, subsistemas podem ser escritos como programas normais que se comunicam com o cliente via stdin / stdout / stderr. Parece que não é permitido passar argumentos de linha de comando arbitrários, portanto, não é possível configurar apenas um subsistema svnserve
para todos os usuários.