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 / ubuntu / Perguntas / 1031904
Accepted
Socrates
Socrates
Asked: 2018-05-05 01:39:50 +0800 CST2018-05-05 01:39:50 +0800 CST 2018-05-05 01:39:50 +0800 CST

Como faço para acessar o lado do cliente SSH do lado do servidor SSH? [duplicado]

  • 772
Esta pergunta já tem respostas aqui :
Use SSH de saída para receber SSH de entrada (2 respostas)
Fechado há 4 anos .

Normalmente existe um cliente SSH que se conecta a um servidor SSH. O cliente então coloca comandos que são executados no servidor. Agora, existe uma maneira de fazer isso ao contrário? Para que o cliente se conecte ao servidor, mas o servidor também se conecte ao cliente e seja capaz de executar comandos no cliente. Isso é possível?

Estou procurando isso porque tenho dois servidores (A e B) em duas redes diferentes, ambas conectadas à Internet. O servidor A pode ser acessado por encaminhamento de porta, mas o servidor B não. Como o servidor A faz todo o trabalho, gostaria que o servidor B se conectasse ao servidor A e fizesse o que o servidor A desejasse.

Conexões reversas como essa são possíveis? Ou talvez conexões SSH bidirecionais?

EDITAR :

Como exemplo, gostaria de fazer o seguinte. Estando no servidor A e sabendo que o servidor B está conectado por SSH para mim, gostaria de me conectar ao servidor B e colocar um comando como

echo "This is test content." > /home/myuser/mytestfile`

Depois disso, gostaria de encontrar um arquivo

/home/myuser/mytestfile

no servidor B.

ssh
  • 1 1 respostas
  • 575 Views

1 respostas

  • Voted
  1. Best Answer
    pa4080
    2018-05-05T09:07:23+08:002018-05-05T09:07:23+08:00

    Como o @terdon disse você pode usar o seguinte comando para executar algo no servidor remoto através do SSH e salvar (redirecionar) a saída para a instância local:

    UserA@HostA:~$  ssh UserB@HostB ls ~ > /home/UserA/ls-of-home-UserB.txt
    

    Além disso, você pode usar o seguinte comando para executar algo na instância local e canalizar a saída para o servidor remoto e salvá-lo pelo comando tee:

    UserA@HostA:~$  ls ~ | ssh UserB@HostB tee /home/UserB/ls-of-home-UserA.txt
    

    Concordo com @Sebastian Stark , você provavelmente está perguntando como criar um túnel reverso com o encaminhamento de porta SSH. A conexão SSH permite vincular a porta no servidor remoto à porta no local usando a opção -R. E vice-versa, você pode vincular a porta local à porta remota por -L.

    No seu caso deve ser aplicado o primeiro cenário utilizando a opção -R:

    UserA@HostA:~$  ssh UsuárioB@HostB -R 2222:localhost:22
    

    Este comando estabelecerá conexão de HostApara HostBcomo de costume e vinculará porta 2222a HostBporta 22na interface de loopback em HostA. Isso significa que quando você solicita algo2222 na porta , HostBa solicitação será tratada pelo serviço que escuta na porta 22, HostAgeralmente esse é o servidor SSH. Neste ponto, você pode usar alguns dos seguintes comandos para se conectar de volta HostBa HostA:

    UserB@HostB:~$  ssh UserA@HostB -p 2222
     UserB@HostB:~$  ssh UserA@localhost -p 2222
    

    Ou você pode usar os comandos acima, por exemplo:

    UserB@HostB:~$  ls ~ | ssh UserA@localhost -p 2222 tee /home/UserA/ls-of-home-UserB.txt
    

    Observe que você deve ter instalado o servidor SSH em HostA!


    Um uso interessante é que você pode vincular a porta remota HostBà porta de outra instância na rede local de HostA:

    UserA@HostA:~$  ssh UsuárioB@HostB -fTN -R 3389:192.168.100.115:3389
    

    Onde 192.168.100.115está o endereço IP em qualquer computador Windows na LAN de HostA, vamos chamá-lo de HostC. As opções -fTNcolocarão a conexão ssh em segundo plano e você terá apenas um túnel de HostB:3389até .HostAHostC:3389


    Estou usando isso em combinação com autosshpara manter a conexão ativa. Por exemplo, eu tenho a próxima linha no meu crontab:

    @reboot sleep 15 && autossh remote-server-with-public-ip -fTN
    

    Onde remote-server-with-public-ipestá um Host definido no meu ~/.ssh/configarquivo em HostA:

    Host remote-server-with-public-ip
        HostName hostB
        IdentityFile ~/.ssh/hostB/id_rsa
        User userB
        Port 22
        RemoteForward 2223 127.0.0.1:22
        RemoteForward 8080 127.0.0.1:80
        RemoteForward 6900 127.0.0.1:5900
        RemoteForward 3389 192.168.100.115:3389
    

    As portas 2223, 6900, 3389on HostBnão são públicas e só posso acessá-las por meio de outra conexão SSH - por exemplo, de HostDalgum lugar na Internet. Mas para acessar 8080estou usando o Apache com proxy reverso em HostB:-) e o arquivo de configuração do host virtual fica assim:

    <VirtualHost _default_:443>
    
        ServerName forward.example.com
        # Other configuration directives
    
        SSLEngine on
        # SSL certificate files
    
        ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass "/"  "http://localhost:8080/"
        ProxyPassReverse "/"  "http://localhost:8080/"
    
        <Location />
            Order allow,deny
            Allow from all
        </Location>
    
    </VirtualHost>
    
    • Os módulos do Apache proxye proxy_httpsão obrigatórios.

    Leitura adicional:

    • Acesse vários servidores remotos por trás do NAT
    • Fazendo um script .sh para verificar se existe conexão SSH e se não, conecte-se
    • Use SSH de saída para receber SSH de entrada
    • 2

relate perguntas

  • Como interagir graficamente com um servidor sem cabeça?

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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