1

Если я вошел в систему через SSH на 2 серверах и хочу скопировать некоторые файлы из одного в другой (например, из конфигурации со старого на новый сервер), как проще всего это сделать?

3 ответа3

3

На сервере1:

scp <files> server2:/dest/dir/

Или, если у вас установлен rsync:

rsync -azvu basedir/ server2:destdir/

Если нет, пропустите через tar:

tar cf -  -C srcdir | ssh server2 tar xf - -C dstdir

Последние два копируют целые деревья каталогов. Первый один или несколько файлов в каталоге.

Другими словами, просто используйте инструменты оболочки из первого, чтобы скопировать непосредственно во второй.

2

Если общий размер не слишком велик, можно использовать этот маленький трюк.

  1. На одном исходном сервере выполните tar -cz <filestocopy> | base64
  2. Скопируйте вывод в буфер обмена
  3. На конечном сервере выполните base64 -d | tar -xzv
  4. Вставить, войти, Ctrl-D

Как это работает?

  1. Создает сжатый tar-файл из файлов, а base64 его кодирует, чтобы его можно было скопировать в виде обычного текста.
  2. Устанавливает цепочку команд, которая делает обратное; декодирует ввод base64 и извлекает tar.
  3. Вставьте данные, чтобы передать их в эту цепочку, затем введите и Ctrl-D, чтобы отправить конец файла.
2

С двумя открытыми сессиями ssh самый быстрый способ копирования будет:

  1. Используйте netcat (nc)

    Sender/Source machine:
    tar -czf - /source/dir | nc -l 2342
    
    Receiver/Destination machine:
    nc -w 10 sourcemachine 2342 | tar -C /target/dir -xz -
    
  2. Используйте scp с менее безопасным шифрованием. По умолчанию обычно используется blowfish, но arcfour - гораздо более быстрая альтернатива.

    scp -c arcfour mogga@flinflon:/home/users/mogga /dev/null
    

Я обычно использую второй вариант (просто потому, что помню его чаще).

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