Перекинуть файл по ssh linux

10 Examples: Copying Files over SSH

SCP (Secure CoPy) – is a remote file copy program, that copies files between hosts on a network.

It uses SSH for data transfer, and uses the same authentication and provides the same security as SSH.

When copying a source file to a target file which already exists, SCP will replace the contents of the target file. If the target file does not yet exist, an empty file with the target file name is created, then filled with the source file contents.

Example 1: Copy the file “file.txt” from a remote host to the local host.

Example 2: Copy the file “file.txt” from the local host to a remote host.

Example 3: Copy the directory “dir1” from the local host to a remote host’s directory “dir2”.

Example 4: Copy the file “file.txt” from remote host “remote.host1” to remote host “remote.host2”.

Example 5: Copy the files “file1.txt” and “file2.txt” from the local host to your home directory on the remote host.

Example 6: Copy the file “file.txt” from the local host to a remote host using port 2222.

Example 7: Copy the file “file.txt” from the local host to a remote host’s home directory. Preserve the modification and access times, as well as the permissions of the source-file in the destination-file.

Example 8: Copy the file “file.txt” from the local host to a remote host’s home directory. Increase SCP speed by changing the cipher from the default AES-128 to Blowfish.

Example 9: Copy the file “file.txt” from the local host to a remote host’s home directory. limit the bandwidth used by SCP command to 100 Kbit/s.

Example 10: Copy multiple files from the remote host to your current directory on the local host.

Источник

Копирование файлов по 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 !

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

Удаленный→Локальный

Теперь наоборот. Скопируем файл с удаленного компьютера в нашу текущую директорию.

Копирование директории

Скопируем с нашего локального компьютера директорию

Читайте также:  Bing wallpaper windows 10 что это

/mydir на удаленный компьютер в директорию /home/pingvin . Используется опция -r .

Копирование со сжатием данных (ускорение)

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

Пример копирования файла myfile.dat с включенным сжатием.

Сохранение атрибутов файла

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

Если в пути есть пробелы

Если путь до удаленного файла/директории содержит пробелы, то при использовании команды scp необходимо этот путь заключить и в одинарные и двойные кавычки:

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

Для получения полной справки по команде scp выполните в терминале:

Источник

Кунг-фу стиля Linux: удобная работа с файлами по SSH

Если у вас имеется больше одного Linux-компьютера, то вы, вероятно, постоянно пользуетесь ssh . Это — отличный инструмент, но мне всегда казалась в нём странной одна деталь. Несмотря на то, что ssh-соединения позволяют передавать файлы с применением scp и sftp , у нас нет возможности перемещать файлы между локальной и удалённой системой, не запуская программу на локальном хосте, или не подключаясь к локальной машине с удалённой.

Последнее — это настоящая проблема, так как к серверам часто подключаются, находясь в это время за файрволом или за NAT-маршрутизатором, то есть, не имея постоянного IP-адреса. В результате сервер, в любом случае, не сможет подключиться к локальной системе, с которой раньше к нему обращались. Если бы в ssh-сессии можно было бы просто взять локальный или удалённый файл и передать его туда, куда нужно, это было бы очень удобно.

Я, на самом деле, не вполне достиг этой цели, но подобрался к её достижению очень близко. В этом материале я расскажу вам о скрипте, который позволяет монтировать удалённые директории на локальном компьютере. На локальной машине надо будет установить sshfs , но на удалённой, на которую вы, возможно, не можете устанавливать программы, ничего менять не придётся. Если же потратить на настройку систем некоторое время, и если на клиентском компьютере имеется работающий ssh-сервер, то можно будет ещё и монтировать локальные директории на удалённых системах. При этом не придётся беспокоиться о блокировке IP-адресов или портов. Фактически, если вы способны подключиться к удалённой машине, это означает, что вам удастся и то, о чём я хочу рассказать.

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

Нет ли тут подвоха?

Возможно, вы решите, что тут кроется какой-то подвох. Ведь речь, фактически, идёт об использовании двух ssh-соединений. Одно применяется для монтирования файловой системы, а другое — для входа на компьютер. И это, на самом деле, так и есть. Но если правильно настроить ssh , то аутентификацию нужно будет выполнять лишь один раз, не тратя слишком много времени на организацию двух подключений.

Кроме того, работу значительно облегчает скрипт, о котором я расскажу. Он скрывает от пользователя детали, поэтому процедура подключения выглядит (почти) как обычно, а после этого всё работает как надо.

Пара слов о sshfs

Утилита sshfs даёт возможность работать с файловой системой в пользовательском пространстве (filesystem in userspace, FUSE). То есть, речь идёт о том, что в пользовательском пространстве имеется слой, находящийся поверх базовой файловой системы. В данном случае такой файловой системой является ssh-сервер, поддерживающий sftp . Это позволяет работать с файлами, находящимися на удалённой системе, воспринимая их так, будто они находятся в реальной файловой системе на локальном компьютере. Если вы ещё не пробовали sshfs — попробуйте. Работает эта утилита очень хорошо.

Читайте также:  Заблокировать защитника windows 10

Предположим, вы вошли на компьютер myserver и выполнили с локальной машины следующую команду:

Это приведёт к тому, что директория удалённого компьютера /home/admin будет доступна в локальной системе по пути

При использовании sshfs можно пользоваться различными опциями. Например, можно сделать так, чтобы после потери соединения осуществлялось бы повторное подключение. Подробности о sshfs ищите в справке.

Так как sshfs использует удалённо смонтированную версию файла, то все изменения, внесённые в файл, сохраняются на удалённой машине. А после того, как sshfs-соединение закрывают, на локальной компьютере ничего не остаётся. Сейчас мы это исправим.

Предварительная подготовка

/remote , а в ней создаю поддиректории для каждого удалённого компьютера. Например — это могут быть директории

Скрипт называется sshmount . Он принимает те же аргументы, что и ssh . Для упрощения работы со скриптом сведения об удалённом хосте стоит хранить в файле

/.ssh/config , что позволит пользоваться простыми и короткими именами хостов. Например, сведения о компьютере lab могут выглядеть так:

На самом деле, острой необходимости в этом нет, но при таком подходе в вашем распоряжении будет приятно выглядящая директория

/remote/lab , а не сложная конструкция вида

/remote/alw@lab.wd5gnr-dyn.net:444 . Во всех этих параметрах нет ничего таинственного. Единственно, хочу обратить ваше внимание на то, что ControlMaster и ControlPath позволяют организовать более быструю работу с соединениями, что, в нашем случае, очень важно.

Кроме того, можно организовать автоматическое подключение к удалённой системе с использованием приватных ssh-ключей. Вот материал об этом.

Скрипт

Наш скрипт можно использовать двумя способами. Так, если его вызывают через ссылку к sshunmount , то он размонтирует файловую систему, связанную с указанным удалённым хостом. Если его вызывают иначе (обычно — как sshmount ), то он выполняет следующие три действия:

    Он проверяет, есть ли в директории

/remote поддиректория, имя которой совпадает с именем хоста (например — lab ). Если такой директории нет — он выводит сообщение об ошибке и продолжает работу.

  • Если такая директория существует — скрипт просматривает список смонтированных файловых систем на тот случай, если нужная файловая система уже смонтирована. Если это так — он продолжает работу.
  • Если директория не смонтирована — он вызывает sshfs и продолжает работу.
  • Этот скрипт можно найти на GitHub. А вот его код, из которого убраны некоторые комментарии:

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

    Решаем обратную задачу

    Если вы хотите поэкспериментировать с монтированием на сервере папок, находящихся на локальной машине, то нужно будет, чтобы на локальной машине работал бы ssh-сервер. Конечно, если ваш локальный компьютер видим и доступен серверу, то это просто: достаточно запустить на удалённом компьютере sshfs и смонтировать на нём папку с локального компьютера. Но во многих случаях у нас нет доступа к локальной системе, которая может быть расположена за файрволами или маршрутизаторами. Особенно это актуально в том случае, если роль локальной системы выполняет ноутбук, который может подключаться к сети из разных мест.

    Но нашу задачу, несмотря на все эти сложности, всё же, можно решить. Её решение состоит из двух частей.

    Во-первых — надо, при вызове sshmount , указать дополнительный аргумент (файл можно отредактировать в том случае, если вам нужно будет постоянно выполнять подобную команду):

    Во-вторых — после подключения к хосту нужно выполнить такую команду:

    Благодаря опции -R на удалённой машине создаётся сокет на порте 5555 (который, естественно, должен быть свободным) и осуществляется его связь с портом 22 локальной машины. Если исходить из предположения о том, что ssh-сервер работает на порте 22 , то это позволит серверу подключиться к локальной машине по тому же соединению. Ему не нужно знать наш IP-адрес или иметь открытый порт.

    Команда sshfs , которую можно выполнять при запуске системы, связывает локальную директорию /home/me с директорией

    Читайте также:  Курсоры для мыши windows 10 overwatch

    /local удалённого сервера. Если, вдобавок, войти в систему локально, то можно будет взглянуть на переменные окружения, имена которых начинаются с SSH_ , и узнать подробности о SSH-соединении. Например, это переменные $SSH_CLIENT и $SSH_TTY .

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

    Итоги

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

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

    Чем вы пользуетесь для работы с файлами удалённых Linux-систем?

    Источник

    Копирование файлов через SSH

    В статье мы расскажем, как копировать файлы в Windows и Linux-системах, и покажем основные команды, с помощью которых происходит передача файлов по SSH.

    Для копирования файлов по SSH в Linux-системах и Windows используют разные инструменты:

    • scp (Secure CoPy) — утилита для безопасного копирования данных между Linux-системами по протоколу SSH. Она входит в состав OpenSSH, поэтому для работы с утилитой не нужно устанавливать дополнительное ПО;
    • pscp.exe — утилита для загрузки файлов по SSH в ОС Windows. Она обладает теми же возможностями, что и scp. Утилита входит в состав программы Putty — SSH-клиента для Windows. Скачать программу можно по ссылке.

    Копирование файлов по SSH на Linux

    Для Linux копирование файлов по SSH происходит с использованием команды scp. С её помощью можно копировать файлы:

    • с локального компьютера на удалённый сервер,
    • с удалённого сервера на локальный компьютер.

    Общий вид команды:

    scp [опция] [источник] [получатель]

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

    Как загрузить файл на сервер по SSH? Для этого используйте команду вида:

    scp [путь к файлу] [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу]

    scp /home/test.txt root@123.123.123.123:/directory

    Файл test.txt будет скопирован на хост 123.123.123.123 в директорию «/directory».

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

    При подключённом SSH скачать файл на локальный компьютер с удалённого сервера можно с помощью команды:

    scp [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу] [путь к файлу]

    scp root@123.123.123.123:/home/test.txt /directory

    Файл test.txt будет загружен с сервера 123.123.123.123 на локальный компьютер в папку «/directory».

    Как скачать папку со всеми файлами и подпапками

    Если вы хотите скачать папку со всеми файлами и подпапками, используйте ключ -r:

    scp -r [источник] [получатель]

    Как подключиться к серверу по нестандартному порту

    Бывает, что для подключения по SSH нужно указать нестандартный порт. Без указания порта команда подключается к серверу по стандартному 22 порту. Чтобы указать нестандартный порт, введите команду с ключём -P:

    scp -P [источник] [получатель]

    scp -P 12345 /home/test.txt root@123.123.123.123:/directory

    Эта команда подключается по порту 12345 к серверу 123.123.123.123 и копирует на него файл «test.txt» с локального компьютера в директорию «/directory».

    Как передать и скачать файлы по SSH на Windows

    Скопировать файл по SSH на сервер можно командой:

    pscp [путь к файлу] [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу]

    Скачать файл по SSH с сервера командой:

    pscp [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу] [путь к файлу]

    Увидеть список папок и файлов на сервере можно через pscp.exe. Для этого введите:

    pscp -ls [имя пользователя]@[имя сервера/ip-адрес]:[путь]

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

    pscp “C:\files or docs\file name” root@123.123.123.123:/home

    Источник

    Оцените статью