Beachten Sie zunächst, dass command=
kein SSH-Subsystem aufgerufen wird. Es führt den Befehl lediglich so aus, als wäre er in der Befehlszeile des SSH-Clients angegeben. z.B
ssh yourhost "svnserve -t --tunnel-user=alice" ssh yourhost "git upload-pack /pub/git/myproject.git" ssh yourhost "ls -la"
Die obigen Beispiele sollten deutlich machen, dass die Kommunikation mit svnserve
oder git
oder ls
über dasselbe stdio (stdin / stdout / stderr) erfolgt wie jede andere SSH-Interaktion. Bei SVN und Git ssh
dient der Client lediglich als Werkzeug zum Remote-Aufrufen von Befehlen.
"Echte" Subsysteme, wie sie mit der Subsystem
Option in konfiguriert wurden sshd_config
, unterscheiden sich nicht sehr. Der einzige wesentliche Unterschied besteht darin, dass sie mit einem statischen, bekannten Namen aufgerufen werden können, anstatt sich auf die Remote-Login-Shell (bash, zsh, & c) zu verlassen, um die richtige ausführbare Datei zu finden. Zum Beispiel kann sich der SFTP-Server /usr/lib/ssh/sftp-server
auf einem Computer befinden, MULTINET_COMMON_ROOT:[MULTINET]SFTP-SERVER2.EXE
auf einem anderen, der in einen sshd
dritten Computer ( Subsystem sftp internal-sftp ) integriert ist. In allen Fällen können Clients ihn jedoch weiterhin anhand des Namens finden sftp
.
Zumindest in OpenSSH können Subsysteme wie normale Programme geschrieben werden, die über stdin / stdout / stderr mit dem Client kommunizieren. Es scheint jedoch, dass das Übergeben von beliebigen Befehlszeilenargumenten nicht zulässig ist. Sie können also nicht einfach ein einzelnes svnserve
Subsystem für alle Benutzer konfigurieren .