Como scp através de uma máquina intermediária? [duplicado]

12

Para fazer o ssh no meu computador de trabalho a partir de casa, vamos chamá-lo de C Eu tenho que fazer o seguinte:

ssh -t user@B ssh C

B é um servidor que eu posso conectar em casa, mas C só pode ser conectado a partir de B. Isso funciona bem.

Se eu quiser copiar um arquivo que está em C para meu computador doméstico usando scp , qual comando eu preciso do meu computador pessoal?

    
por Lembik 03.04.2017 / 18:03

3 respostas

15

Sugiro o seguinte no seu .ssh/config :

Host C
    User user
    ProxyCommand ssh -W %h:%p user@B

Eu estou muito mais seguro se o host B não for confiável e funcionar para scp e sftp.

    
por 03.04.2017 / 18:12
9

Conforme descrito em esta resposta , você pode usar a diretiva ProxyCommand para ter um host ssh levando você a um terceiro host de forma transparente:

Digamos que você tenha os três hosts a seguir:

  • workstation.example.com - Esta é a máquina em que você está trabalhando fisicamente
  • proxy.example.com - Esta é a máquina para a qual você está roteando seu tráfego SSH através de
  • endpoint.example.com - Aqui é onde você deseja que o tráfego acabe

Em ~/.ssh/config on workstation , adicione o seguinte:

Host endpoint
    User endpointUser # set this to the username on the endpoint host
    HostName endpoint.example.com
    ProxyCommand ssh [email protected] nc %h %p 2> /dev/null

No host proxy , certifique-se de que nc (netcat) esteja instalado.

Em seguida, em workstation , você pode ssh endpoint ou sftp endpoint e você será transparentemente intermediado por proxy para a máquina por meio de seu host proxy. scp também funcionará.

    
por 03.04.2017 / 18:12
4

É possível e relativamente fácil, mesmo quando você precisa usar certificados para autenticação (típicos em ambientes da AWS).

O comando abaixo copia os arquivos de um remotePath no server2 diretamente para sua máquina no localPath. Internamente, o pedido scp é intermediado por proxy1.

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

Se você usar a autenticação por senha, tente com

scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

Se você usar as mesmas credenciais de usuário nos dois servidores:

scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>
    
por 04.04.2017 / 07:14

Tags