Как скопировать файлы с одной машины на другую с помощью ssh

Я использую машину Linux (centos), я уже подключился к другой системе с помощью ssh . Теперь мой вопрос: как мне скопировать файлы из одной системы в другую?

Предположим, в моей среде есть две системы, такие как System A и Система B . Я использую машину Системы A и некоторые другие, использующие машину Системы B .

Как я могу скопировать файл из Система B в Систему A ? И скопируйте файл из Системы A в Систему B код>?


1258

Синтаксис:

  scp   

Чтобы скопировать файл из B в A при входе в B :

  scp/путь/к/файлу имя пользователя @ a:/path/ в/место назначения  

Чтобы скопировать файл из B в A при входе в A :

  имя пользователя scp @ b:/path/to/file/path/to/destination  

Улучшить этот ответ
изменить ed 18 авг., 14:11
HalosGhost
4,25099 золотых знаков2525 серебряных знаков3939 бронзовых знаков
ответил 24 дек. ’13 в 9:48
  • 134
    Чтобы уточнить, вы обычно не используете scp для копирования файла на или с вашего локального компьютера (Система A), когда вы вошли на удаленный сервер (Система B) с помощью ssh . scp зарегистрирует вас на удаленном сервере, скопирует файл, а затем снова выйдет из системы в одном процессе, поэтому просто запустите его из оболочки на вашем локальном компьютере. При этом вы можете использовать scp , если вы вошли в систему B через SSH и хотите копировать файлы между системой B и системой C. — Гаррет Олбрайт, 24 декабря 2013, 16:40
  • 4
    @DopeGhoti. Да, вы не можете перемещать файлы между двумя удаленными компьютерами. Либо источник, либо место назначения должны быть локальным файлом. Однако, если вы входите в систему на удаленном компьютере с помощью ssh, вы можете копировать файлы между двумя удаленными машинами из командной строки этого компьютера. — Джи-Би, 8 августа 2014, 19:48
  • 5
    Также важно помнить, что вы можете использовать scp только в папку на целевом компьютере, для которой у вас есть разрешения.. Если вы пытаетесь скопировать его в место назначения, к которому у целевого пользователя нет разрешения, сначала скопируйте файл в домашний каталог или подкаталог пользователя, а затем ssh на целевой компьютер и sudo переместите его в конечный пункт назначения — shaveenk 25 апр., 20:30
  • 12
    Помните -r (рекурсивный) и -p (сохранить системные метаданные): scp -rp — Rutrus 01 июля 2015 г., 07:23
  • 12
    Да, используйте -P , чтобы указать порт TCP на удаленном хосте. Это улавливает меня каждый раз, потому что ssh использует -p . — DopeGhoti 28 апр. ’16 в 18:22
| показать 17 дополнительных комментариев

Синтаксис:

  scp   

Чтобы скопировать файл из B в A при входе в B :

  scp/path/to/имя пользователя @ a:/path/to/destination  

Чтобы скопировать файл из B в A при входе в A :

  имя пользователя scp @ b:/путь/к/файлу/пути/к/месту назначения  

133

На случай, если вам нужен альтернативный подход.

Установите sshfs. если вы используете ubuntu/debian:

  sudo apt-get install sshfs  

или, если вы используете centos/rhel:

  sudo yum install fuse-sshfs  

или, в macOS

   brew install sshfs  

Создать пустой каталог

  mkdir/home/user/testdir  

«связать» или «смонтировать» два каталога

  sshfs user@server.com:/remote/dir/home/user/testdir  

«отсоединить» каталоги

  fusermount -u/home/user/testdir  

Вкл. BSD и macOS, чтобы отключить файловую систему:

  umount точка монтирования  

или

  diskutil unmount точка монтирования  

Подробнее см. здесь: linuxjournal.com libfuse/sshfs

Улучшите этот ответ
отредактировано 21 ноября ’19 в 21:22
Раки b Fiha 27611 золотых знаков44 серебряных знака2121 бронзовых знака
ответил 24 дек. в 9:58
  • 6
    В вопросе конкретно говорится, что рассматриваемая ОС — это CentOS; не производный от Debian. apt-get — это Debianism; правильным менеджером пакетов будет yum или, для действительно старых версий CentOS, up2date или rpm . — DopeGhoti, 24 дек. ’13, 21:30
  • 39
    +1 ответ на этот вопрос может быть вне контекста, но он все равно помог мне, и, насколько я понимаю, другим тоже. — osirisgothra 23 июля ’14 в 15:27
  • 9
    Не связано, но это ответ на миллион долларов xD — Рами Аль Зухури, 15 мая 2015, 16:55
  • Если я правильно понимаю, это дает ДОСТУП к удаленным файлам, но не копирует их? — ToolmakerSteve, 20 апр. ’16 в 02:46
  • @ToolmakerSteve, вы совершенно правы: он создает фальшивый каталог (mount), так что вы можете использовать все ваши предпочтительные инструменты для копирования или перемещения вещей: cp , mv , rm , rsync , unison Команда scp сможет копировать только файлы. — Иван, 19 окт., В 17:38
| показать 1 дополнительный комментарий

На случай, если вам нужен альтернативный подход.

Установите sshfs. если вы используете ubuntu/debian:

  sudo apt-get install sshfs  

или, если вы используете centos/rhel:

  sudo yum install fuse-sshfs  

или, в macOS

   brew install sshfs  

Создать пустой каталог

  mkdir/home/user/testdir  

«связать» или «смонтировать» два каталога

  sshfs user@server.com:/remote/dir/home/user/testdir  

«отсоединить» каталоги

  fusermount -u/home/user/testdir  

Вкл. BSD и macOS, чтобы отключить файловую систему:

  umount точка монтирования  

или

  diskutil unmount точка монтирования  

Подробнее см. здесь: linuxjournal.com libfuse/sshfs


56

Иногда вам нужно поработать с tar:

  tar -C/ -cf -  opt/widget и т. д./виджет и т. д. /cron.d/widget etc/init.d/widget  --exclude = opt/widget/local.conf |  ssh otherhost tar -C/-xvf -  

Улучшите этот ответ
ответил 24 декабря ’13 в 15:17
  • 16
    Творчество? Вот как мы делили ленточные накопители. 🙂 — Дэн Гартвейт, 08 дек., 15:01
  • 2
    Можете рассказать нам, что это делает? Например, я понятия не имею, какое отношение «cron» имеет к копированию файла! — aliqandil 28 окт., 15:00
  • 2
    @aliqandil opt/widget etc/widget etc/cron.d/widget etc/init.d/widget — это отдельные файлы, которые нужно включить в архив tar. Дело было в том, чтобы проиллюстрировать, почему иногда нужно проявлять фантазию. Эта серия команд передает архив tar через соединение ssh и разархивирует его на другой стороне. Таким образом, tar-архив никогда не записывается на диск. Я иногда использую это, чтобы выбрать файлы для копирования одной командой. — Дэн Гартвейт, 28 окт., В 18:51
  • Ой! Я учил, что первая ‘/’ была исходным путем! (Что это?) Это был глупый вопрос! Благодарю. 🙂 — aliqandil 28 окт. В 21:01
  • 4
    Tar будет chdir на «/», поэтому все следующие пути относятся к «/». — Дэн Гартвейт, 29 окт., 16:27
добавить комментарий |

Иногда вам нужно поработать с tar:

  tar -C/-  cf -  opt/widget etc/widget etc/cron.d/widget etc/init.d/widget  --exclude = opt/widget/local.conf |  ssh otherhost tar -C/-xvf -  

29

Если вы хотите, чтобы файлы в обеих системах синхронизировались, обратите внимание на программу rsync :

(см. руководство здесь)

Улучшите этот ответ
отредактировано 15 окт., В 8:32
Матье Родич
10344 бронзовых знака
ответил 24 декабря 2013 г. в 21:30
  • Это настоящий профессиональный инструмент. — jacouh 22 ноя. ’19 в 10:22
добавить комментарий |

Если вы хотите, чтобы файлы в обеих системах были синхронизированы, взгляните на rsync программа:

(см. руководство здесь)


3

Если у вас одна из распространенных операционных систем, вы можете установить pigz, аналогичный gzip, за исключением того, что он будет использовать несколько ядер и работать быстрее в быстрой сети. Моя команда немного другая.

  tar cf - -C/opt -S  |  свинья |  ssh  "pigz -d | tar xf - -C/opt -S"  

или другой способ получить файлы

  ssh  "tar cf - -C/opt -S  | pigz" |  pigz -d |  tar xf - -C/opt -S  

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

  ssh  "tar cf -  -C/--one-file-system -S --numeric-owner. | Pigz "> root.tgz  

Улучшите этот ответ
ответил 4 августа ’20 в 19:09
  • И вы можете использовать ssh -J для прохождения через прокси-сервер — Пабло А. 18 сен ’20 в 20: 59
добавить комментарий |

Если у вас одна из обычных ОС, вы можете установить pigz, который аналогичен gzip, за исключением того, что он будет использовать несколько ядер и быстрее по быстрой сети. Моя команда немного отличается.

  tar cf - -C/opt -S  |  свинья |  ssh  "pigz -d | tar xf - -C/opt -S"  

или другой способ получить файлы

  ssh  "tar cf - -C/opt -S  | pigz" |  pigz -d |  tar xf - -C/opt -S  

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

  ssh  "tar cf -  -C/--one-file-system -S --numeric-owner. | Pigz "> root.tgz  

1

Более простой метод, который работает с компьютерами NVIDIA Jetson, управляемыми через SSH, — это подключение по SFTP (протокол передачи файлов SSH).

Предположим, я хочу переместить документ UFO_blueprint.odt с удаленных серверов НАСА и переместить его в свои документы.

  1. cd туда, где вы хотите сохранить файл
  $ cd Documents  
  1. Connect
  $ sftp sammy @ your_server_ip_or_remote_hostname  
  1. Перейти в каталог содержащий передаваемый файл.
  $ cd NASA/secret_files/ 
  1. Перенос
  $ получить UFO_bluepri  nt.odt  

Чтобы получить полный каталог, вместо этого используйте

  $ get -r secret_files/ 

Улучшите этот ответ
ответил 1 октября ’20 в 3:53
  • 1
    используйте команду put для загрузки файлов — Lu55, 18 ноября ‘ 20 в 21:45
добавить комментарий |

Более простой способ, который работает с компьютерами NVIDIA Jetson, управляемыми через SSH, — это подключение по SFTP (протокол передачи файлов SSH).

Предположим, я хочу переместить документ UFO_blueprint.odt с удаленных серверов НАСА и переместите его в мои документы.

  1. cd туда, где вы хотите сохранить файл
  $ cd Documents  
  1. Подключить
  $ sftp sammy @ your_server_ip_or_remote_hostname  
  1. Перейдите в каталог, содержащий файл для передачи.
  $ cd NASA/secret_files/ 
  1. Передача
  $ get UFO_blueprint.odt  

Чтобы получить полный каталог, вместо этого используйте

  $ get -r secret_files/ 

1

Рекурсивное копирование файлов и папок в Unix/Linux через защищенную оболочку с использованием следующего кода:

  scp -r   

Полный пример может выглядеть так:

   scp -r sizwe @ hprobook: ./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects

Обратите внимание, если у вас нет DNS-сервера для разрешения имена хостов, используйте вместо этого свой IP-адрес. Пример выше может выглядеть так:

  scp -r 192.168.43.167:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects  

Улучшите этот ответ
отредактировано 9 ноября ’20 в 14:59
AdminBee
10.3k55 золотых знаков2424 серебряных знака3737 бронзовых знаков
ответил 9 ноября ’20 в 11:32
добавить комментарий |

Рекурсивное копирование файлов и папок Unix/Linux через защищенную оболочку с использованием следующего кода:

  scp -r   

Полный пример может выглядеть так:

   scp -r sizwe @ hprobook: ./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects

Обратите внимание, если у вас нет DNS-сервера для разрешения имен хостов, используйте свой IP адрес вместо этого. Пример выше может выглядеть так

  scp -r 192.168.43.167:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects  


Копировать файлы и запускать команды через SSH

Выполните следующие команды:

scp [modifier] [source] [target_directory]


Если удаленный сервер служит исходным или целевым каталогом, выполните следующие команды:

[user] @ [server]: [file_path]


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


Подводя итог, вы можете скопировать локальный файл с именем:/home/user/file.tgz в домашний каталог пользователя root на удаленном сервере 123.123.123.123, выполнив следующую команду:

scp/home/user/file. tgz root@123.123.123.123:/root


Чтобы загрузить тот же файл с удаленного сервера:

scp root@123.123.123.123:/root/file.tgz/home/user


Вы можете скопировать несколько файлов одновременно. Для этого вы должны добавить их в качестве источника. Разделите их пробелом — последний параметр будет считаться целевым каталогом. Например, чтобы загрузить file1 files.tgz и file2.tgz из локального каталога на удаленный сервер, вы должны выполнить команду:

scp file1.tgz file2.tgz root @ 123.123.123.123:/root


Чтобы скопировать каталог, вам нужно будет использовать модификатор команды –r . Скопируйте локальный каталог/home/user/dir на удаленный сервер:

scp-r/home/user/dir root@123.123.123.123:/root


Когда SSH-сервер работает на порту, отличном от порта по умолчанию, нам нужна помощь с параметром -P . Если вам нужно использовать порт 10022:

scp-P 10022/home/user/file.tgz root@123.123.123.123:/root


Чтобы узнать, какие еще модификаторы вы можете использовать, просто выполните scp без параметров и прочтите справку.


При использовании операционной системы Windows и Putty в качестве клиента форматирование команд остается прежним. Однако мы изменим имя исполняемого файла. Нам нужно использовать синтаксис для указания путей к файлам и каталогам Windows при упоминании исходных или целевых каталогов. Запустите командную строку (cmd.exe) или PowerShell, откройте каталог с файлом pscp .exe и введите команду:

pscp.exe C: Tempfile.tgz root @ 123.123.123.123:/root


Если вы запустите его из другой папки, вам нужно будет указать полный путь к pscp.exe . Если какой-либо из путей содержит пробелы, нам нужно использовать двойные кавычки — «путь к файлу»:

«C: Program FilesPuttypscp.exe» C: Tempfile.tgz root@123.123 .123.123:/root


Просто выполните pscp (аналогично scp) без параметров и прочтите справку по модификаторам, а также информацию о синтаксисе команд.


Протокол SSH поддерживает как запуск интерактивных сеансов, так и обычные команды и сценарии на удаленном сервере..


Синтаксис команды:

ssh [пользователь] @ [сервер] '[команда]'


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


Например, мы можно найти информацию об операционной системе, установленной на удаленном сервере:

ssh root@123.123.123.123 'uname -a'


Чтобы запустить несколько команд с помощью одного соединения, вы можете использовать символ «;» символ как разделитель. Проверьте настройки сети и активные сетевые подключения на удаленном сервере:

ssh root@123.123.123.123 ‘ifconfig; netstat -anp tcp ’


Если вам нужно запустить локальный файл сценария на удаленном сервере: запустите интерпретатор команд (в режиме выполнения сценария). Это может быть bash с ключом -s и передача ему файла сценария для стандартного ввода. Взгляните на пример ниже:

ssh root@123.123.123.123 'bash -s' /user/myscript.sh


Локальный файл:/home/user/myscript.sh будет выполнен на удаленном сервере.


Выполнение команды SSH без параметров позволяет увидеть краткую справку по синтаксису и список дополнительных модификаторов, которые позволяют расширить функциональность команды.


Для подключения к удаленному серверу мы будем использовать клиент Putty с его исполняемым файлом plink.exe. File, если наш компьютер поддерживает Windows. Используйте командную строку (cmd.exe) или PowerShell для работы с этим файлом.


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

plink.exe [сервер] - ssh-l [пользователь] «[команда]»


Проверить конфигурацию сетевых интерфейсов :

plink.exe 123.123.123.123 -ssh-l root «ifconfig»


plink.exe позволяет использовать «;» в качестве разделителя для запуска нескольких команд, аналогично команде SSH в Linux:

plink.exe 123.123.123.123 -ssh-l root «ifconfig; netstat-anp tcp ”


Вы можете запускать команды из локального файла, используя дополнительный ключ -m :

plink.exe 123.123.123.123 -ssh-l root-m «C: Tempmyscript.sh»


Автор запустив команду plink.exe без параметров, вы можете найти краткую справку по синтаксису и список дополнительных модификаторов команд.

Оцените статью
logicle.ru
Добавить комментарий