AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 433923
Accepted
0xC0000022L
0xC0000022L
Asked: 2018-03-28 12:57:59 +0800 CST2018-03-28 12:57:59 +0800 CST 2018-03-28 12:57:59 +0800 CST

Encaminhamento de porta SSH via jump host, arquivos ssh_config e APENAS "ssh targethost"

  • 772

NB: Os clientes OpenSSH que estou usando estão todos na versão 7.2 , portanto, não RemoteCommandestão disponíveis.

Suponha a seguinte configuração:

  1. máquina fooé um host de salto e fornece acesso ao host barpor meio de seulocalhost:10022
  2. barfica dentro de uma rede dentro da qual podemos acessar o host rdpe acessar sua porta RDP (3389). Na verdade, dou o IP de rdpdentro das minhas linhas de comando e configuração, mas presumo que seja legítimo usar seu nome, desde que a pesquisa de nome funcione. Por brevidade, estou usando rdpaqui.

O objetivo agora é obter acesso rdp:3389conectando-se barvia jump host fooe encaminhá-lo para localhost:33389a máquina local da qual estou chamando ssh bar.

[local:33389] --> {foo} --> {bar} --> [rdp:3389]

Interlúdio

Eu resolvi isso anteriormente com o PuTTY da seguinte maneira:

  1. crie uma conexão fooe configure um encaminhamento local -L 33389:localhost:33389, vinculando assim localhost:33389a máquina local localhost:33389a foo.
  2. use o seguinte comando remoto para transportar o encaminhamento de porta para a rede dentro da qual barfica passando ssh -L 33389:rdp:3389 -A bar.
  3. Host barestá configurado para se conectar fooe , assim, acessar o host de salto..ssh/configlocalhost:10022bar

A configuração do PuTTY funciona como um encanto, mas depende de um comando remoto para ser executado. Embora um alias de shell seja uma maneira de fazer isso, eu queria saber se há uma maneira de manter tudo dentro do ssh_config(5)usado pelo meu cliente, usando ProxyCommand?


Um equivalente aproximado da configuração do PuTTY acima é este:

ssh -L 33389:localhost:33389 foo ssh -t -L 33389:rdp:3389 -p 10022 localhost

ou, desde que Host baresteja configurado foopara passar localhost:10022por foo:

ssh -L 33389:localhost:33389 foo ssh -t -L 33389:rdp:3389 bar

E isso parece fazer o trabalho.

Mas é claro que isso é muito para digitar e seria mais fácil poder colocar tudo isso no arquivo de configuração e simplesmente digitar ssh barna máquina local.

Conforme RemoteCommand introduzido no OpenSSH 7.6, isso parece ser bastante trivial:

Host bar
    HostName foo
    RemoteCommand ssh -L 33389:rdp:3389 -A -p 10022 localhost
    LocalForward 33389 localhost:33389

... que deve ser aproximadamente traduzido para a sshinvocação mostrada acima. Mas, como mencionado anteriormente, estou usando uma versão mais antiga (empacotada) do OpenSSH sem suporte para a RemoteCommandestrofe.

Aqui está a tentativa que parece mais próxima do que eu quero alcançar.

Host bar
    HostName localhost
    Port 10022
    ProxyCommand ssh -L 33389:localhost:33389 -W %h:%p foo
    LocalForward 33389 rdp:3389

A ideia é que na máquina local eu simplesmente invocarei ssh bar. Na verdade, funciona porque acabo no prompt do shell de bar, mas o encaminhamento de porta não funciona. Enquanto sudo lsof -i|grep 3389na máquina local me dá:

ssh       15271        accden    6u  IPv6 7933201      0t0  TCP localhost:33389 (LISTEN)
ssh       15271        accden    7u  IPv4 7933202      0t0  TCP localhost:33389 (LISTEN)

No host de salto, não vejo nada ouvindo em nenhuma porta contendo arquivos 3389.

Como ProxyCommandestabelece a conexão com fooe estou dando um LocalForwardpara a conexão com bar, espero que funcione.

O que estou fazendo errado?


O objetivo é usar ssh barpara conectar bare ao mesmo tempo rdp:3389disponibilizar na máquina local como arquivos localhost:33389. Ajustar os ssh_config(5)arquivos na máquina local e foosão permitidos. Passar comandos remotos não é uma resposta válida, no entanto.

openssh ssh-tunneling
  • 1 1 respostas
  • 30397 Views

1 respostas

  • Voted
  1. Best Answer
    A.B
    2018-04-01T10:09:34+08:002018-04-01T10:09:34+08:00

    Primeiro, com o seu tipo de configuração, o que funcionaria, exigindo de qualquer maneira dois ssh:

    Host foo
        LocalForward 10022:bar:22
    
    Host bar
        Hostname localhost
        Port 10022
        LocalForward 33389 rdp:3389
    
    term1$ ssh foo # or use ssh -f -N -o ExitOnForwardFailure=yes foo for background task
    term2$ ssh bar
    

    O que você realmente precisaria não seria RemoteCommand e sim ProxyJump, simplificando muito sua configuração, com objetivo alcançado apenas com:

    ssh -L 33389:rdp:3389 -J foo bar
    

    Ou a configuração equivalente (apenas):

    Host bar
        ProxyJump foo
        LocalForward 33389 rdp:3389
    

    Com zero porta intermediária necessária.

    Infelizmente, o ProxyJump está disponível apenas a partir do openssh 7.3

    Mas é facilmente substituído pelo combo ProxyCommand/-W que você estava usando antes.

    ssh -L 33389:rdp:3389 -o 'ProxyCommand=ssh foo -W %h:%p' bar 
    

    ou como arquivo de configuração:

    Host bar
        ProxyCommand ssh -W %h:%p foo
        LocalForward 33389 rdp:3389
    

    Ainda existem dois ssh em execução: o oculto é aquele como ProxyCommandparâmetro ainda em execução no host local fazendo o link usando um par de pipes com o ssh principal, em vez de uma porta tcp extra. Tentar envolver o host intermediário na participação com o encaminhamento de porta é inseguro ou pode causar conflito (outros usuários de foo podem acessar o túnel ou usar a mesma porta) e sujeito a erros. As extremidades do túnel sempre devem ser mantidas no host do cliente, se possível, onde há controle total. Os túneis intermediários não devem existir ou apontar para o próximo ponto de entrada ssh (esse é o -Wuso aqui).

    • 13

relate perguntas

  • Proxy de tráfego no unix local para um soquete unix remoto por SSH

  • Por favor, explique este formato de comando de conexão SSH

  • encaminhamento de porta ssh com chave privada

  • Não é possível conectar-se ao Centos 6.9 após a atualização para o OpenSSH 7.6 neste servidor [duplicado]

  • Devo configurar o encaminhamento de porta no meu roteador para encaminhar para a porta 22 do sftp? Será seguro? [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve