scp para o computador local após o SSHing [duplicado]

2

Na minha máquina local, posso copiar arquivos de uma máquina remota

scp remote:/some/file/path ~

Mas e se eu já estiver usando o SSH na máquina remota? Posso fazer algo assim

ssh remote
cd /some/file
scp path local:~

onde local de alguma forma resolve para a máquina I SSHed de . Obviamente, isso seria possível se a máquina local estivesse executando um servidor SSH e o remoto estivesse configurado para se conectar a ele, mas isso nem sempre é uma opção.

É algo assim possível?

    
por Max 23.04.2014 / 21:53

1 resposta

2

Como mencionado nos comentários, sugiro usar sftp :

$ sftp remote
user@remote's password: 
Connected to remote.
sftp> pwd
Remote working directory: /home/user
sftp> cd /etc
sftp> get fstab
Fetching /etc/fstab to fstab
/etc/fstab                                 100%  435     0.4KB/s   00:00    
sftp> 

Outra abordagem bastante hacky seria abusar dos recursos de encaminhamento de porta do SSH, combinados com nc (a.k.a. netcat ). nc é o "canivete suíço da rede" (o menor… também há socat , que é mais o MultiTool®;) - uma espécie de cat com recursos de rede.

A ideia: informar ssh para encaminhar uma porta remota da sua máquina remota para uma porta local no lado do cliente e usar essa conexão para canalizar seus dados usando nc :

  1. Conecte-se a $remote , estabelecendo o encaminhamento de porta remota:

    client:~> ssh -R 8888:localhost:8888 $remote
    

    Isso estabelece uma conexão normal com $remote , mas também informa ssh para escutar na porta 8888 no lado remoto. Se algo se conectar à porta 8888 no lado remoto, ssh abrirá uma conexão com localhost , porta 8888 no lado do cliente (assim, o cliente) e encaminhará qualquer coisa enviada para a porta do lado remoto 8888 para esta porta.

  2. Ouça na porta do lado do cliente 8888 (então, ssh tem algo para se conectar), usando nc . Nós direcionamos a saída (do lado do cliente) nc para tar , já que enviaremos um fluxo tar para ele depois:

    client:~> nc --recv-only -l -p 8888 | tar xvf -
    
  3. No lado remoto, altere seu diretório de trabalho atual onde você quiser.

  4. Se você estiver no lugar certo, use tar para coletar os arquivos que deseja copiar e canalize-os para (lado remoto) nc , conectando-se à porta aberta do lado remoto:

    server:~> cd /path/with/those/files
    server:files> tar cvf - ./some/files | nc --send-only 127.0.0.1 8888
    
  5. Magic ™ acontece.

Nota: existem pelo menos três implementações diferentes de nc , todas com uma sintaxe ligeiramente diferente; --send-only e --recv-only são AFAIK apenas suportados por netcat6 . Se você tem uma implementação que não suporta essas opções (ou similares), você terá que olhar se tar saiu e pressionar Ctrl - C no remetente lado. nc normalmente espera para sempre e não manipula EOF ( --send-only diz para fazer e automaticamente fecha a conexão).

Outra observação: Você também pode usar nc diretamente, mas usando o encaminhamento de porta ssh , seus dados passam pela conexão SSH, evitando dois problemas: primeiro, seus dados são ainda enviado criptografado e, segundo, isso também funciona se o seu cliente estiver por trás de um firewall NAT ou não puder ser acessado diretamente de seu $remote .

    
por 24.04.2014 / 00:17

Tags