Faça o download de um arquivo em uma sessão SSH ativa

82

Então eu sou SSHed no meu servidor Ubuntu do meu desktop Ubuntu. Eu estou em um determinado caminho e quero baixar um arquivo para o meu sistema de arquivos local (de preferência o caminho que eu estava antes de entrar na sessão SSH).

Eu poderia montar o SSH e puxar o arquivo pelo mouse, mas e se eu estivesse tentando obter um arquivo raiz e fazer logon diretamente pela raiz não é permitido? Mesmo que esse não fosse o caso (não é agora), certamente deve haver uma maneira simples de recuperar um arquivo em uma conexão SSH ativa.

Certamente!

    
por Oli 15.11.2010 / 15:59
fonte

10 respostas

32

Você pode querer verificar o zssh , que está disponível no universo e, portanto, disponível com

sudo apt-get install zssh

Você precisa dele no seu servidor Ubuntu e no seu cliente, mas basicamente quando logado com o zssh, você simplesmente pressiona 'ctrl- @' e traz o "Modo de transferência de arquivos" que permite enviar arquivos de volta canalizar para sua máquina cliente ou enviá-los de cliente para servidor.

No entanto, você não precisa autorizar novamente ou abrir uma nova janela para scp.

Se você estiver usando chaves ssh e um agente ssh, poderá fazê-lo facilmente:

[enter]~[ctrl]-Z

Qual será o plano de fundo ssh e, em seguida, apenas scp $!:/whatever/whatever .'

Quando o arquivo for transferido, fg para recuperar o ssh.

Se você não estiver usando chaves ssh, você ainda pode usar as opções "ControlMaster" e "ControlPath" adicionadas às versões recentes do OpenSSh, mas isso é complicado, confira man ssh_config

    
por SpamapS 17.11.2010 / 01:46
fonte
24

Supondo que você esteja executando um servidor ssh em sua área de trabalho (existem maneiras de contornar isso, mas acho que todos eles adicionam complexidade e possivelmente têm problemas de segurança), você pode configurar um túnel ssh reverso. Consulte o SSH para copiar facilmente o arquivo para o sistema local. por unix.SE .

  • Digite Digite ~C Digite -R 22042:localhost:22 Digite para criar um encaminhamento reverso de porta do seu servidor para a sua área de trabalho (22042 pode ser qualquer número de porta entre 1024 e 65534 que não esteja em uso).
  • Em seguida, o scp -P 22042 foo localhost: copiará o arquivo foo em seu diretório atual no servidor para sua casa na área de trabalho.
  • Agora mova o arquivo para o seu diretório atual na área de trabalho digitando Enter ~ Ctrl + Z mv ~/foo . Digite fg Digite .

Sequências de escape do Ssh começam com ~ ; o til só é reconhecido após uma nova linha. ~ Ctrl+Z coloca o ssh em segundo plano. ~C insere uma linha de comando na qual você pode criar ou remover um encaminhamento.

    
por Gilles 15.11.2010 / 23:37
fonte
10

Eu criei uma maneira de fazer isso com o 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 duas 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á senhas para abrir outra.

  2. Faça um script de 1 linha na máquina remota chamada ~/.grabCat.sh

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/
    
  3. Crie um script na máquina local chamada ~ / .grab.sh

    \#!/bin/bash
    [ -n "" ] && dir="" || dir="."
    ssh "" ".grabCat.sh " > "$dir/"
    
  4. e crie um alias para grab.sh em ( ~/.bashrc ou where):

    alias grab=~/.grab.sh
    

É isso, tudo feito. Agora, se você estiver logado em machineX:/some/directory , basta abrir um novo terminal e digitar

grab 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 user6702 30.11.2010 / 11:29
fonte
5

Se a sua máquina cliente (a máquina em que você está sentado) é chamada máquinaA e a máquina em que você está atualmente conectado é chamada máquina B. MáquinaA sua máquina local deve ter SSHD em execução e a porta 22 aberta. Então:

scp myfile machineA:

Copia myfile no MachineB para meu diretório pessoal MachineA na máquinaA. Isso pressupõe userid / password são os mesmos.

scp myfile machineA:/newdir/newname

Copia myfile um MachineB para /newdir/newname em machineA. Isso pressupõe userid / password são os mesmos.

scp MachineA:/path/to/my/otherfile . 

Obtém uma cópia de otherfile do meu diretório MachineA no MachineA e a coloca no meu diretório de trabalho atual na máquina MachineB (designada no estilo UNIX padrão pelo caractere "dot" (.)). Isso pressupõe userid / password são os mesmos.

Se o ID do usuário / senha não for o mesmo, use:

scp myfile user@MachineA: para obter o arquivo.

scp user@MachineA:/path/to/my/otherfile . para colocar arquivos

NOTAS sobre o SCP:

Assim como o comando cp , scp tem uma opção -p para propagar as configurações de permissão do arquivo original para a cópia (caso contrário, a cópia é feita com as configurações normais para novos arquivos) e -r opção para copiar uma árvore de diretórios inteira com um comando.

scp cria um canal de dados criptografados completamente transparente entre as duas máquinas, portanto, os dados binários (como imagens ou programas executáveis) são preservados corretamente. Isso também significa que scp é incapaz de realizar a conversão automática de terminação de fim de linha entre diferentes tipos de sistemas operacionais, como pode ser feito com o ftp no modo "ascii". Isso não será um problema ao copiar entre sistemas Unix, que usam a mesma convenção de fim de linha.

    
por LukeInDC 07.12.2012 / 20:39
fonte
2

se você acessar o servidor via ssh, você também poderá se conectar via sftp. Mantenha o cliente filezilla (GUI) à mão e cole o caminho em que você está atualmente

    
por jet 16.11.2010 / 02:12
fonte
1

Não é a conexão SSH ativa, mas scp copia arquivos usando os mesmos mecanismos e permissões que o ssh.

    
por msw 15.11.2010 / 17:11
fonte
1

Isso não é possível com uma sessão ssh padrão, mas você pode usar um script em vez de ssh, que inicia algo como um servidor ftp ou rsh simples em seu sistema local e executa o ssh com as opções necessárias para configurar um encapsulamento na sua área de trabalho para se conectar a este servidor.

    
O
por JanC 15.11.2010 / 18:45
fonte
1

konsole tem essa capacidade por meio do menu "Editar-> ZModem Upload" enquanto você está em uma sessão remota (ou Ctrl-Alt-U).

Por favor, note: pacote lrzsz deve ser instalado primeiro. Para mim, parece que funciona apenas para fazer o upload de arquivos ASCII.

    
por jet 13.09.2015 / 22:58
fonte
1

Se o seu arquivo é pequeno o suficiente, você pode codificá-lo com base64 e decodificá-lo localmente:

remote.example.net$ base64 <myfile
(copy the output)
local.example.net$ base64 -d >myfile
(copy the output)
Ctrl+D

Resposta original onde obtive isso (e testei) de: link

    
por wesalius 20.01.2017 / 20:17
fonte
0

Como você está se conectando de uma área de trabalho, eu acho que você pode abrir um segundo terminal.

É assim que faço frequentemente:

  • do primeiro terminal, aquele em que a sessão ssh está sendo executada, eu obtenho o caminho completo do arquivo que preciso obter, usando realpath myfile ou readlink -f myfile (versões anteriores do Ubuntu não pré-instalam realpath ) e copie-o.
  • do segundo terminal eu uso scp ou sftp para obter o arquivo, colando o caminho completo que obtive antes. Por exemplo: scp user@host:/etc/some/file ./

É bem básico, mas também é fácil de lembrar e não precisa de nenhum pacote extra para funcionar.

    
por gerlos 20.01.2018 / 10:59
fonte

Tags