É possível SCP de um remoto para local enquanto estiver conectado ao controle remoto e sem saber o endereço IP do local?

31

Eu regularmente me pego querendo copiar um arquivo da sessão do terminal remoto para a minha máquina local. Normalmente, saio da sessão remota e chamo uma transferência scp do local para copiar o arquivo do remoto para o local. Mas isso parece um pouco longo. Gostaria de transferir o arquivo enquanto estiver conectado ao controle remoto por SSH para economizar tempo. Minha máquina local está conectada à Internet a partir de um intervalo de IP dinâmico, por isso nunca tenho certeza de como me conectar a ela remotamente. Mas certamente, como a sessão remota se origina do meu laptop, deve haver um atalho no scp para voltar ao meu laptop ... Certo?

jnthnclrk
fonte

Respostas:

20

Você pode usar o tunelamento SSH para isso.

Usando o encapsulamento, você pode encaminhar uma porta TCP da máquina local para a máquina remota ou da máquina remota para a máquina local. Eu o uso frequentemente para encaminhar, por exemplo, portas SMTP ou IMAP de uma máquina remota atrás de um firewall para minha máquina local (e depois acessar os serviços localmente, como se estivessem em execução localmente).

Para encaminhar a porta 22 (SSH) da sua máquina local para a máquina remota, tente o seguinte:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(Observe que localhost se refere ao nome local da máquina remota)

Depois de executar isso, você poderá voltar para casa usando o ssh:

ssh -p12345 [email protected]

Ao usar o scp, você faria algo como (o scp tem um P maiúsculo para encaminhamento de porta):

scp -P12345 filename 127.0.0.1:/tmp/filename

O encaminhamento de porta na outra direção (do remoto para o local) usa -L em vez de -R.

Os comandos acima assumem que você está usando um cliente ssh do terminal. Clientes gráficos, como o PuTTY para Windows, também suportam tunelamento

Daniel Lundmark
fonte
Não responde à pergunta do OP cujo IP não é estático.
2
A menos que eu tenha perdido alguma coisa, isso deve ajudar o OP a se conectar da máquina remota atualmente ao local. O tunelamento será feito através da sessão SSH. Como a conexão SSH é configurada da máquina local dinâmica para o controle remoto, ela será bem-sucedida e, portanto, poderá configurar uma porta de escuta na máquina remota que será direcionada para o local de origem.
Isso exigirá que o OP configure o servidor SSH em sua máquina local e cuide da autenticação. Portanto, isso pode ser mais problemático do que vale a pena em alguns casos de uso.
Septagram
Isso não funciona apenas para IPs dinâmicos, mas também através de firewalls que proíbem conexões ssh de remotas para locais. Resposta muito útil!
3
Você pode ter ainda mais conveniência configurando o encaminhamento de porta remota com a ~Csaída. Basta digitar <Enter>~C-R 12345:localhost:22<Enter>e você terá seu túnel sem sair da sessão SSH já estabelecida.
6

Tente o seguinte na linha de comando da máquina remota; talvez seja necessário ativar o encaminhamento de porta no seu roteador.

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

Origem: scp facilmente um arquivo de volta para o host do qual você está se conectando (commandlinefu.com)

Patrick McLaren
fonte
1
Para explicar o que isso faz com as pessoas, ${SSH_CLIENT%% *}dependa o IP da sua máquina local. Portanto, o comando inteiro abre uma sessão scp da máquina remota para a sua máquina local para transferência de arquivos. Isso só pode ser feito se você puder fazer o SSH na sua máquina local a partir da máquina remota.
bizi
2
Isso pode ser melhorado adicionando algo como export ME="${SSH_CLIENT%% *}"no seu arquivo shell rc. Em seguida, você pode simplesmente usarscp <file> $ME:<local path>
kralyk
Ótimo, isso funciona, no entanto, observe: Se você fizer login via VPN, os arquivos não serão finalizados na sua máquina, mas em outro lugar.
kap 11/06
1

Talvez zssh ?

O zssh (Zmodem SSH) é um programa para transferir arquivos interativamente para uma máquina remota enquanto estiver usando o shell seguro (ssh). Pretende-se ser uma alternativa conveniente ao scp, permitindo transferir arquivos sem precisar abrir outra sessão e se autenticar novamente.

O zssh é um wrapper interativo para ssh

Ele usa as veneráveis ​​implementações rz, sz da transferência de arquivos zmodem.

RedGrittyBrick
fonte
1

Promovido esta pergunta, isso é algo que eu gostaria de fazer com facilidade também.

Aqui está a resposta relacionada: Como SCP de uma máquina remota para uma máquina local quando estou fora da minha rede doméstica?

Você precisa permitir o acesso ao ssh de fora da sua rede. Isso é feito encaminhando uma porta no seu roteador de banda larga para o lan ip do seu servidor. No entanto, existem algumas preocupações de segurança ao permitir o acesso ssh de fora, portanto, você também pode procurar métodos para proteger ssh, autenticação baseada em chave em particular e desativar completamente a autenticação por senha.

Mars Robertson
fonte
0

Uma solução seria suspender a sessão ssh na máquina local, executar a cópia na máquina local e reiniciar a sessão ssh de onde você parou.

Por exemplo, suponha que eu esteja conectado ao myuser @ remote e deseje copiar o arquivo lol.txt no meu computador local. Primeiro, quero suspender o ssh na minha máquina local. Normalmente você usaria Ctrl- Zpara suspender, mas isso não funcionará no ssh porque será enviado para o shell remoto. Em vez disso, você deve usar a sequência de escape ssh Enter~. Então, para suspender ssh pressione Enter~ Ctrl- Z. Agora você pode executar comandos em sua máquina local e pode executar

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

copiar o arquivo e retornar ao ssh exatamente onde você o deixou

user@localmachine:~$ fg


fonte
mas o problema não está copiando a partir remoto, o problema está copiando para remoto, eu não vejo como suspender shell faz nada para endereço que ...
alex
Bem, funciona da outra maneira também. A idéia é apenas que você suspenda a sessão em vez de sair dela, o que facilita pelo menos um pouco.
Steen Schütt
0

Se você deseja uma solução mais simples, basta abrir a conta do dropbox, vá para a máquina remota e faça o wget (versão modificada daqui ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

alex
fonte