6

Я часто работаю по SSH в узле кластера для работы и после обработки хочу получить несколько результатов обратно на мою локальную машину для анализа. Как правило, для этого я использую локальную оболочку для scp с сервера, но для этого требуется много манипуляций с путями. Я бы предпочел использовать синтаксис, такой как интерактивный FTP, и просто «вытягивать» файлы с сервера на мой локальный pwd.

Другое возможное решение может состоять в том, чтобы иметь какой-то способ автоматически настроить мой клиентский компьютер как псевдоним ssh, чтобы что-то вроде

scp results home:~/results

будет работать как ожидалось.

Есть какой-нибудь неясный трюк с SSH, который сделает это для меня?


Исходя из ответа Grawity , полное решение в конфигурационных файлах выглядит примерно так:

локальный .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:

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

3 ответа3

6

Вы пробовали sshfs? Это просто как

> sshfs hostname: mountpoint

а также

fusermount -u mountpoint

и тогда вы можете использовать все классические и основные команды для работы с файлами.

http://en.wikipedia.org/wiki/SSHFS

http://fuse.sourceforge.net/sshfs.html

5

Я бы предпочел использовать синтаксис, такой как интерактивный FTP, и просто «вытягивать» файлы с сервера на мой локальный pwd.

Используйте sftp .

(Совет: если вы не можете или не хотите открывать новое окно, вы можете приостановить SSH-соединение, нажав Enter, ~, Ctrl Z, перенести ваши файлы и возобновить 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:
    
0

Вы можете использовать scp с вашего локального хоста. Используйте команду, подобную scp server:file . ,

Другие ваши варианты включают sftp и sshfs как уже отмечалось.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .