Если я вошел в систему через SSH на 2 серверах и хочу скопировать некоторые файлы из одного в другой (например, из конфигурации со старого на новый сервер), как проще всего это сделать?
3 ответа
На сервере1:
scp <files> server2:/dest/dir/
Или, если у вас установлен rsync:
rsync -azvu basedir/ server2:destdir/
Если нет, пропустите через tar:
tar cf - -C srcdir | ssh server2 tar xf - -C dstdir
Последние два копируют целые деревья каталогов. Первый один или несколько файлов в каталоге.
Другими словами, просто используйте инструменты оболочки из первого, чтобы скопировать непосредственно во второй.
Если общий размер не слишком велик, можно использовать этот маленький трюк.
- На одном исходном сервере выполните
tar -cz <filestocopy> | base64
- Скопируйте вывод в буфер обмена
- На конечном сервере выполните
base64 -d | tar -xzv
- Вставить, войти, Ctrl-D
Как это работает?
- Создает сжатый tar-файл из файлов, а base64 его кодирует, чтобы его можно было скопировать в виде обычного текста.
- Устанавливает цепочку команд, которая делает обратное; декодирует ввод base64 и извлекает tar.
- Вставьте данные, чтобы передать их в эту цепочку, затем введите и Ctrl-D, чтобы отправить конец файла.
С двумя открытыми сессиями ssh самый быстрый способ копирования будет:
Используйте 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 -
Используйте scp с менее безопасным шифрованием. По умолчанию обычно используется blowfish, но arcfour - гораздо более быстрая альтернатива.
scp -c arcfour mogga@flinflon:/home/users/mogga /dev/null
Я обычно использую второй вариант (просто потому, что помню его чаще).