- Копирование файлов по ssh. Команда scp
- Синтаксис команды scp
- Копирование локального файла
- Локальный→Удаленный
- Указываем порт
- Копирование файла с удаленного компьютера на локальный
- Удаленный→Локальный
- Копирование директории
- Копирование со сжатием данных (ускорение)
- Сохранение атрибутов файла
- Если в пути есть пробелы
- Как я могу скопировать несколько файлов через scp в одной команде?
- 6 ответов 6
- Scp или sftp копировать несколько файлов с помощью одной команды
- Linux: 12 примеров использования SCP для передачи файлов
- Копирование файлов scp
- Что такое SCP?
- Копирование файлов scp
- Выводы
Копирование файлов по ssh. Команда scp
Для копирования файлов по ssh между компьютерами под управлением Linux применяется команда scp . Рассмотрим, как можно копировать файлы с одного компьютера на другой по ssh, используя команду scp .
Синтаксис команды scp
Синтаксис команды scp следующий:
Команда scp принимает на вход различные опции (см. примеры ниже), а также файл или директорию, которую необходимо скопировать (аргумент что_копируем ). Последним аргументом указывается путь назначения, в который будет произведено копирование (аргумент куда_копируем ).
Аргументы что_копируем и куда_копируем могут быть, как локальными путями, так и удаленными. То есть можно копировать файлы с удаленного компьютера на локальный и наоборот. Можно копировать файлы с удаленного компьютера на другой удаленный компьютер.
что_копируем и куда_копируем имеют следующий синтаксис:
имя_пользователя — это имя пользователя для подключения по ssh.
IP_адрес — IP адрес компьютера (хоста) на который или с которого будет копирование.
Копирование локального файла
Локальный→Удаленный
Рассмотрим простой пример. Скопируем по ssh локальный файл myfile.dat на компьютер с IP адресом 192.168.1.74 в директорию /home/pingvin .
Указываем порт
Выполним тоже самое, но укажем еще и порт для подключения по ssh (используем опцию -P ). Обратите внимание, что опция для указания порта это прописная буква P !
Копирование файла с удаленного компьютера на локальный
Удаленный→Локальный
Теперь наоборот. Скопируем файл с удаленного компьютера в нашу текущую директорию.
Копирование директории
Скопируем с нашего локального компьютера директорию
/mydir на удаленный компьютер в директорию /home/pingvin . Используется опция -r .
Копирование со сжатием данных (ускорение)
Скорость копирования файлов можно увеличить. Для этого используется опция -C . Данная опция выполняет сжатие файлов при копировании, таким образом по сети передается меньшее количество данных. Сжатие выполняется только при передаче данных, то есть результирующий файл будет в первоначальном виде.
Пример копирования файла myfile.dat с включенным сжатием.
Сохранение атрибутов файла
Чтобы результирующий файл получил те же атрибуты что и исходный файл, используется опция -p (не путать с опцией -P для указания порта). При использовании опции -p сохраняются права доступа к файлу, владелец файла, временные метки и так далее.
Если в пути есть пробелы
Если путь до удаленного файла/директории содержит пробелы, то при использовании команды scp необходимо этот путь заключить и в одинарные и двойные кавычки:
Это связано с тем, что одни кавычки используются при разборе пути на локальной стороне, а вторые на удаленной.
Для получения полной справки по команде scp выполните в терминале:
Источник
Как я могу скопировать несколько файлов через scp в одной команде?
Я должен перенести много файлов с одного компьютера на другой (оба Linux). Я хотел бы использовать для этого scp , но scp позволяет передавать только один файл за раз.
Как я могу это сделать?
- Нет возможности использовать rsync или любой другой протокол
- Нет возможности использовать сертификаты без парольной фразы (но есть сертификат с парольной фразой)
- Список файлов для передачи и список с путем назначения файлов на другом сервере
- Файлы распределены по многим каталогам, и не все файлы в каталогах, которые я хочу скопировать
Если возможно, я бы хотел прозрачно распаковать и распаковать, чтобы сэкономить пропускную способность!
6 ответов 6
Я хотел бы использовать для этого scp, но scp позволяет передавать только один файл за раз.
Я почти уверен, что это не так, по крайней мере, для команды scp предоставляемой OpenSSH, включенной в большинство дистрибутивов Linux.
Я использую scp file1 file2 . fileN user@host:/destination/directory/ довольно часто.
Для прозрачного сжатия это встроено в протокол SSH, и scp может использовать его, если вы укажете опцию -C в командной строке. Для множества похожих небольших файлов вы найдете вариант tar+gz, предложенный akira, улучшающий сжатие, поскольку он может использовать сходство между такими файлами, где scp сжимает каждый файл как отдельный объект. Обычно я предпочитаю использовать scp, так как проще возобновить частичную передачу (или, хотя я знаю, что в этой ситуации у спрашивающего нет возможности) rsync как это еще проще возобновить, и совместно использует опцию tar+gz преимущество сжатия всего потока.
Источник
Scp или sftp копировать несколько файлов с помощью одной команды
Я хотел бы скопировать файлы с/на удаленный сервер в разных каталогах.
Например, я хочу запустить эти 4 команды сразу.
Каков самый простой способ сделать это?
Скопируйте несколько файлов с удаленного на локальный:
Скопировать несколько файлов с локального на удаленный:
Скопируйте несколько файлов с удаленного на удаленный:
С локального на сервер:
scp file1.txt file2.sh username@ip.of.server.copyto:
С сервера на локальный:
scp -T username@ip.of.server.copyfrom:»file1.txt file2.txt» «
Вы можете скопировать целые каталоги с помощью -r , поэтому, если вы можете изолировать свои файлы в свой собственный каталог, вы можете скопировать все сразу.
Или, если их немного, вы можете использовать:
Как упоминал Джири, вы можете использовать scp -r user@host:/some/remote/path /some/local/path для рекурсивного копирования файлов. Это предполагает, что существует один каталог, содержащий все файлы, которые вы хотите перенести (и ничего больше).
Однако SFTP предоставляет альтернативу, если вы хотите передавать файлы из нескольких разных каталогов, а адресаты не идентичны:
Для определения последовательности входных команд SFTP используется “here doc” . В качестве альтернативы вы можете поместить команды SFTP в текстовый файл и выполнить sftp user@host -b batchFile.txt
Ответы с
Самый простой способ –
Так что список <..>может включать в себя каталоги (A, B и C здесь – каталоги, “1.txt” и “2.txt” – это имена файлов в этих каталогах).
Хотя он скопировал бы все эти четыре файла в один локальный каталог – не уверен, что это вам нужно.
В приведенном выше случае вы получите удаленные файлы A/1.txt, A/2.txt, B/3.txt и C/4.txt, скопированные в один локальный каталог с именами файлов. /1.txt,./2.txt,./3.txt и./4.txt
Скопировать несколько каталогов:
Проблема: Копирование нескольких каталогов с удаленного сервера на локальный компьютер с помощью одной команды SCP и сохранение каждого каталога, как он есть на удаленном сервере.
Решение: SCP может сделать это легко. Это решает надоедливую проблему ввода пароля несколько раз при использовании SCP с несколькими папками. Следовательно, это также экономит много времени!
Судя по комментариям, это также хорошо работает в Git Bash на Windows
Поработав некоторое время с scp, я нашел самое надежное решение:
(Остерегайтесь одинарных и двойных кавычек)
От локального к удаленному:
Удаленный к местному:
Обратите внимание, что все, что после “HOST:” будет отправлено на удаленный компьютер и проанализировано там. Поэтому мы должны убедиться, что они не обрабатываются локальной оболочкой. Вот почему вводятся одинарные кавычки. Двойные кавычки используются для обработки пробелов в именах файлов.
Если все файлы находятся в одном каталоге, мы можем использовать *, чтобы сопоставить их все, например:
По сравнению с использованием синтаксиса “<>”, который поддерживается только некоторыми оболочками, этот универсальный
ПРИМЕЧАНИЕ. Я заранее извиняюсь за ответ только за часть вышеуказанного вопроса. Тем не менее, я нашел эти команды полезными для моих текущих потребностей unix.
Загрузка определенных файлов с локального компьютера на удаленный компьютер:
/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp etc.ext your-user-id@remotemachine.edu:Folder1/DestinationFolderForFiles/
Загрузка всего каталога с локальной машины на удаленную машину:
$ scp -r Desktop/dump_files your-user-id@remotemachine.edu:Folder1/DestinationFolderForFiles/
Загрузка всего каталога с удаленного компьютера на локальный компьютер:
/Desktop$ scp -r your-user-id@remote.host.edu:Public/web/ Desktop/
ваша команда работает отлично, но я также хочу изменить имя файла при отправке локального на удаленный. Я написал команду: –
sshpass -p пароль scp/path/to/file.txt root @hostname:/path/newfile.txt
Но это дает ошибку,
/path/newfile.txt: такого файла или каталога не найдено
PLZ помочь мне в этой ситуации
В моем случае я ограничен только использованием команды sftp.
Итак, мне пришлось использовать пакетный файл с sftp. Я создал script, например следующее. Предполагается, что вы работаете в каталоге /tmp, и вы хотите поместить файлы в систему destdir_on_remote_system на удаленной системе. Это также работает только с неинтерактивным входом. Вам нужно настроить общедоступные/закрытые ключи, чтобы вы могли войти без ввода пароля. При необходимости измените.
В конкретном случае, когда все файлы имеют одинаковое расширение, но с разным суффиксом (скажем, номером файла журнала), вы используете следующее:
Это скопирует все файлы с именем some_log_file из заданной папки на удаленном компьютере, то есть – some_log_file.1, some_log_file.2, some_log_file.3….
scp использует ssh для передачи данных с той же аутентификацией и обеспечивает ту же безопасность, что и ssh.
Наилучшей практикой здесь является внедрение “SSH KEYS И PUBLIC KEY AUTHENTICATION”. Благодаря этому вы можете писать свои сценарии, не беспокоясь об аутентификации. Просто как тот.
Источник
Linux: 12 примеров использования SCP для передачи файлов
SCP — это инструмент командного интерпретатора для копирования и передачи файлов между хостами, использующий в качестве транспорта SSH. Утилита удаленного копирования scp входит в состав пакета openssh. По умолчанию, утилита scp предустановлена практически в любом Linux дистрибутиве. В дистрибутивах ubuntu/debian, scp являются частью пакета openssh-client.
Базовый синтаксис достаточно простой:
В зависимости от хоста, путь должен включать полный адрес, порт, имя пользователя, пароль и полный путь до директории. Если вы посылайте файл с вашей локального компьютера на удаленный, то синтаксис будет выглядеть так:
Если вы хотите скопировать файл с удаленной машины на свой ПК, используйте такой синтаксис:
По умолчанию, scp всегда будет перезаписать существующие файлы.
01. Подробный вывод о копировании
Подробный вывод выводит полную информацию о копировании, которая может полезна для анализа каких-либо ошибок запроса.
02. Передача нескольких файлов
03. Копирования текущей директории (рекурсивно)
04. Копирование файла с одного удаленного хоста на другой удаленный хост
05. Ускорить передачу с компрессией
06. Ограничение скорости передачи
07. Подключение к другому порту (2222) удаленного хоста
08. Копирование с сохранением атрибутов файла
09. Копирование в режиме Quiet mode
10. Копирование с указанием удостоверяющего файла
11. Копирование с указанием другого ssh_config файла
12. Копирование с использованием измененного шифрования
Источник
Копирование файлов scp
Если у вас есть домашний сервер или сервер в интернете, то вам понадобится способ для безопасного перемещения файлов между машинами. Между локальными машинами мы могли бы просто переносить данные с помощью флешки, но на удаленный сервер нужно передавать данные только через сеть. Есть много способов реализации этой задачи.
В этой статье мы рассмотрим как выполняется копирование файлов с помощью утилиты scp (Secure Copy Command), а также что из себя представляет команда Linux scp. При передаче файлы шифруются, так что больше никто не сможет получить к ним доступ и самое интересное, что вам не нужно настраивать FTP или другое дополнительное программное обеспечение. Будет достаточно сервера SSH.
Что такое SCP?
Команда scp — это утилита, которая работает по протоколу SSH, а значит, все что вам нужно для передачи файла на компьютер, это чтобы на нем был запущен SSH сервер, а также вы должны знать логин и пароль для подключения к нему. С помощью команды scp вы можете не только перемещать файлы между локальной и удаленной системой, но и между двумя удаленными системами. Для этого тоже будет достаточно знать пароли от них. И в отличие от Rsync вам не нужно авторизоваться на одном из серверов.
Копирование файлов scp
Эта статья рассчитана в первую очередь на начинающих, поэтому я попытаюсь объяснять все как можно подробнее. Перед тем, как мы перейдем к практике, нужно рассмотреть общий синтаксис команды:
$ scp опции пользователь1@хост1 : файл пользователь2@хост2: файл
Опции утилиты больше касаются протокола SSH и настраивают общее ее поведение. Дальше следует адрес первого и второго файла. Каждый из них может быть расположен как на локальной, так и на удаленной машине. А теперь рассмотрим основные опции, которые могут нам понадобиться:
- -1 — использовать протокол SSH1;
- -2 — использовать протокол SSH2;
- -B — пакетный режим для передачи нескольких файлов;
- -C — включить сжатие;
- — l — установить ограничение скорости в кбит/сек;
- -o — задать нужную опцию SSH;
- -p — сохранять время модификации;
- -r — рекурсивное копирование директорий;
- -v — более подробный режим.
scp /home/sergiy/file root@losst.ru:/root/
В качестве пользователя нужно использовать любого пользователя, который есть на сервере. Вместо IP вы можете также домен сервера. Только необходимо, чтобы у выбранного пользователя были права записи в указанную папку.
С помощью опции -r вы можете скопировать на удаленную машину целый каталог. Команда будет выглядеть вот так:
scp -r /home/sergiy/photos root@losst.ru:/root/
Убедитесь, что у исходного каталога нет косой черты, а у каталога назначения она должна обязательно быть. Немного изменив синтаксис с косой чертой можно передать все файлы из каталога на удаленный сервер:
scp -r /home/sergiy/photos/* root@losst.ru:/root/
Если поменять местами локальный путь и сервер, то вы сможете копировать файлы scp c удаленного сервера на локальный компьютер:
scp root@losst.ru:/root/file /home/sergiy/
Таким же самым образом вы можете копирование файлов scp или папок с сервера:
scp -r root@losst.ru:/root/photos /home/sergiy/
Обратите внимание, что папка, в которую вы собираетесь копировать должна завершаться косой чертой, иначе папка, которую вы копируете запишется вместо той, в которую нужно скопировать.
Чтобы скачать файл scp из одного сервера на другой, просто необходимо указать данные аутентификации на каждом из них. Например, скопируем один файл:
scp root@losst.ru:/home/root/index.html root@losst.ru:/home/root/www/
Скопируем папку с того же удаленного сервера:
scp root@losst.ru:/root/photos root@losst.ru:/home/root/www/
Выводы
В этой статье мы рассмотрели как выполняется передача файлов scp, как это работает и что вы можете сделать с помощью этой утилиты. Как вы видите, перемещать файлы с одного сервера на другой очень просто. В Linux достаточно понять основы чтобы начать работать эффективнее! А команда scp один из таких инструментов.
Источник