Como posso baixar um arquivo de uma sessão SSH (sem usar o sftp)?

2

Eu sei que posso usar o sftp user @ host ....

Mas o que eu quero é baixar um arquivo da sessão existente.

isto é.

ssh user @ host ... faça algum trabalho ...

O principal problema que tenho é que o dito arquivo está sob root no servidor, então fazer um comando sftp não é tão simples assim.

    
por jorge.vargas 15.04.2010 / 23:21

5 respostas

4

Da maneira como você descreve, parece que o seu problema é que você não pode logar como root via ssh (provavelmente você usou algum tipo de su ou sudo para funcionar como root).

  • Se o root puder, em princípio, efetuar login via ssh, mas você não souber a senha, poderá configurar a conta do root para permitir a autenticação de chave pública com a chave.
  • Se não for possível, copie esse arquivo para uma pasta acessível à conta na qual você faz login (como a pasta $HOME ), ajuste as permissões e copie como usuário com sftp ou scp .
por 15.04.2010 / 23:44
1

Você já tentou scp ? Por exemplo:

scp user@host:/path/to/remote-file .
    
por 15.04.2010 / 23:23
1

Eu não sei porque tem que ser a mesma sessão, mas se você usar o ControlMaster e o ControlPath em seu ~ / .ssh / config você não precisa autorizar sua conexão scp, já que multiplexa na mesma conexão. Isso também acelera sua conexão com o mesmo host.

Dê uma olhada no link sobre como configurá-lo.

    
por 16.04.2010 / 13:19
0

Você não pode fazer o download "por meio de" uma sessão existente.

scp e sftp funcionam criando novas sessões e conversando com um executável na outra extremidade que está sendo executado no lugar de um shell.

The main problem I have is that said file is under root on the server so doing a sftp command is not that simple.

Você está conectado a um servidor remoto. Eu presumo que você pode chegar a este arquivo em sua conta não-root. Então, scp deve funcionar. O usuário que você especificar em scp pode acessar tudo como se estivesse conectado.

Se você precisar sudo ou su para acessar esse arquivo no sistema remoto, a melhor coisa a fazer é copiá-lo para o diretório pessoal do usuário normal, chmod para que seu usuário normal possua e possa leia-o, então obtenha-o com scp , etc. Se o arquivo for muito grande, chmod o arquivo diretamente temporariamente sem fazer uma cópia.

Outra coisa que você pode tentar - Se você está executando o seu próprio servidor SSH em casa ou em qualquer lugar, e é possível acessar o servidor SSH remoto em que você está logado, você pode usar scp para envie-o da sua sessão remota para o seu sistema local.

    
por 30.10.2014 / 14:01
0

A maneira que eu faria o que você está pedindo seria ativar o registro de sessão no seu cliente ssh (as maneiras de fazer isso variam. Dependendo do arquivo, você pode simplesmente configurar um grande buffer de rolagem). e, em seguida, base64 codifique o arquivo e blit-lo para o seu terminal. : D

Você pode então cortar os bits externos de cada extremidade do log e base64 decodificá-lo de volta para o arquivo original.

Por exemplo:

base64 < file.to.transfer

E, no final do cliente:

base64 -d < trimmed.log.file > destination.file

Alguns programas clientes possuem métodos embutidos para fazer praticamente a mesma coisa com, digamos, o protocolo XMODEM ou similar, mas a disponibilidade do software de transmissão no lado do servidor provavelmente será muito menor do que para a base64, que está incluído na maioria das distribuições Linux que eu usei recentemente. Se você tem um cliente que o suporta, ele cuida da fase de corte e decodificação automaticamente, o que pode ser conveniente para arquivos grandes. Eu não sei se alguém realmente usou isso desde os tempos dos BBSs de telnet, então boa sorte.

    
por 22.10.2015 / 01:05