Tenho três Computadores.
PC1 e PC2 está em uma LAN privada, onde PC1 é conhecido por PC2 como 192.168.0.2
PC2 e PC está em outra LAN, onde PC2 é conhecido por PC como 192.168.123.101
Como posso me conectar a PC1 de PC com SSH.
Existe algo como:
ssh [email protected] -via [email protected]
ssh -o 'ProxyCommand ssh -W %h:%p [email protected]'
Então você pode simplesmente executar ssh PC1
.
Melhor usado por meio de um alias em ~/.ssh/config
:
Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p [email protected]
Para versões mais antigas do OpenSSH que não têm o -W
opção (eu acho que isso significa ≤5,4), certifique-se de que netcat está disponível no PC2 e use
Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh [email protected] nc %h %p
Usando SSH, há uma solução clara:
em sua máquina local, configure seu ~/.ssh/config
de modo que tenha o seguinte:
Host WhatYouWillCallTheConnection
hostname the.gateway.server.address.com
user YourUsernameOnTheGateway
No gateway e no servidor final ao qual você gostaria de se conectar, certifique-se de ter as chaves públicas do seu cliente local localizadas no ~/.ssh/authorized_keys
Na máquina de gateway, você precisa alterar o ~/.ssh/authorized_keys
de modo que, no início da linha que especifica a chave pública do seu cliente, adicione o comando forçado da seguinte forma:
command="ssh -A [email protected]" ...yourPublicKey....
O -A
é encaminhar o agente se você não gosta de mandar senhas o tempo todo ...
Dessa forma, sempre que você fizer algo como ssh WhatYouWillCallTheConnection
ele vai passar direto pelo gateway e conectar você ao servidor do outro lado de forma transparente.
O encaminhamento de porta pode ser útil.
De PC1:
~# ssh -fN -L 22:PC3:7777 -l <user> PC2
7777 pode ser qualquer porta (desde que ainda não esteja sendo usada). Eu simplesmente gosto desse número, mais qualquer "pedido" que eu possa gerenciar pelo +1 (7778, 7779, etc, etc).
Feito isso, você terá um túnel 'transparente' da porta 7777 local do PC1 para a porta 22. do PC3. Basta emitir:
~# ssh -l <user> -p 7777 localhost
E você deve estar no PC3.
Você também pode usar -D para encaminhar dinamicamente uma porta se quiser que um proxy SOCKS seja estabelecido.
~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2
Felicidades!
O 2017+ (desde ssh v7.3) -resposta a isso é ProxyJump :
ssh -J [email protected] [email protected]
, que é abreviação de:
ssh -o "ProxyJump [email protected]" [email protected]
Isso pode ser reduzido para ssh dest
com um ~/.ssh/config
snippet como tal:
Host jump
User MyJumpHostUser
Hostname Jump.Host.tld
Host dest
ProxyJump jump
User MyDestUser
Hostname des.tin.ATI.on
A única solução que conheço para isso é o script ssh com Belier :
Belier permite abrir um Shell ou executar um comando em um computador remoto por meio de uma conexão SSH. A principal característica do Belier é sua capacidade de cruzar vários computadores intermediários antes de realizar o trabalho.
Há algum tempo encontrei este README.sshhop na MIT Página inicial do Lincoln Laboratory, mas não consegui encontrar mais informações sobre isso. Alguém sabe mais ?