web-dev-qa-db-fra.com

Qu'est-ce que les numéros de canal dans le message d'erreur SSH se rapportent?

Dans l'exemple ci-dessous sur quoi correspondent les numéros de canal? Qui sont sur le serveur? Qui sont sur le client?

  $ ssh -L1570:127.0.0.1:8899 root@thehost
    Password:
    Last login: Fri Aug  9 13:08:44 2013 from theclientip
    Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
    You have new mail.
    # channel 2: open failed: administratively prohibited: open failed
    channel 3: open failed: administratively prohibited: open failed
    channel 2: open failed: administratively prohibited: open failed

Le client SSH est exécuté sur Windows 7 et le serveur dispose d'un serveur Tomcat en cours d'exécution sur le port 8899.

Tomcat n'écoute pas le 127.0.0.1 sur la machine distante, donc si je change la commande en ssh -L1570:thehostpublicip:8899 root@thehost Le port de port fonctionne. Je sais donc que le transfert de port semble fonctionner simplement bien sur le serveur.

mon fichier de configuration SSHD contient les deux lignes suivantes:

# Port forwarding
AllowTcpForwarding yes

# If port forwarding is enabled, specify if the server can bind to INADDR_ANY.
# This allows the local port forwarding to work when connections are received
# from any remote Host.
GatewayPorts yes

J'essaie de configurer le transfert de ports pour un autre processus, pas Tomcat et que je reçois les messages d'erreur similaires à ceux ci-dessus, donc j'essaie de comprendre la signification des messages d'erreur.

12
ams

À partir de la Documentation du protocole SSH , concernant les canaux:

Toutes les sessions terminales, les connexions transmises, etc. sont des canaux. De chaque côté peut ouvrir un canal. Plusieurs canaux sont multiplexés en une seule connexion.

Les canaux sont identifiés par des chiffres à chaque extrémité. Le numéro faisant référence à un canal peut être différent de chaque côté. Les demandes d'ouverture d'une chaîne contiennent le numéro de canal de l'expéditeur. Tous les autres messages liés au canal contiennent le numéro de canal du destinataire pour le canal.

Les canaux sont contrôlés par le flux. Aucune donnée ne peut être envoyée à un canal jusqu'à ce qu'un message soit reçu pour indiquer que l'espace de fenêtre est disponible.

Transfert de port

La commande que vous avez l'air bien. Êtes-vous sûr que le service que vous essayez de vous connecter est up et d'accepter des connexions? Les erreurs de canal sembleraient indiquer que ce n'est pas le cas.

Quels sont mes canaux actifs?

Si vous avez une connexion active ssh, vous pouvez utiliser la combinaison de touches suivante pour obtenir de l'aide:

Shift+~ suivie par Shift+?

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
debug2: channel 2: written 480 to efd 8

Vous pouvez ensuite utiliser cette combinaison de touches pour obtenir une liste des canaux actifs:

Shift+~ suivie par Shift+#

$ ~#
The following connections are open:
  #2 client-session (t4 r0 i0/0 o0/0 fd 6/7 cc -1)
debug2: channel 2: written 93 to efd 8
21
slm

Si Tomcat n'écoute pas sur bouclack (127.0.0.1), un port transmetteur à celui-ci donnera le message d'erreur que vous recevez.

Si je fais un SSH, avec un port vers l'avant vers un port non-écoute (par exemple: ssh -L1234:127.0.0.1:9999 10.0.0.1 - Si aucun processus sur 10.0.0.1 est lié à Port 9999 sur 127.0.0.1), je reçois la même erreur:

channel 2: open failed: administratively prohibited: open failed

Vous pouvez découvrir quel canal est mentionné en ajoutant -vvv à votre ssh

ssh -vvv -L1570:127.0.0.1:8899 root@thehost

Quel port est l'écoute du "autre processus" sur (et sur quelles adresses IP), netstat -tulpn Confirmera quels sont les processus ports et ips sur vos serveurs utilise, le -l devra pointer vers une adresse et un port qu'il écoutait.

4
Drav Sloan