2017-02-19 4 views
1

Je suis en train de déboguer du code OpenSSH où il semble que plusieurs canaux ont été alloués sur une seule session SSH (serveur enfant connecté unique).Plusieurs canaux dans une seule session SSH

Mes requêtes pourraient être naïf ici:

  1. Dans quelles conditions peuvent être multiples canaux ouverts? Quels sont les flux de messages SSH qui mènent à plusieurs canaux? Un organigramme de message sera très utile.

  2. Est-il correct de libérer des canaux [0] dans le cas ci-dessous?

(gdb) p channels[0] 
$1 = (Channel *) 0xb0f33e20 
(gdb) p channels[0]->rfd 
$2 = 0xd 
(gdb) p channels[0]->efd 
$3 = 0xffffffff 
(gdb) p channels[0]->wfd 
$4 = 0xffffffff 
(gdb) p channels[1]->wfd 
$5 = 0x9 
(gdb) p channels[1]->efd 
$6 = 0xffffffff 
(gdb) p channels[1]->rfd 
$7 = 0x9 

Répondre

1

Dans quelles conditions peuvent être multiples canaux ouverts?

Chaque canal est soit la retransmission X11, transfert de port TCP (il peut y avoir plusieurs types), le transfert de socket de domaine UNIX (ou ssh-agent socket) ou proxy MUX. Consulting source code décrivant les types est un bon début. Ils sont ouverts si le client les demande en utilisant les options de ligne de commande (-X, -L, -R, -D, -A, ...) qui sont décrites dans la page de manuel ssh. Quels sont les flux de messages SSH qui conduisent à plusieurs canaux?

Un organigramme de message sera très utile.

Si vous courrez le client OpenSSH et/ou d'un serveur en mode débogage (LogLevel DEBUG3), vous obtiendrez beaucoup d'informations utiles que les messages sont échangés contre divers cas d'utilisation.

Est-il correct de libérer des canaux [0] dans le cas ci-dessous?

Très probablement pas, mais on ne sait pas ce que vous demandez ici et quel est le contexte. C'est évidemment un canal valide avec un descripteur de fichier de lecture pointant vers FD 0x0D donc vous pouvez vous attendre à quelque chose à lire à un moment donné.

+0

Le canal peut également (et est habituellement) être un shell (ou une commande exec =). –

+0

@MartinPrikryl oui. Du point de vue de l'utilisateur, il est généralement perçu de cette façon, mais le code des canaux n'a aucun sens du shell ou des commandes. Il redirige simplement les données d'un chemin à l'autre. – Jakuje