Чи є зручний спосіб витягувати файли з сервера під час сеансу SSH?


6

Я часто SSH в кластерний вузол для роботи і після обробки хочете витягнути кілька результатів назад до моєї локальної машини для аналізу. Як правило, для цього я використовую локальну оболонку для scp з сервера, але це вимагає великої кількості маніпуляцій. Я б вважав за краще використовувати синтаксис, як інтерактивний FTP, і просто "витягнути" файли з сервера на мій локальний pwd.

Іншим можливим рішенням може бути спосіб автоматичного налаштування клієнтського комп'ютера як псевдоніма ssh, так що щось подібне

scp results home:~/results

буде працювати, як очікувалося.

Чи є якийсь незрозумілий трюк SSH, який зробить це для мене?


Працюючи з відповіді grawity , повне рішення в конфігураційних файлах - це щось подібне

local .ssh / config:

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

ssh.example.com .ssh / config:

Host home
    HostName localhost
    Port 10101

що дозволяє мені робити команди точно так само

scp results home:

передача результатів файлу на домашню машину.

Відповіді:


5

Я б вважав за краще використовувати синтаксис, як інтерактивний FTP, і просто "витягнути" файли з сервера на мій локальний pwd.

Використовуйте sftp.

(Підказка: Якщо ви не можете або не хочете , щоб відкрити нове вікно, ви можете призупинити з'єднання SSH, натиснувши Enter, ~, CtrlZ, передавати файли, і відновити SSH з fg.)

Іншим можливим рішенням може бути спосіб автоматичного налаштування клієнтського комп'ютера як псевдоніма ssh

Є кілька способів.

  • Статичний псевдонім для sshта scp- додайте це до ~/.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
    

    Використовувати:

    scp foo home:
    

    (Якщо ви не вказали шлях після :, файл перейде у ваш домашній каталог.)

  • Використовуйте SSH_CLIENTзмінну середовища.

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

    Помістіть це в ~/.profileабо ~/.bash_profileабо де ви хочете, а потім використовуйте, $clientколи вам потрібна ваша власна адреса.

    scp foo "$client:"
    
  • Змішайте обидва.

    ~/.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"
    

    Використовувати:

    scp foo client:
    

SSH_CLIENT майже ідеальний! Що ж, якщо я за маршрутизатором? Це звичайне явище, оскільки я підключаюся до ноутбука. Я уявляв собі якусь зворотну ssh тунельну схему, але я не знаю, як це зробити.
J. Abrahamson

@tel: Метод 1, перенаправлення портів: Виберіть будь-який порт і перенесіть його до порту 22 / tcp на комп'ютері. Скажіть одному і тому ж порту scpпри копіюванні файлів.
grawity

@tel: Метод 2, "зворотне пересилання" з SSH: ssh -R 2345:localhost:22зробить ваш комп'ютер доступним як localhostпорт 2345з віддаленого сервера.
grawity


0

Ви можете скористатися scpмісцевим хостом. Використовуйте команду, подібну до scp server:file ..

Ваші інші варіанти включають sftpі, sshfsяк уже зазначалося.

Для всіх цих я хотів би використовувати авторизовані ключі. Це більш безпечно, щоб захистити пароль паролем. Я використовую ssh-agent для обслуговування ключів ssh, якщо це необхідно. Команда ssh-add запропонує вам пароль вашого ключа і завантажить ключ у ssh-agent.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.