Лучший способ обработки частой передачи файлов с удаленного хоста на локальный ПК

Вопрос или проблема

Я часто подключаюсь к удаленному серверу через ssh и мне нужно передавать файлы между этим удаленным хостом и моим локальным ПК. У меня нет прав администратора на этом сервере, и я не единственный, кто им пользуется. Полные пути к файлам на хосте могут значительно различаться от файла к файлу и обычно довольно длинные. Однако я обычно сначала передаю файлы в одну и ту же локальную папку. У меня настроено подключение ssh без пароля с моего локального устройства на удаленный хост.
Мой текущий «рабочий процесс» для этой небольшой операции использует scp и кажется мне очень неэффективным:

  • Обычно я уже подключен по ssh в расположении соответствующего файла на удаленном хосте: я использую readlink -f, чтобы получить полный путь к файлу
  • Я копирую путь (расставаясь с клавиатурой для клика)
  • Я переключаюсь на другой терминал на своем локальном компьютере и начинаю вводить scp hostname:
  • Я вставляю путь к файлу (еще один клик)
  • Я завершаю команду scp названием локального каталога и выполняю ее

Когда мне необходимо делать это множество раз для множества файлов, которые не обязательно легко включить все сразу в одну команду, это действительно не кажется эффективным. Слишком много шагов, слишком много повторяющегося ввода и кликов.

В идеале мне бы хотелось иметь волшебную команду ‘scp2local_folder filename’, которую я мог бы использовать с удаленного хоста, чтобы выполнить все эти шаги сразу, но я не уверен, как это настроить. Все, что связано с полным подключением ssh без пароля с удаленного устройства на мой локальный ПК, кажется действительно плохой идеей, поскольку все остальные, кто использует сервер, могли бы подключиться к моему личному устройству. (Но, возможно, есть способ сделать это, используя тот факт, что я просто «отправляю обратно» файлы на устройство, с которого я конкретно подключаюсь?)

Вкратце: Какой самый эффективный способ (с точки зрения человеческих усилий) регулярно передавать несколько файлов с удаленного хоста в определенную папку локального компьютера, с которого я подключаюсь?

NB: Я использую WSL на своем локальном устройстве, что может быть актуально для всей этой «копирования и вставки».

Ответ или решение

Для эффективной передачи файлов с удаленного хоста на локальный ПК, исходя из вашего сценария, предлагаю несколько решений, которые значительно упростят и ускорят процесс, не нарушая при этом безопасность.

1. Использование scp с однопараметрической командой

Создайте оболочку для упрощения команды scp. Вы можете создать сценарий оболочки, который будет принимать имя файла и автоматически использовать команду scp с правильными параметрами.

Пример скрипта scp2local.sh:

#!/bin/bash

# Путь к локальной папке, куда вы хотите сохранять файлы
LOCAL_DIR="/path/to/local/folder"

# Проверка на наличие аргумента
if [ -z "$1" ]; then
    echo "Использование: scp2local.sh <имя_файла>"
    exit 1
fi

# Получение абсолютного пути к файлу и выполнение команды scp
FILE_PATH=$(readlink -f "$1")
scp -P 22 username@hostname:"$FILE_PATH" "$LOCAL_DIR"

Не забудьте сделать скрипт исполняемым:

chmod +x scp2local.sh

Теперь вы можете просто запускать ./scp2local.sh путь/к/файлу из SSH сессии.

2. Использование rsync для более эффективной передачи

Если у вас есть возможность использовать rsync, это может быть более эффективно, особенно если вы передаете одно и то же количество файлов и хотите избежать повторной передачи:

rsync -avz username@hostname:path/to/remote/file /path/to/local/folder

3. Монтирование удаленной файловой системы

Если вы чаще работаете с файлами удаленного хоста, можно рассмотреть монтирование удаленной файловой системы с использованием SSHFS. Это позволит вам взаимодействовать с файлами на удаленном сервере напрямую, как будто они находятся на вашем локальном диске:

sudo apt-get install sshfs
mkdir ~/remote-folder
sshfs username@hostname:/path/to/remote/folder ~/remote-folder

После этого вы сможете легко копировать файлы в ~/remote-folder без необходимости постоянно переключаться между экранами.

4. Создание alias для часто используемых команд

Добавьте alias в ваш файл ~/.bashrc (или ~/.bash_aliases), чтобы упростить часто используемые команды:

alias scp2local='scp username@hostname:'

После этого просто используйте:

scp2local /путь/к/файлу /путь/к/локальной/папке

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...