Você pode usar socat para fazer o trabalho. Você precisa de socat
instalado na máquina A e nc
( netcat
) na máquina B ( socat
também funcionará). A seguir, há um exemplo sobre como lidar com uma conexão TCP (você pode ler socat documentação para saber como lidar com mais e personalizar o comportamento).
Você deve executar na máquina A:
- O serviço que você deseja expor na máquina B, digamos, um servidor da Web na porta 8000 (você pode testá-lo executando
python3 -m http.server
oupython2 -m SimpleHTTPServer
em qualquer diretório que você queira expor os arquivos); -
socat para redirecionar entre STDIO e uma conexão SSH para B. Esta conexão SSH para B executará
nc
ouvindo uma porta específica.
Portanto, execute em uma sessão de terminal na máquina A:
python3 -m http.server
E em outra sessão de terminal na máquina A:
socat EXEC:'ssh user@machineb "nc -l -p 8888"' TCP4:localhost:8000
Se socat
também estiver disponível na máquina B, você poderá substituir nc
:
socat EXEC:'ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr"' TCP4:localhost:8000
Explicando o conceito: socat
redirecionará qualquer stdin / stdout do comando ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr"
para uma conexão de cliente TCP em localhost:8000
( TCP4:localhost:8000
). O comando executará a conexão SSH na máquina B e executará socat
lá, o que redirecionará qualquer coisa que se conectar à porta 8888 localmente na máquina B ( TCP-LISTEN:8888,reuseaddr
) para a stdin / stdout ( STDIO
).
Sim, o socat é incrível!