O tunelamento SSH é muito confuso para mim. Gostaria de saber se posso fazer isso no Linux.
Eu tenho 3 maquinas ..
A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.
Então eu posso SSH de A -> B e de B -> C, mas não de A -> C.
Existe uma maneira de configurar um túnel SSH de A a B; portanto, quando executo outros comandos SSH, eles simplesmente funcionam na minha máquina local A? Basicamente, estou tentando clonar um repositório git do trabalho para casa (e não consigo instalar o git na máquina B).
Além disso, uma vez configurado. Como eu também o desmarcaria?
Respostas:
Coloque isso em seu
.ssh/config
arquivo no hostA (consulte man 5 ssh_config para obter detalhes):Agora, o comando a seguir fará o túnel automaticamente através do hostB
Você pode adicionar opções como
-oCiphers=arcfour
e-oClearAllForwardings=yes
acelerar as coisas, pois o empacotamentossh
internossh
é computacionalmente mais caro e o esforço extra e o invólucro não precisam ser tão seguros quando está encapsulando o tráfego já criptografado.Se você estiver usando o OpenSSH anterior à 5.3, a
-W
opção não estará disponível. Nesse caso, você pode implementar o acima usando netcat (nc
):fonte
-W
opção deve ser usada em vez danc
opção.-W
, apenas o hostA (a origem) ou também o hostB (a máquina do meio)?hostB
, é possível declarar váriasHost hostC
linhas acimaProxyCommand
, facilitando o acesso a vários hosts através do servidor intermediário.Edit: Esta é a abordagem errada. Veja a resposta do ephemiente . Essa resposta funcionará, mas é potencialmente menos segura e definitivamente menos impressionante.
Parece que você deseja uma solução como a seguinte:
Isso lhe dará uma concha
machineb
. Deixe isso em paz; minimizar a janela do terminal.Agora, sempre que você fizer uma conexão ssh
localhost
, você estará realmente conectadomachinec
atravésmachineb
. Quando terminar o túnel, feche o terminal no qual você executou o comando acima.Observe que você precisará de privilégios de superusuário para executar o comando.
fonte
-p 8022
aos seus comandos ssh. E é fácil de entender com o git: use o URIssh://localhost:8022/path/to/repo.git
.Parece que você quer um apelido de shell em A que faz com que o ssh ocorra em C
fonte
-t
às opções externas do ssh se você deseja um shell interativo, poisssh
assume-T
se ele recebe um comando.Para shell interativo, você pode usar este comando simples:
As opções -J são para pular .
fonte
Se o seu empregador fornece uma VPN, eu recomendo usá-la.
Dessa forma, você não precisará configurar nenhum aplicativo especialmente (mesmo o ssh) e poderá ver qualquer máquina atrás do firewall. Além disso, todo o seu tráfego será criptografado pelo software VPN, que adicionará segurança a qualquer tráfego não criptografado inadvertidamente ou deliberadamente.
fonte
YASS Mais uma Solução Simples
-f
parâmetro diz ao SSH para entrar em segundo plano depois que a conexão é estabelecidasleep 10
é necessário para manter a conexão até o segundo comando ssh usar a porta encaminhada. Então o primeiro ssh será fechado quando o segundo ssh deixar a porta encaminhada.agora você pode executar sessões ssh subseqüentes:
Variante:
as sessões ssh subsequentes podem ser abertas executando:
A principal vantagem do uso de -M e -S param é que apenas uma conexão é aberta do HostA para o HostC, a sessão subsequente não será autenticada novamente e executada muito mais rapidamente.
fonte
Caso especial, plataformas nix mistas:
hostA (linux) -> HostB (solaris) -> HostC (linux)
Se precisar de um aplicativo X no hostC e o salto intermediário estiver na caixa Solaris ... nesse caso, encontrei o netcat (nc) necessário no ProxyCommand da seguinte forma:
hostA: ~ $ vi .ssh / config:
O tunelamento automático funciona:
hostA: ~ $ ssh hostC
fonte