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.
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:
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
: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
:Este comando estabelecerá conexão de
HostA
paraHostB
como de costume e vinculará porta2222
aHostB
porta22
na interface de loopback emHostA
. Isso significa que quando você solicita algo2222
na porta ,HostB
a solicitação será tratada pelo serviço que escuta na porta22
,HostA
geralmente esse é o servidor SSH. Neste ponto, você pode usar alguns dos seguintes comandos para se conectar de voltaHostB
aHostA
:Ou você pode usar os comandos acima, por exemplo:
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 deHostA
:Onde
192.168.100.115
está o endereço IP em qualquer computador Windows na LAN deHostA
, vamos chamá-lo deHostC
. As opções-fTN
colocarão a conexão ssh em segundo plano e você terá apenas um túnel deHostB:3389
até .HostA
HostC:3389
Estou usando isso em combinação com
autossh
para manter a conexão ativa. Por exemplo, eu tenho a próxima linha no meucrontab
:Onde
remote-server-with-public-ip
está um Host definido no meu~/.ssh/config
arquivo emHostA
:As portas
2223
,6900
,3389
onHostB
não são públicas e só posso acessá-las por meio de outra conexão SSH - por exemplo, deHostD
algum lugar na Internet. Mas para acessar8080
estou usando o Apache com proxy reverso emHostB
:-) e o arquivo de configuração do host virtual fica assim:proxy
eproxy_http
são obrigatórios.Leitura adicional: