Como baixar um arquivo em um servidor em que você já se transformou?

3

Eu sei como usar scp ou wget para baixar um arquivo em um servidor remoto para minha máquina local. No entanto, se eu já estou logado em um servidor com ssh, existe um comando que me permite baixar um arquivo no pwd no servidor na minha máquina local?

Suponho que posso usar scp, mas minha máquina local geralmente está atrás de um roteador. Eu teria que abrir uma porta no roteador?

    
por Wilhelm 14.12.2009 / 21:46

6 respostas

4

O que você precisa responder é por que você não quer logar novamente ... se você registrou uma vez, você pode logar duas vezes ... especialmente se você tiver levado os três minutos necessários para criar uma chave e armazenar a chave remotamente:

$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
2b:4c:11:ab:53:d1:15:90:4f:88:a1:42:da:c5:1c:98 user@localhost
$ ssh-copy-id user@remotehost
Warning: Permanently added 'remotehost' (RSA) to the list of known hosts.
Password:
$ ssh user@remotehost
Last login: Mon Dec 14 21:52:45 2009 from 1.2.3.4
[user@remotehost] $

De volta às vezes antes do TCP / IP ser comum, as pessoas usavam kludges como o X / Modem para lidar com isso. Usar isso hoje em dia é meio bobo.

    
por 14.12.2009 / 21:54
2

É um pouco arcaico, mas você pode usar algo como o kermit para usar um protocolo da era do modem (zmodem, etc.). Parece que há um programa destinado apenas para esse propósito também.

Uma vez eu precisei fazer o download de um arquivo pequeno-ish de um servidor unix remoto sem nenhuma ferramenta de suporte, então eu codifiquei o arquivo, o despejei com cat no terminal e capturei o texto resultante com meu programa terminal local onde eu decodifiquei. Doente, eh? :)

    
por 14.12.2009 / 21:53
1

O SCP é a ferramenta certa para o trabalho. Apenas inicie o scp a partir da máquina local, assim você usaria:

usuário scp @ remotehost: / caminho / para / arquivo / nome do arquivo ~ /

... que colocaria o arquivo em sua caixa local em seu diretório pessoal.

    
por 14.12.2009 / 21:52
1

Se você quiser uma opção de apontar e clicar, você pode usar o Konqueror e o protocolo fish. Basta abrir o Konqueror e, na barra de endereços, escrever fish: // user @ remote, com o usuário sendo o usuário que você deseja efetuar login, e o remote sendo o computador remoto.

    
por 14.12.2009 / 22:39
1

Eu criei uma maneira de fazer isso com um cliente ssh padrão. É um script que duplica a conexão ssh atual, localiza seu diretório de trabalho na máquina remota e copia de volta o arquivo especificado para a máquina local. Ele precisa de 2 scripts muito pequenos (1 remoto, 1 local) e 2 linhas na sua configuração ssh. As etapas são as seguintes:

1) Adicione estas 2 linhas ao seu ~ / .ssh / config
ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:% p

Agora, se você tiver uma conexão ssh com o machineX aberto, não precisará de senhas para abrir outra.

2) Faça um script de 1 linha na máquina remota chamada ~ / .grabCat.sh
#! / bin / bash
cat "$ (pwdx $ (pgrep-u $ (whoami) bash) | grep -o '/.*' | tail -n 1)" / $ 1

3) Faça um script na máquina local chamada ~ / .grab.sh
#! / bin / bash
[-n "$ 3"] & & dir="$ 3" || dir="."

ssh "$ 1" ".grabCat.sh $ 2" > "$ dir / $ 2"

4) e crie um apelido para grab.sh em (~ / .bashrc ou qualquer outro lugar) alias grab = ~ / .grab.sh

É isso, tudo feito. A partir de agora, se você estiver logado em "machineX: / some / directory", basta abrir um novo terminal e digitar
pegar machineX filename

Isso coloca o arquivo em seu diretório de trabalho atual na máquina local. Você pode especificar um local diferente como um terceiro argumento para "agarrar".

Nota: Obviamente, ambos os scripts devem ser "executáveis", ou seja, chmod u + x filename

    
por 30.11.2010 / 15:30
0

Uma maneira de fazer isso seria configurar o encaminhamento de porta quando você fizer sua conexão inicial ssh com a máquina remota. Faça isso:

$ ssh -L 9999: remoto: 22 remoto

em que remote é o nome da máquina remota.

depois, em um terminal separado em sua máquina local, você pode fazer isso:

$ scp -p 9999 localhost: somefile somefile

para copiar um arquivo da máquina remota, sobre a conexão ssh existente da etapa 1, de volta para sua máquina.

Sei que isso não responde exatamente à sua pergunta, mas espero que dê uma ideia de como fazer isso. Leia o encaminhamento de porta ssh para mais detalhes.

    
por 14.12.2009 / 21:59