SSH -L Tunnel não está mais funcionando

0

A máquina local que executa meus scripts precisa acessar o banco de dados de um servidor remoto. Na semana passada eu poderia fazer, na máquina local %código% na máquina local:

# netstat -an | egrep "tcp.*:1081.*"
tcp        0      0 127.0.0.1:1081          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:1081                :::*                    LISTEN

em seguida, dizendo aos meus scripts para usar a porta 1081 para conexões mysql funcionadas. Este comando netstat mostra-me aceitando conexões bem no lado local, mas a mesma verificação na máquina remota, aquela com o servidor mysql real não está escutando em 1081, o que não era o caso antes

Eu verifiquei o sshd_config que parece permitir o tunelamento, ou seja, nenhuma alteração de configuração. Eu também tentei abrir um túnel para outro servidor na minha rede e isso também não está funcionando, é minha porcaria de comando ou algo assim? Tentei com várias combinações de ssh -f -N -T -L1081:localhost:3306 ueser@remoteserver -p2222

    
por Recct 13.03.2013 / 15:59

2 respostas

9

Eu desenhei alguns esboços

A máquina em que o comando ssh tunnel é digitado chama-se »seu host« .

Introdução

  1. local: -L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHost significa: conecte-se com ssh a connectToHost e encaminhe todas as tentativas de conexão para o local sourcePort para a porta onPort na máquina chamada forwardToHost , que pode ser alcançado a partir da máquina connectToHost .

  2. remoto: -R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHost significa: conecte-se com ssh a connectToHost e encaminhe todas as tentativas de conexão para o remoto sourcePort para a porta onPort na máquina chamada forwardToHost , que pode ser alcançado a partir de sua máquina local.

Opções adicionais

  • -f diz ao ssh para se autenticar depois de autenticar, então você não precisa ficar sentado rodando alguma coisa no servidor remoto para o túnel permanecer vivo.
  • -N diz que você deseja uma conexão SSH, mas na verdade não quer executar comandos remotos. Se tudo o que você está criando é um túnel, a inclusão dessa opção economiza recursos.
  • -T desativa a alocação pseudo-tty, que é apropriada porque você não está tentando criar um shell interativo.

Seu exemplo

A primeira imagem representa seu caso. Se você fizer

ssh -L 1081:localhost:3306 remotehost

todas as tentativas de conexão à porta verde 1081 são encaminhadas pelo túnel ssh para a porta cor-de-rosa 3306 no host local do remotehost, ou seja, o próprio host remoto.

Agora seus scripts php podem acessar seu banco de dados via localhost:1081 . Mas o comando netstat no seu remotehost não consegue encontrar nada em 1081 (pelo menos não como resultado do túnel). Porque a porta rosa não é uma porta de escuta criada pelo ssh, mas o destino do encaminhamento. E não está encaminhando para a porta 1081 , mas para 3306 .

O seu servidor db está realmente escutando na porta 3306 ou possivelmente na porta 1081 ? Se o último for verdadeiro, seu comando deve ser alterado para ficar assim:

ssh -L 1081:localhost:1081 remotehost

Se o seu banco de dados atende na porta 1081 , você deve encontrá-lo com o netstat (independentemente do ssh).

Espero que isso ajude a esclarecer a confusão.

    
por 15.03.2014 / 01:25
2

Você não esperaria que o lado remoto estivesse escutando na porta 1081. Você está pedindo ao túnel para se conectar à porta 3306 no lado remoto, e esta é a porta padrão do mysql. Pode valer a pena verificar se está realmente a ouvir nessa porta. Como alternativa, se você realmente quiser usar a porta 1081 em ambos os lados, substitua sua opção -L por -L1081:localhost:1081 .

    
por 13.03.2013 / 16:17