Eu tenho duas máquinas. ambos atrás do NAT. Também tenho acesso ao SERVER de cada máquina. Existe uma maneira de fazer o túnel ssh da máquina1 para a máquina2 via SERVER?
As máquinas clientes são Linux Mint. SERVIDOR é debian. Tenho apenas direitos de acesso de usuário em todas as máquinas
Responder1
Eu posso ver como isso poderia ser feito ..
Então você tem 3 computadores. ABC
A, B estão atrás do NAT. Digamos que B seja o intermediário
Método 1
2 túneis
Assim você pode fazer uma conexão SSH de A para B (Túnel 1). E de C para B (Túnel 2). E encaminhe o túnel 1 para o túnel 2.
O computador A se conecta com SSH -L
O computador C se conecta com SSH -R
O -L ou -R determina qual lado do túnel escuta e qual lado do túnel encaminha.
Então, a menos que eu tenha errado, você poderia fazer algo como-
A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB
Mas não tenho certeza se você pode fazer duas conexões com o mesmo servidor SSH, então tente isso.. Fazendo dois servidores sshd diferentes..
edite sshd_config no CompB e você verá que diz Porta 22, adicione uma linha abaixo que diz Porta 222. Então CompB executará um servidor ssh em duas portas.
Então você poderia se conectar aos servidores ssh em duas portas diferentes 22 e 222
A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222
A porta 1234 é a porta do computador A onde você conecta seu programa cliente. É a entrada para o túnel 1
A porta 2345 é a porta no computador B e entrada para o túnel 2
A porta 3456 é a porta onde você executa o programa do servidor no CompC
Assim, desta forma, CompA pode se conectar a um servidor no CompC, através do CompB
Método 2
um túnel
Uma opção é usar apenas um túnel, mas você só obtém criptografia na metade do caminho. 5.6.7.8 é o IP do CompC e a porta 3456 é o servidor no CompC e a porta 1234 é a porta de escuta do túnel.
A$ ssh -L 1234:5.6.7.8:3456 user@compB
Em seguida, no CompA, conecte o programa cliente à porta 1234 no CompA e tudo irá para o CompC.
Responder2
com base na resposta debarlope
Eu tenho A e B atrás do NAT. E C que é acessado de A e B
No CI deve ter apenas acesso ssh. Nada mais é necessário.
na máquina A adicionar tarefa ao crontab
$crontab -e
TUNCMDR='ssh -f -N -R 1144:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1143 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
na máquina B adicione tarefa ao crontab
$crontab -e
TUNCMDR='ssh -f -N -R 1143:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1144 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
AVISO: as portas 1143 e 1144 são alteradas no host B em comparação com o host A
no host A
para se conectar a B
você, execute ssh -p 1234 Buser@localhost
no host B
para se conectar a A
você, execute ssh -p 1234 Auser@localhost
no host C
para se conectar a A
você, execute ssh -p 1144 Auser@localhost
no host C
para se conectar a B
você, executessh -p 1143 Buser@localhost
Você pode ver as informações de reconexão em execuçãocat ~/ssh-world.log
Atualização
Interrompa desconexões/desligamentos de sessão adicionando ~/.ssh/config
Host *
ServerAliveInterval 15