Como configurar o túnel ssh para encaminhar o ssh?

11

Eu tenho um computador com Ubuntu por trás do roteador que não consigo configurar. No entanto, quero ter acesso ssh a esse computador. Eu acho que é possível com tunelamento ssh, mas eu não sei como fazer isso. Eu tenho outro servidor para o qual eu gostaria de configurar o tunelamento. Como fazer isso? Ou talvez você tenha alguma outra ideia de como resolver esse problema?

Eu tentei:

ssh -N user@my_server -L 22/localhost/8090

mas diz:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.
    
por klew 29.06.2009 / 16:42

3 respostas

18

Você está pedindo para escutar em sua porta local 22 e encaminhar conexões para a porta 8090 de um sistema remoto. Você não pode fazer isso, porque sua porta local 22 já está ocupada pelo seu servidor SSH local.

Acho que o que você está procurando é o encaminhamento remoto. Substituir -L 22:localhost:8090 por -R 8090:localhost:22 dirá ao host remoto para escutar na porta 8090 e encaminhar solicitações para seu servidor SSH.

Se você estiver deixando a conexão em execução para poder acessar mais tarde a partir de um site remoto, convém certificar-se de que a conexão não exceda o tempo devido à inatividade, adicionando as opções relevantes ( -o TCPKeepAlive=yes ou -o ServerAliveInterval=30 )

Então você vai acabar com algo como:

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

Além disso, se um dos saltos de rede entre você e o servidor estiver inativo a qualquer momento, a conexão cairá apesar de qualquer opção KeepAlive que você especificar, então você pode querer adicionar este comando ao inittab, ou procurar no pacote daemontools ou o equivalente da sua distro, para que ele sempre inicie na inicialização e reiniciado quando sair por algum motivo além do desligamento do sistema (ou você pode executá-lo a partir de um script que circule infinitamente, mas o init ou daemontools são soluções mais limpas). p>     

por 29.06.2009 / 16:54
8

O motivo pelo qual você não pode fazer isso é porque está tentando encaminhar a porta 22 no computador local para a porta 8090 no servidor remoto e algo já está sendo executado na porta 22 no servidor local. Provavelmente você tem um servidor SSH em execução. Você pode consertar isso alterando o 22 para um valor diferente. Você pode verificar se uma porta está livre executando:

# netstat -lep --tcp

Isto lista todos os sockets de escuta, por isso, se a porta não estiver listada, então é grátis.

    
por 29.06.2009 / 16:52
2

Estou usando o comando lsof -i: PortNumber para verificar se a porta está livre:

# lsof -i :2272

se a porta estiver livre, você não verá nada na saída.

    
por 15.07.2015 / 17:18