Existe um método conveniente para extrair arquivos de um servidor em uma sessão SSH?

6

Freqüentemente, eu conecto o SSH em um nó de cluster para o trabalho e, depois do processamento, quero puxar vários resultados de volta para minha máquina local para análise. Normalmente, para fazer isso eu uso um shell local para scp do servidor, mas isso requer muita manipulação de caminho. Eu preferiria usar uma sintaxe como FTP interativo e apenas "puxar" arquivos do servidor para o meu pwd local.

Outra possível solução pode ser ter alguma forma de configurar automaticamente meu computador cliente como um alias ssh para que algo como

scp results home:~/results

funcionaria como esperado.

Existe algum truque obscuro de SSH que faça isso por mim?

Trabalhando a partir da resposta de grawity , uma solução completa em arquivos de configuração é algo como

local .ssh / config:

Host ex
    HostName ssh.example.com
    RemoteForward 10101 localhost:22

ssh.example.com .ssh / config:

Host home
    HostName localhost
    Port 10101

que me permite fazer comandos exatamente como

scp results home:

transferindo os resultados do arquivo para minha máquina doméstica.

    
por J. Abrahamson 12.02.2011 / 20:49

3 respostas

5

I'd prefer to use a syntax like interactive FTP and just 'pull' files from the server to my local pwd.

Use sftp .

(Dica: Se você não puder ou não quiser abrir uma nova janela, você pode suspender a conexão SSH pressionando Enter , ~ , Ctrl Z , transfira seus arquivos e reinicie o SSH com fg .)

Another possible solution might be to have some way to automatically set up my client computer as an ssh alias

Existem algumas maneiras.

  • Alias estáticos para ssh e scp - adicione isso ao seu ~/.ssh/config :

    Host home
        # If you don't have a domain name, check out DynDNS...
        # ...or just use your IP address.
        Hostname homepc.somedomain.tld
    
        # If necessary, uncomment:
        #User john
        #Port 1234
    

    Uso:

    scp foo home:
    

    (Se você não fornecer um caminho após : , o arquivo irá para o seu diretório pessoal.)

  • Use a variável de ambiente SSH_CLIENT .

    export client=${SSH_CLIENT%% *}
    if [[ $client == *:* ]]; then
        client="[$client]"
    fi
    

    Coloque em ~/.profile ou ~/.bash_profile ou onde você quiser e, em seguida, use $client quando precisar de seu próprio endereço.

    scp foo "$client:"
    
  • Misture os dois.

    ~/.ssh/config :

    Host client
        ProxyCommand ~/bin/reverse-connect %p
    

    ~/bin/reverse-connect :

    #!/bin/sh
    if [[ $SSH_CLIENT ]]; then
        client=${SSH_CLIENT%% *}
    else
        echo "I don't know your address." >&2
        exit 1
    fi
    if [[ $client == *:* ]]; then
        client="[$client]"
    fi
    
    port=${1:-22}
    
    exec socat - "tcp:$client:$port"
    

    Uso:

    scp foo client:
    
por 12.02.2011 / 21:09
6

Já experimentou o sshfs? É fácil como

> sshfs hostname: mountpoint

e

fusermount -u mountpoint

e, em seguida, você pode usar todos os comandos básicos e básicos de manipulação de arquivos.

link

link

    
por 12.02.2011 / 20:56
0

Você pode usar scp do seu host local. Use um comando como scp server:file . .

Suas outras opções incluem sftp e sshfs como já foi observado.

Para todos eles, eu usaria chaves autorizadas. É mais seguro proteger com senha sua chave. Eu uso o ssh-agent para servir as chaves do ssh conforme necessário. O comando ssh-add solicitará a senha da sua chave e carregará a chave no ssh-agent.

    
por 12.02.2011 / 21:45