Como acesso o lado do cliente SSH do lado do servidor SSH? [duplicado]

2

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

O motivo pelo qual estou procurando isso é que tenho dois servidores (A e B) em duas redes diferentes, ambas as redes conectadas à Internet. O servidor A pode ser acessado através do encaminhamento de porta, mas o servidor B não pode. Como o servidor A faz todo o trabalho, eu gostaria que o servidor B se conectasse ao servidor A e apenas fizesse o que o servidor A quer que ele faça.

As conexões reversas são assim 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 a SSH para mim, eu gostaria de conectar para conectar ao servidor B e colocar um comando como

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

Depois disso, eu gostaria de encontrar um arquivo

/home/myuser/mytestfile

no servidor B.

    
por Socrates 04.05.2018 / 11:39

1 resposta

2

Como @terdon dito 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

Eu sou concordar 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 na porta remota do servidor a no local usando a opção -R . E vice-versa, você pode vincular local porta a porta remota por -L .

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

UserA@HostA:~$  ssh UserB@HostB -R 2222:localhost:22

Este comando estabelecerá a conexão de HostA a HostB como de costume e ligará a porta 2222 on HostB à porta 22 na interface de loopback em HostA . Isso significa que quando você solicita alguma coisa na porta 2222 on HostB , a solicitação será tratada pelo serviço que atende na porta 22 on HostA , geralmente esse é o servidor SSH. Neste ponto, você pode usar alguns dos seguintes comandos para se conectar de HostB a 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

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

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

UserA@HostA:~$  ssh UserB@HostB -fTN -R 3389:192.168.100.115:3389

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

Estou usando isso por combinação com autossh para 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

Em que remote-server-with-public-ip é um Host definido no meu arquivo ~/.ssh/config 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 , 3389 on HostB não são públicas e eu posso acessá-las somente por meio de outra conexão SSH - por exemplo, de HostD que está em algum lugar na Internet. Mas para acessar o 8080 estou usando o Apache com proxy reverso em HostB :-) e o arquivo de configuração do host virtual se parece com isso:

<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 proxy e proxy_http são obrigatórios.

Leitura adicional:

por pa4080 04.05.2018 / 19:07