Quando abro este túnel ssh:
ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983
Eu recebo esse erro ao tentar acessar o servidor HTTP em execução no localhost: 8984:
channel 1: open failed: administratively prohibited: open failed
O que esse erro significa e em qual máquina você pode corrigir o problema?
remote
" no meu caso.Respostas:
A mensagem acima refere-se ao servidor SSH rejeitando a solicitação do seu cliente SSH para abrir um canal lateral. Isso geralmente vem de
-D
,-L
ou-w
, como canais separados no fluxo SSH são necessários para transportar os dados encaminhados.Como você está usando
-L
(também aplicável a-D
), há duas opções em questão que estão fazendo com que o servidor SSH rejeite essa solicitação:AllowTcpForwarding
(como Steve Buzonas mencionou)PermitOpen
Essas opções podem ser encontradas em
/etc/ssh/sshd_config
. Você deve garantir que:AllowTCPForwarding
não está presente, está comentado ou está definido comoyes
PermitOpen
não está presente, está comentado ou está definido comoany
[1]Além disso, se você estiver usando uma chave SSH para conectar, verifique se a entrada correspondente à sua chave SSH
~/.ssh/authorized_keys
não possuino-port-forwarding
oupermitopen
instruções [2].Não é relevante para o seu comando específico, mas também é um pouco relevante para este tópico,
PermitTunnel
se você estiver tentando usar a opção -w.[1] Sintaxe completa na página de
sshd_config(5)
manual.[2] Sintaxe completa na página de
authorized_keys(5)
manual.fonte
lxc.cgroup.devices.allow = c 10:200 rwm
à configuração do contêiner e garantir que, se/dev/net/tun
não existir,mknod /dev/net/tun c 10 200; chmod 666 /dev/net/tun
seja executado na inicialização do contêiner.AllowTcpForwarding
permite encaminhar portas TCP por SSH, que é o que o-L 0.0.0.0:8984:remote:8983
parâmetro está solicitando. SeAllowTcpForwarding
estiver definido comono
, o SSH rejeitará a solicitação de encaminhamento de porta, fazendo com que você veja esse erro.AllowTCPForwarding
paraAllowTcpForwarding
, mas o SE deseja que pelo menos 6 caracteres sejam alterados. Portanto, apenas observe que o caso correto é aTcp
versão, conforme usado corretamente na primeira vez.Em um caso muito estranho, também experimentei esse erro ao tentar criar um túnel local. Meu comando era algo assim:
O problema era que, no host remoto,
/etc/hosts
não havia entrada para "localhost", portanto o servidor ssh não sabia como configurar o túnel. Uma mensagem de erro muito hostil para este caso; feliz por finalmente ter descoberto.A lição: verifique se o nome do host de destino do seu túnel pode ser resolvido pelo host remoto, via DNS ou
/etc/hosts
.fonte
user@remote
) e, a partir do final remoto, configura túneis para os hosts de destino listados (no comando acima, este élocalhost
). Ao fazer isso, ele usa o esquema de resolução de nome de host no host remoto . Portanto, se a máquina na qual você fez o SSH não conseguir resolverlocalhost
, você receberá esta mensagem de erro.Pelo menos uma resposta é que a máquina "remota" está inacessível com o ssh por algum motivo. A mensagem de erro é simplesmente absurda.
fonte
Se o 'remoto' não puder ser resolvido no servidor, você receberá esse erro. Substitua por um endereço IP e veja se isso resolve seu problema ...
(Basicamente, a mesma resposta que a de Neil - mas certamente achei esse o problema do meu lado) [eu tinha um apelido para o nome da máquina no meu
~/.ssh/config
arquivo - e a máquina remota não sabia nada sobre esse apelido ...fonte
-D
(DynamicForward) como um proxy SOCKS em um navegador. Ou seja, tentando acessar um site que o host do túnel não pode resolver.Esse erro aparece definitivamente quando você usa as opções ssh
ControlPath
eControlMaster
para compartilhar uma conexão de soquete a ser reutilizada entre várias conexões de clientes (de um cliente para o mesmo usuário @ servidor). Abrir muitos (o que quer que isso signifique, no meu caso ~ 20 conexões) gera essa mensagem. Fechar todas as conexões anteriores me permite abrir mais uma vez, até o limite.fonte
MaxSession
sóMaxSessions
. Embora existam algumas proteções, não quebre a configuração do servidor ssh ..."administrativamente proibido" é um sinalizador de mensagem ICMP específico que se resume a "O administrador deseja explicitamente que essa conexão seja bloqueada".
Verifique suas configurações de iptables.
fonte
ssh
não tem lógica para determinar por que uma conexão falhou, apenas pressupõe que, se você está tentando se conectar, ela existe e se você não pode chegar lá, a conexão deve ter sido bloqueada intencionalmente.Um problema semelhante
Outra possível pista
Eu tive o mesmo problema usando
~/.ssh/authorized_keys
compermitopen
.Como eu uso
autossh
para criar um túnel, preciso de duas portas:No lado do cliente
Isso me deu um problema semelhante com a porta de monitoramento:
Eu recebi essa mensagem (após 10 minutos):
No lado remoto
Meu
/var/log/auth.log
contido:No meu
~/.ssh/authorized_keys
(lado remoto) eu tinha o seguinte:Como resolver
Resolvi isso substituindo
localhost
instâncias por127.0.0.1
:Parece que o SSH não entende que
localhost
é um atalho para127.0.0.1
, portanto, a mensagemauth.log
e a mensagem proibida administrativamente .O que eu entendo aqui é que administrativamente significa "devido a uma configuração específica no lado do servidor".
fonte
Isso também acontece quando
/etc/sshd_config
temconjunto. Mude para
yes
para permitir o encaminhamento de TCP.fonte
No meu caso, tive que substituir
localhost
por127.0.0.1
:para fazer funcionar.
Eu estava tentando
rdesktop -L localhost:1234
seguir as instruções da Amazon sobre como conectar-se ao AWS EC2 via encapsulamento SSH . Eu tentei mudar/etc/ssh/sshd_config
(o cliente e o servidor executam o Ubuntu 16.04 LTS) pela resposta mais votada. Eu também verifiquei issolocalhost
nos/etc/hosts
dois lados.Nada funcionou até eu alterar o
ssh
próprio comando para:fonte
Alguma atividade de solução de problemas é necessária para encontrar uma resposta definitiva:
fonte
Recebi esse erro uma vez ao colocar o controle remoto no parâmetro -L, também o 0.0.0.0 é redundante, você pode omiti-lo com os mesmos resultados, e acho que você deve adicionar o -g para que ele funcione.
Esta é a linha que eu uso para o tunelamento:
ssh -L 8983:locahost:8984 user@remote -4 -g -N
fonte
Isso também pode ser causado por não conseguir se conectar à porta no lado local.
Este comando está tentando ligar uma porta de atendimento 1234 na máquina local, que é mapeada para um serviço na porta 5678 em uma máquina remota.
Se a porta 1234 na máquina local já estiver em uso por outro processo (talvez uma sessão ssh -f em segundo plano), o ssh não poderá escutar nessa porta e o túnel falhará.
O problema é que essa mensagem de erro pode significar várias coisas, e "proibido administrativamente" às vezes dá a idéia errada. Portanto, além de verificar o DNS, firewalls entre local e remoto e sshd_config, verifique se a porta local já está sendo usada. Usar
para descobrir qual processo está sendo executado em 1234. Você pode precisar do sudo para lsof para listar os processos pertencentes a outros usuários. Então você pode usar
para descobrir o que é esse processo.
Para obter tudo isso em um comando:
fonte
Eu tive a mesma mensagem enquanto tentava fazer um túnel. Houve um problema com o servidor DNS no lado remoto. O problema foi resolvido quando voltou ao trabalho.
fonte
Estou extremamente surpreso que ninguém tenha mencionado que isso pode ser um problema de DNS.
Isso pode ser apresentado se
remote
não for solucionável ou se você inserir uma sintaxe desconhecida, como fiz aqui, onde adicionei umauser@
à lógica de encaminhamento de porta (que não funcionará).fonte
No meu caso, o problema ocorreu devido à solicitação de um encapsulamento sem acesso ao shell enquanto o servidor pretendia forçar uma alteração de senha na minha conta. Devido à falta de um shell, não pude ver isso e só recebi o erro
Minha configuração de túnel era a seguinte:
O erro foi mostrado ao efetuar login diretamente no servidor (sem -N -f):
Resolvi o problema efetuando login com acesso ao shell e alterando a senha. Então eu poderia simplesmente usar túneis sem acesso ao shell novamente.
fonte
Eu tive esse problema ao tentar conectar via SSH com um usuário que estava autorizado apenas a conectar usando SFTP.
Por exemplo, isso estava no servidor
/etc/ssh/sshd_config
:Portanto, nesse caso, para usar o SSH, você precisará remover o usuário do
sftponly
grupo equivalente ou conectar-se usando um usuário que não esteja limitado ao SFTP.fonte
Verifique se
/etc/resolv.conf
está vazio no servidor para o qual você estássh
. Várias vezes, achei que isso estava relacionado a um/etc/resolv.conf
arquivo vazioSe não for root, você pode simplesmente verificar o servidor tentando alguns
ping
outelnet
(80) um nome de host público, ou seja:Depois de adicionar registros do servidor de nomes a
/etc/resolv.conf
:No entanto, você também deve verificar por que
/etc/resolv.conf
estava vazio (isso geralmente é preenchido com registros do servidor de nomes pelo cliente dhcp no servidor, se aplicável.fonte
Eu estava recebendo a mesma mensagem enquanto fazia o SSH tunando para o Debian. Acabou que o sistema remoto não tinha espaço livre. Após liberar espaço em disco e reiniciar, o túnel começou a funcionar.
fonte
Eu vi esse erro no cygwin e isso também deveria ser verdade no linux e funcionou para mim. No meu caso, eu fiz o ssh -ND *: 1234 [email protected] e quando conectei um navegador a esse servidor de meias-comp, ele navegava, mas no comp em que executei o comando ssh, recebi esse erro em o console com cada solicitação - pelo menos para um site, embora o navegador o tenha recuperado pelo proxy ou parecido, pelo menos na medida em que vi a idade principal. Mas fazer essa alteração se livrou da mensagem com falha
http://linuxindetails.wordpress.com/2010/02/18/channel-3-open-failed-administrativamente-prohibited-open-failed/
fonte
ACCEPT
.AllowTCPForwarding
: O comentário que você está falando# To disable tunneled clear text
é sobrePasswordAuthentication
ser definido como não,PermitTunnel
é uma configuração para permitir os túneis de rede da camada 2 ou 3 via tun / tap e o padrão é não. As opções L, R e D usam o encaminhamento TCP e não um dispositivo para tunelamento.Um outro cenário é que o serviço que você está tentando acessar não está em execução. Eu corri para esse problema outro dia apenas para lembrar que a instância httpd à qual eu estava tentando conectar havia sido interrompida.
Suas etapas para resolver o problema seriam começar pelo mais simples, que é ir para a outra máquina e verificar se você pode se conectar localmente e depois voltar ao computador cliente. Pelo menos isso permitirá que você trabalhe em que ponto a comunicação não está acontecendo. Você pode adotar outras abordagens, mas essa é uma que funcionou para mim.
fonte
Verifique seu roteador quanto à proteção de religação de DNS . Meu roteador (pfsense) tem a proteção de religação de DNS ativada por padrão. Isso estava causando o erro 'canal aberto: falha administrativamente proibida: falha ao abrir' com SSH
fonte
Eu tive o mesmo problema e percebi que era DNS. O tráfego é encapsulado, mas o pedido de DNS não. Tente editar o arquivo de hosts DNS manualmente e adicione o serviço que você deseja acessar.
fonte
O meu caso:
fonte
Eu recebi esse erro ao escrever esta entrada no meu blog :
/etc/ssh/sshd_config
teve algo como:Mas
~/.ssh/config
tinha:Note-se a diferença no caso (maiúsculas) entre SSHBeyondRemote.server.com:22 e sshbeyondremote.server.com:22 .
Depois de corrigir o caso, não havia mais o problema.
Eu estava usando:
Versão do cliente OpenSSH:
Versão do servidor OpenSSH:
fonte
Outra causa de resolução de nomes: Meus / etc / hosts tinham um endereço IP incorreto para o nome do servidor (não para o host local), assim:
Mas o IP do servidor configurado (e o nome DNS resolvido com os comandos host / dig) era 192.168.2.47. Um erro de digitação simples causado por uma reconfiguração de IP anterior. Após corrigir / etc / hosts, a conexão do túnel funcionou perfeitamente:
É estranho que o IP real tenha causado a falha quando eu estava usando o IP literal do host local para o túnel. Distro: Ubuntu 16.04 LTS.
fonte
A razão pela qual recebi essa mensagem não é a mais comum, mas vale a pena mencionar. Eu havia gerado por script uma lista de túneis e, para garantir uma apresentação em coluna, imprimi cada último byte em dois bytes. Quando tentei abrir o encaminhamento de túnel para 192.168.66.08, ele sempre falhava, porque '08' é interpretado por gethostbyaddr como um número octal inválido :)
fonte
Parece que existem muitas causas possíveis para esta mensagem. No meu caso, foi uma incapacidade de acessar o controle remoto porque eu não havia fornecido o arquivo de chave corretamente.
A
-L
opção adiciona um salto SSH implícito (efetivamente usando o host SSH explícito como um servidor bastião / salto). Pode ser mais fácil depurar isso executando o salto explicitamente e criando um shell de login na máquina de destino usando "proxycommand".Depois que isso estiver funcionando, você poderá fazer o encaminhamento da porta com base nas máquinas de destino
localhost
(supondo que elas possam efetuar login):fonte