Fazendo o download do arquivo através do SSH com uma máquina “proxy” inbetween

1

Eu preciso baixar um arquivo da máquina C para a máquina A. Para fazer isso, preciso fazer o login na máquina B (estou fazendo isso usando scp ), pois não consigo acessar C diretamente de A.

Seria possível baixar um arquivo de C para A com um único comando ou script?

    
por syntagma 10.07.2014 / 13:02

4 respostas

3

Se você puder acessar da máquina B para A & C,

A versão mais recente de scp suporta a opção -3 , que permite copiar um arquivo entre duas máquinas remotas.

 -3      Copies between two remote hosts are transferred through the local host.  Without this option the data is copied directly between the two remote hosts.  Note that this option disables the
         progress meter.
$ scp -3 user1@C:/file user2@A:/file
    
por 10.07.2014 / 14:42
2

Se você configurou o acesso SSH em todas as máquinas, você pode configurar o SSH-tunnel via máquina B.
Primeiro passo:

[user@A ~]$ ssh -f -L LOCALPORT:IP_ADDR_C:22 user_at_B@IP_ADDR_B

Chave -f colocar ssh em segundo plano antes da execução do comando. Boa ideia para usar -N key.
De man ssh :

-N      Do not execute a remote command.  This is useful for just forwarding ports (protocol version 2 only).

Agora você pode usar scp :

[user@A ~]$ scp -P LOCALPORT user_at_C@localhost:<your_file_at_C> <local_file>

Por exemplo, baixaremos o arquivo test.txt do usuário me homedir na máquina 192.168.1.1 colocado atrás da máquina host.example.com :

ssh -f -N -L 2222:192.168.1.1:22 [email protected]
scp -P 2222 me@localhost:~/test.txt .
    
por 10.07.2014 / 13:43
0

Existe uma maneira muito simples de fazer isso!

  1. Primeiro, conecte-se ao gateway:

    ssh user@B
    
  2. Inicie a cópia C - > Um

    ssh user@C "dd if=/path/source/file" | ssh user@A "dd of=/path/destination/file"
    

Se você quiser se livrar das mensagens escritas por dd no stderr, use a opção status=none se sua versão de dd suportar isso ou use 2> /dev/null .

Observe que há um bug na versão 8.4 de dd , fazendo com que status=none não funcione, mesmo que isso esteja presente na documentação.

    
por 10.07.2014 / 14:00
0

Você pode estabelecer um túnel ssh de B para C, depois de A scp para a porta B, onde o túnel serve para baixar o arquivo. Existem muitas páginas de informação, o Google para eles, uma das primeiras pesquisas me levou aqui . / p>     

por 10.07.2014 / 13:39

Tags