A que se referem os números de canal na mensagem de erro ssh?

12

No exemplo abaixo, a que correspondem os números de canal? Quais estão no servidor? Quais estão no cliente?

  $ 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

O cliente ssh está em execução no Windows 7 e o servidor possui um servidor Tomcat em execução na porta 8899.

O Tomcat não está escutando 127.0.0.1 na máquina remota, portanto, se eu alterar o comando para ssh -L1570:thehostpublicip:8899 root@thehosto encaminhamento de porta, funciona. Então eu sei que o encaminhamento de porta parece estar funcionando muito bem no servidor.

meu arquivo de configuração sshd contém as duas linhas a seguir:

# 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

Estou tentando configurar o encaminhamento de porta para outro processo que não seja o Tomcat e recebo as mensagens de erro semelhantes às acima, então estou tentando entender o significado das mensagens de erro.

ams
fonte

Respostas:

21

Na documentação do protocolo SSH , sobre canais:

Todas as sessões do terminal, conexões encaminhadas etc. são canais. Qualquer um dos lados pode abrir um canal. Vários canais são multiplexados em uma única conexão.

Canais são identificados por números em cada extremidade. O número referente a um canal pode ser diferente em cada lado. Os pedidos para abrir um canal contêm o número do canal do remetente. Qualquer outra mensagem relacionada ao canal contém o número do canal do destinatário.

Canais são controlados por fluxo. Nenhum dado pode ser enviado para um canal até que uma mensagem seja recebida para indicar que o espaço da janela está disponível.

Encaminhamento de porta

O comando que você tem parece bom. Tem certeza de que o serviço ao qual você está tentando se conectar está ativo e aceita conexões? Os erros de canal parecem indicar que não é.

Quais são meus canais ativos?

Se você possui uma sshconexão ativa, pode usar a seguinte combinação de teclas para obter ajuda:

Shift+ ~seguido por 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

Você pode usar esta combinação de teclas para obter uma lista dos canais ativos:

Shift+ ~seguido por 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
fonte
4

Se o tomcat não estiver escutando no loopback (127.0.0.1), uma porta encaminhada para isso dará a mensagem de erro que você está recebendo.

Se eu fizer um ssh, com uma porta encaminhada para uma porta que não escuta (por exemplo: ssh -L1234:127.0.0.1:9999 10.0.0.1- onde nenhum processo na 10.0.0.1 está vinculado à porta 9999 em 127.0.0.1), recebo o mesmo erro:

channel 2: open failed: administratively prohibited: open failed

Você pode descobrir a qual canal está sendo referido adicionando -vvvao seu ssh

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

Em qual porta o "outro processo" que está escutando (e em quais endereços IP) netstat -tulpnconfirmará quais portas e processos IPs em seus servidores estão usando, o -L terá que apontar para um endereço e a porta em que está escutando.

Drav Sloan
fonte
Não consigo reproduzir o acima. Você está ativando parâmetros ssh no cliente e / ou no servidor para obter isso?
Slm
Não (configurações padrão 'prontas para uso' nos dois lados). Tanto quanto eu posso descobrir, você consegue connect failed: Connection refusedquando um firewall nega a conexão. administratively prohibited: open failedestá em um host sem firewall.
Drav Sloan