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
:
-
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 informassh
para escutar na porta8888
no lado remoto. Se algo se conectar à porta8888
no lado remoto,ssh
abrirá uma conexão comlocalhost
, porta8888
no lado do cliente (assim, o cliente) e encaminhará qualquer coisa enviada para a porta do lado remoto8888
para esta porta. -
Ouça na porta do lado do cliente
8888
(então,ssh
tem algo para se conectar), usandonc
. Nós direcionamos a saída (do lado do cliente)nc
paratar
, já que enviaremos um fluxotar
para ele depois:client:~> nc --recv-only -l -p 8888 | tar xvf -
-
No lado remoto, altere seu diretório de trabalho atual onde você quiser.
-
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
-
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
.