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
proxyeproxy_httpsão obrigatórios.
Leitura adicional: