Существует ли удобный метод для получения по запросу файлов с сервера на сессии SSH?

Я часто 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:

передача файла заканчивается к моей домашней машине.

6
задан 13.02.2011, 16:12

3 ответа

Я предпочел бы использовать синтаксис как интерактивный 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:
    
5
ответ дан 07.12.2019, 15:43

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

> sshfs hostname: mountpoint

и

fusermount -u mountpoint

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

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

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

6
ответ дан 07.12.2019, 15:43

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

Ваши другие опции включают sftp и sshfs как уже отмечено.

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

0
ответ дан 07.12.2019, 15:43

Теги

Похожие вопросы