Однажды пришлось перенести большой файл с сервера на сервер. Решил делать как всегда: сначала скачать себе через sftp, затем закачать на нужный сервер. Но быстро понял, что потеряю много времени. И озадачился поиском способа скачивания файла напрямую с одного сервера на другой.
Для скачивания файла через ssh необходимо воспользоваться утилитой scp. Команда будет выглядеть так:
scp FileName user@ip:/folder_from/ /folder_to/
Вместо FileName надо поставить название файла, который будет скопирован. Можно вместо FileName поставить ключ "-r" тогда будут скопированы все файлы из папки.
Замените user на имя пользователя, через которого будете входить по ssh. Вместо ip поставьте нужный адрес сервера.
/folder_from/ - папка на удалённом сервере, где лежит файл. Если задан ключ "-r" вместо FileName, то будет скопированы все файлы из папки.
Зачастую я использую такие ключи:
scp -rC user@ip:/folder_from/ /folder_to/
Здесь ключи -r скачивание всех файлов, -С - компрессия (ускоряет передачу некоторых типов файлов).
/folder_to/ - папка на компьютере, с которого выполняется команда. Сюда будет сохранён файл(ы) с удалённого сервера.
Скачиваем без посредников
Обратите внимание на формулировку "/folder_to/ - папка на компьютере, с которого выполняется команда". Можно запустить утилиту на удалённом сервере через ssh и скачать на него файл с другого удалённого сервера.
Для передачи файла с сервера на сервер не надо копировать файл себе на компьютер, а затем отправлять на удалённый сервер. Можно зайти на сервер по ssh и вызвать утилиту скачивания файла с другого удалённого сервера.
Чтобы ограничить скорость загрузки используйте ключ -l и через пробел значение в килобитах в секунду:
scp -l 30000 -r user@ip:/folder_from/ /folder_to/
* 30 000 приблизительно равно 3.7 мегабайт в секунду.
Значение после -l, вроде бы, должно указываться в килобитах/секунду. По факту не всегда так. И надо подбирать экспериментально.