scp sobre o túnel ssh

1

Eu quero copiar arquivos de um computador remoto (W) para um computador host privado (P) via scp. Como não consigo me conectar à máquina W diretamente, eu uso um túnel ssh em duas máquinas diferentes com a porta 22. O que eu gostaria de fazer, é entrar na máquina W e de lá fazer uma transferência de arquivo scp para a máquina P, o problema é que P está escondido em uma rede, então eu não posso especificar um host remoto ip quando estou logado na máquina W. Existe uma solução para isso? Eu consigo fazer isso quando estou logado na máquina P, mas eu não quero para lembrar o caminho do arquivo toda vez que eu copiar um arquivo.

jruebsam
fonte
Então sua configuração é algo assim? W -- ? -- ? -- P
Janos Pasztor
sim exatamente, existem 2 máquinas entre esses computadores em que eu faço um encaminhamento de porta, o problema é que o W está escondido atrás de algum tipo de roteador .. do meu dormitório
jruebsam
Você tem acesso shell ao roteador / host na frente de P? Ou você pode fazer um encaminhamento de porta em qualquer um dos ??
Janos Pasztor
Eu não tenho nenhum acesso ao roteador, eu tenho acesso a ambas as máquinas no meio (vamos chamá-los M1 e M2), mas não como root, e eu também posso fazer um portforward para M2, por exemplo
jruebsam
Espere um segundo, a sua configuração de rede está realmente parecida com isso? W -- M1 -- R1 -- M2 -- P ? Ou o que exatamente é o caminho de rede entre W e P?
Janos Pasztor

Respostas:

1

Depois de esclarecer sua configuração como discutido acima, seu sistema se parece com isto:

P -- R -- M1 -- M2 -- W

R é um roteador NAT que permite conexões apenas P para M1, mas não o contrário, e todos os nós devem ser usados ​​para estabelecer uma conexão.

Solução 1

Seu único problema real é o roteador R sobre o qual você não tem controle, então você deve de alguma forma estabelecer um túnel para permitir W para se conectar de volta. A solução mais simples seria ter P estabelecer uma conexão SSH para M1 e estabelecer uma porta reversa para a frente.

Você pode então configurar um segundo túnel SSH W para M2 para encaminhar pacotes locais para a porta inversa da porta M1, que por sua vez pode ser usado para estabelecer uma conexão SSH encapsulada W para P.

Solução 2

Agora, isso adiciona uma certa complexidade a toda a configuração, o que a torna propensa a erros. Uma solução melhor seria estabelecer uma conexão VPN entre W e M1, P e M2 e entre M1 e M2. Em seguida, você pode estabelecer um roteamento usando um intervalo de endereços privados W para P sobre estes três túneis. Para que isso funcione, você precisa de acesso root a ambos M1 e M2 E você precisa configurar firewalls adequados para que ninguém de fora entre nas VPNs.

Existem, é claro, outras soluções também, mas o que você precisa para pensar em como os pacotes passarão por todos esses bloqueios, a solução real pode então ser adaptada para se adequar às suas ferramentas.

Janos Pasztor
fonte
Obrigado pela sua resposta, eu consegui fazer com que a Solução 1 funcionasse, a Solução 2 caiu, já que não tenho acesso root. Eu agora posso fazer o login W para P com ssh -l userame -p 2210 localhost. Apenas uma pergunta é, exatamente como eu uso scp, ou seja, passar o nome de usuário da porta etc, eu não consegui fazer isso funcionar? Eu tentei algo como scp parameter.ini -p 2210 username@localhost:~/parameter2.ini depois de três tentativas de senha recebo a seguinte mensagem Permission denied (publickey,keyboard-interactive). lost connection
jruebsam
1
@jruebsam: scp usa um capital P para port, então scp -P 2210 file user@localhost:~/destfile. Eu realmente não sei porque ssh e scp são inconsistentes lá - provavelmente por razões históricas, como sempre quando você não pode explicar algo com argumentos ;)
mpy
@mpy: Isso me dá uma nova mensagem de erro ssh: connect to host localhost port 2210: Connection refused lost connection
jruebsam
@mpy: Ok, eu não sei onde foi o erro, mas parece funcionar agora com o comando como acima
jruebsam
2

Eu recomendaria montar o sistema de arquivos remoto localmente usando sshfs. Eu não sei os detalhes da sua configuração, mas vou dar um exemplo. Eu configurei um túnel através de um servidor remoto (R1) para um segundo servidor inacessível (R2) na rede do R1 com este comando:

ssh -fN -p 24222 user@R1 -L 2222:R2:22

Agora posso me conectar ao R2 da seguinte forma:

ssh -p 2222 127.0.0.1

Eu também posso usar sshfs para montar localmente um diretório do R2:

sshfs -p 2222 127.0.0.1:/path/to/dir /mnt/mountpoint

Eu tentei isso usando um túnel através de um não dois servidores remotos, mas não vejo nenhuma razão para que ele não funcione com 3 ou mais, desde que o túnel tenha sido configurado corretamente.

Isso não é exatamente o que você pediu, mas deve servir como uma solução alternativa. Depois de ter o sistema de arquivos remoto montado localmente, você pode usar cp para copiar arquivos de / para ele.

terdon
fonte
Eu realmente usei esse método antes, o problema é que a conexão é um pouco instável e muitas vezes acontece que o meu terminal e o congelador do navegador de arquivos
jruebsam
1
@jruebsam Você deve ser capaz de evitar tais problemas se montar o compartilhamento sshfs usando autofs (Vejo Aqui ) com o soft opção.
terdon
Obrigado pela sua resposta, eu acho que eu poderia dar autofs uma tentativa, espero que realmente funciona melhor, em seguida, com sshfs.
jruebsam
sshfs não tem nada a ver com isso ... scp funciona bem quando você configura o túnel com ssh -fN
slf
@slf, é claro, é apenas uma maneira mais conveniente de fazer esse tipo de coisa se você for fazer isso com frequência.
terdon