Поиск по сайту:

Как использовать команду scp в Linux


Команда scp делает копирование файлов между компьютерами Linux простым и безопасным. Он использует безопасность SSH, но лучше всего то, что он прост. Если вы можете использовать cp, вы можете использовать scp.

Протокол безопасного копирования и scp

Давайте определим пару терминов: есть SCP и есть scp. Заглавная буква SCP означает протокол безопасного копирования. scp в нижнем регистре означает безопасный cp. Другими словами, SCP — это протокол, а scp — программа.

scp был разработан, чтобы быть безопасным и надежным средством копирования файлов между удаленными компьютерами Linux. Он использует SSH для установки безопасных соединений. SSH или безопасная оболочка — это криптографический сетевой протокол, который часто используется для доступа и входа на удаленные компьютеры Linux. В дистрибутивах Linux функциональность SSH обеспечивается OpenSSH.

SCP несколько устарел, и высказывались опасения по поводу его использования в наши дни. Начиная с версии OpenSSH 8.8, SCP считается устаревшим. Современные реализации scp по умолчанию используют безопасный протокол передачи файлов. SSH по-прежнему используется для безопасного соединения, но передача файлов осуществляется по SFTP. Все это незаметно и происходит волшебным образом под капотом, а синтаксис scp остался прежним.

Программа rsync предпочтительнее scp , но вы можете столкнуться с компьютером, на котором не установлен rsync и для которого вы не иметь привилегии root, что означает, что вы не можете продолжить и установить его. Для копирования файлов с компьютера на компьютер в автономной сети отлично подходит scp. Чтобы scp работал, у вас должен быть запущен SSH на всех компьютерах, на которые и с которых вы будете копировать.

Чтобы увидеть версию OpenSSH, установленную на вашем компьютере, введите:

ssh -V

Копирование одного файла

Как и стандартная команда cp, scp копирует файлы из исходного в целевое местоположение. Чтобы скопировать файл на удаленный компьютер, вы должны знать IP-адрес или сетевое имя удаленного компьютера. У вас также должны быть учетные данные для учетной записи пользователя, у которой есть права на запись для местоположения, в которое вы отправляете файл.

Чтобы отправить файл с именем «sample.txt» на компьютер с именем «fedora-34» в локальной сети, используйте следующий синтаксис:

scp ./sample.txt dave@fedora-34.local:/home/dave/Downloads/

Команда состоит из:

  • scp: команда scp
  • ./sample.txt: файл, который мы собираемся отправить. Это в текущем каталоге.
  • dave@: учетная запись пользователя на удаленном компьютере, на который мы собираемся отправить файл.
  • fedora-34.local: сетевое имя удаленного компьютера.
  • :/home/dave/Downloads/: расположение для копирования файла на удаленном компьютере. Обратите внимание на двоеточие «:», которое разделяет имя компьютера и путь.

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

Если вы хотите, чтобы файл имел другое имя на удаленном компьютере, вы можете добавить имя файла к целевому пути. Чтобы скопировать тот же файл и назвать его «other-file.txt», используйте этот синтаксис:

scp ./sample.txt dave@fedora-34.local:/home/dave/Downloads/different-file.txt

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

Если целевой компьютер не использует SSH-порт по умолчанию 22, вы можете использовать параметр -P (номер порта), чтобы указать соответствующий номер порта.

Получение одного файла

Чтобы скопировать файл с удаленного сервера, просто укажите удаленный сервер в качестве источника и укажите локальный путь, куда вы хотите скопировать файл, в качестве цели. Мы собираемся скопировать файл под названием «development-plan.md» с удаленного компьютера в текущий каталог на локальном компьютере.

scp dave@fedora-34.local:/home/dave/Downloads/development-plan.md .

Если вы добавите имя файла к локальному пути, файл будет скопирован и получит это имя.

scp dave@fedora-34.local:/home/dave/Downloads/development-plan.md ./dp-1.md

Файл копируется, но переименовывается в указанное нами имя файла.

ls -hl *.md

Копирование нескольких файлов

Копировать несколько файлов в любом направлении очень просто. Вы можете перечислить столько исходных файлов, сколько хотите. Здесь мы копируем два файла уценки и файл CSV.

scp ./dp-1.md ./dp-2.md ./dp-3.csv dave@fedora-34.local:/home/dave/Downloads/

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

scp ./dp. dave@fedora-34.local:/home/dave/Downloads/

Рекурсивное копирование каталогов

Параметр -r (рекурсивный) позволяет копировать целые деревья каталогов с помощью одной команды. Мы поместили два файла в каталог с именем «данные» и создали каталог с именем «CSV» внутри каталога «данные». Мы поместили файл CSV в каталог «data/CSV».

Эта команда копирует файлы и воссоздает структуру каталогов на удаленном компьютере.

scp -r ./data dave@fedora-34.local:/home/dave/Downloads/

Копирование файлов между удаленными серверами

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

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

Более тонким предварительным условием является то, что доступ SSH должен быть настроен между вашим локальным компьютером и исходным компьютером, а также между исходным и целевым серверами. Убедитесь, что вы можете использовать SSH для входа на целевой сервер с исходного сервера. Если вы не можете этого сделать, scp не сможет подключиться.

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

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

Чтобы скопировать файлы из учетной записи пользователя «davem» на компьютере Manjaro в учетную запись «dave» на компьютере с Fedora с помощью команды scp, выданной с нашего локального компьютера с Ubuntu, используется следующий синтаксис:

scp davem@manjaro20-0-1.local:/home/davem/man. dave@fedora-34.local:/home/dave/

Мы молча возвращаемся в командную строку. Нет никаких признаков того, что что-то произошло. Исходя из того, что отсутствие новостей — это хорошая новость, scp сообщает только об ошибках этого удаленного копирования. При проверке компьютера Fedora мы видим, что файлы с компьютера Manjaro были скопированы и получены.

По умолчанию файлы копируются непосредственно с исходного компьютера на целевой компьютер. Вы можете переопределить это с помощью параметра -3 (трехсторонний).

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

scp -3 davem@manjaro20-0-1.local:/home/davem/man. dave@fedora-34.local:/home/dave/

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

Другие варианты

-p (сохранить атрибуты файла) сохранит исходные флаги создания файла, владельца и доступа к переданным файлам. У них будут те же метаданные, что и у исходных файлов на исходном компьютере.

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

Параметр -C (сжатие) сжимает файлы по мере их копирования и распаковывает их при получении. Это то, что восходит к эпохе медленной модемной связи между компьютерами. Уменьшение размера полезной нагрузки может сократить время передачи.

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