À quoi se réfèrent les numéros de canal dans le message d'erreur ssh?

12

Dans l'exemple ci-dessous, à quoi correspondent les numéros de chaîne? Quels sont sur le serveur? Quels 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 s'exécute sur Windows 7 et le serveur possède un serveur Tomcat exécuté sur le port 8899.

Tomcat n'écoute pas sur 127.0.0.1 sur la machine distante, donc si je change la commande sur ssh -L1570:thehostpublicip:8899 root@thehostle port, ça marche. Je sais donc que la redirection de port semble fonctionner très 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 la redirection de port pour un autre processus pas Tomcat et j'obtiens des messages d'erreur similaires à ceux ci-dessus, donc j'essaie de comprendre la signification des messages d'erreur.

ams
la source

Réponses:

21

Dans la documentation du protocole SSH , concernant les canaux:

Toutes les sessions de terminal, les connexions transférées, etc. sont des canaux. Chaque côté peut ouvrir un canal. Plusieurs canaux sont multiplexés en une seule connexion.

Les canaux sont identifiés par des numéros à 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'un canal 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 tant qu'un message n'est pas reçu pour indiquer que l'espace de fenêtre est disponible.

Transfert de port

La commande que vous avez semble bien. Êtes-vous sûr que le service auquel vous essayez de vous connecter est opérationnel et accepte les connexions? Les erreurs de canal semblent indiquer que ce n'est pas le cas.

Quelles sont mes chaînes actives?

Si vous disposez d'une sshconnexion active , vous pouvez utiliser la combinaison de touches suivante pour obtenir de l'aide:

Shift+ ~suivi de 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+ ~suivi de 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
slm
la source
4

Si tomcat n'écoute pas en boucle (127.0.0.1), un port de transfert vers celui-ci donnera le message d'erreur que vous avez reçu.

Si je fais un ssh, avec un port en avant vers un port sans écoute (par exemple: ssh -L1234:127.0.0.1:9999 10.0.0.1- où aucun processus sur 10.0.0.1 n'est lié au port 9999 sur 127.0.0.1), j'obtiens la même erreur:

channel 2: open failed: administratively prohibited: open failed

Vous pouvez savoir à quelle chaîne il est fait référence en ajoutant -vvvà votre ssh

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

Sur quel port "l'autre processus" écoute (et sur quelles adresses IP), netstat -tulpnconfirmera quels ports et processus IP sur vos serveurs utilisent, le -L devra pointer vers une adresse et le port sur lequel il écoute.

Drav Sloan
la source
Je ne peux pas reproduire ce qui précède. Activez-vous les paramètres ssh dans le client et / ou le serveur pour obtenir cela?
slm
Non (configuration standard «prête à l'emploi» des deux côtés). Autant que je peux comprendre, vous obtenez connect failed: Connection refusedquand un pare-feu refuse la connexion. administratively prohibited: open failedest sur un hôte sans pare-feu.
Drav Sloan