Как загрузить файл на сервер по ssh

Обновлено: 07.07.2024

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

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

В Linux для копирования данных по протоколу SSH используется утилита scp (Secure CoPy). Она входит в состав OpenSSH, поэтому для работы с утилитой устанавливать дополнительное ПО не нужно.

В Windows для загрузки файлов по SSH используется утилита pscp.exe. Её функционал схож с scp. Утилита входит в состав программы Putty (SSH-клиент для Windows). Putty не входит в стандартный набор Windows-программ, поэтому её нужно будет скачать с официального сайта.

Обратите внимание! Если файл, который вы хотите скопировать, уже существует на целевом хосте, при копировании он будет перезаписан.

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

Как скачать файл с сервера через SSH? На Linux копирование файлов по SSH делается с помощью команды scp. Команда может копировать файлы как с локального компьютера на удалённый сервер, так и с удалённого сервера на локальный компьютер.

Обратите внимание! Для подключения к удалённому серверу вам понадобится логин и пароль.

В общем виде команда выглядит так:

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

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

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

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

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

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

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

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

При необходимости можно скачать папку со всеми файлами и подпапками, для этого используйте ключ -r:

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

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

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

Для копирования файлов по SSH в Linux-системах и 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-адрес]:[путь к файлу]

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

Для удаленной работы с серверами Linux, FreeBSD, *BSD удобно пользоватся программой Putty.

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

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

Программу Putty также можно использовать и для подключения к устройствам используя последовательный порт, например настроить 3G модем Huawei через Putty.
Скачиваем программу Putty и PSCP на странице: ]]> скачать Putty и PSCP с официального сайта ]]>

При открытии выше приведенной ссылки в браузере, Вам откроется окно:

Открываем официальный сайт и скачиваем программы Putty и Pscp

На скриншоте выше обведено две ссылки которые нужно скачать на диск С:\ в папку putty, которую необходимо предварительно создать. Туда скачиваем две программы putty.exe и pscp.exe. На приведенном ниже скриншоте Вы можете видеть скачанные на моем компьютере программы в папке putty на диске C:\

Скачиваем программы Putty и Pscp на диск С в папку putty

Запускаем файл программы putty.exe нажав дважды на файле мышкой, откроется окно, в котором я добавляю сервер Linux который находится в моей сети и имеет айпи адрес 192.168.2.1 со стандартным портом SSH - 22, итого:

  • Host Name: 192.168.2.1
  • Port: 22
  • Saved Session: 192.168.2.1 (тут можно написать любое имя, например сервер Васи Пупкина)

Окно программы Putty - добавляем server Linux

Изменяем кодировку текущего сервера на UTF-8

После изменения кодировки переходим в главное окно Session и проверив, что у Вас заполнено поле Saved Session нажимаем кнопку Save. Теперь у Вас в главном окне появилась новая запись 192.168.2.1 (либо сервер Васи Пупкина). После закрытия программы Putty у Вас добавленная запись останется и для подключения к удаленному серверу по SSH Вам достаточно нажать дважды на сохраненную запись 192.168.2.1:

Сохраняем добавленный сервер в Putty

При первом подключении к серверу по SSH протоколу, Вам будет предложено согласится на запись ключа удаленного сервер в кеш программы Putty, Вы соглашаетесь на это нажав кнопку Да и Вам откроется окно ввода логина и пароля:

Подключаемся и соглашаемся на вопрос программы при добавлении ключа сервера

В открывшемся окне вводим имя пользователя например root и нажимаем Enter, Вам будет предложено ввести пароль пользователя root, сам вводимый пароль не будет виден, просто когда введете пароль нажмите Enter и если Вы правильно ввели логин:пароль Вы окажетесь на удаленно Linux сервере:

Подключаемся к удаленному серверу Linux по SSH используя программу Putty

Ниже приведен скриншот в котором я вошел на сервер Linux по SSH bcgjmpez программу удаленного доступа Putty:

Подключились к удаленному серверу Linux по SSH используя программу Putty

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

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

  • IP Удаленного сервера - 192.168.2.1
  • IP роутера либо модема - 192.168.1.1
  • Пробрасываемый порт - 82

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

Так как мы будем пробрасывать 82 порт на роутер на том же сервере к которому мы ранее уже подключались, на необходимо во вкладке Session выделить мышкой добавленный ранее сервер с именем 192.168.2.1 и нажать кнопку Load, после этого заполнятся поля Host Name, Port, Saved Session:

Добавляем туннель для проброса 82 порта на роутер, модем за сервером

Нам необходимо перейти во вкладку Connection - SSH - Tunnels и заполнить поля:

Добавляем туннель для проброса 82 порта на роутер, модем за сервером

В окне ниже мы добавили туннель на роутер с 82 порта на айпи роутера 192.168.1.1 и WEB порт 80:

Добавили туннель для проброса 82 порта на роутер, модем за сервером

После добавления тунеля нам необходимо сохранить данные настройки под другим именем, для этого переходим во вкладку Session и в поле Saved Session написать имя соединения с настроенным тунелем: 192.168.2.1_82-to-192.168.1.1 и нажимаем кнопку Save, в окне ниже появится новое имя 192.168.2.1_82-to-192.168.1.1 дважды нажав на которое мышкой, мы получим приглашение ввести логин:пароль, введя которые мы зайдем на удаленный сервер.

Сохраняем настройки с туннелем на роутер, модем под отдельным именем

Заходим на роутер, модем через 82 проброшенный порт в Putty

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

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

Копирование файлов через SSH используя программу для удаленного доступа Putty.

Для копирования файла на удаленный сервер, я в папке pytty на диске C:\ заархивировал программу putty.exe, и в заархивированном виде файл имеет имя putty.zip скриншот:

Заархивированный файл putty.zip, который мы скопируем на удаленный сервер по SSH

Для копирования файла putty.zip нам необбходимо открыть командную строку Windows, для этого нажимаем кнопку Пуск - Выполнить и в появившемся окне вводим команду cmd и нажать Ok:

Запускаем командную строку в Windows

После запуска командной строки выполнив команду cmd нам откроется окно:

Открыта командная строка Windows

После открытия командной строки, нам необходимо перейти в папку, где находится программа pscp.exe и копируемый файл putty.zip, для этого нам необходимо выполнить в командной строке команду:

После входа в папку putty на диске C:\ мы можем проверить содержимое папки выполнив команду:

На скриншоте ниже это все видно:

Переходим в папку Putty на диске C:\

И теперь нам для того, чтобы закачать файл putty.exe на удаленный сервер под пользователем root в папку /root нам необходимо выполнить команду:

Если у Вас SSH сервер висит на стандартном 22 порту, выполняете команду:

Если же у Вас SSH сервер висит на нестандартном порту, например 222, тогда выполняете команду:

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

В команде выше мы сказали программе pscp.exe закачать файл putty.zip находящийся в текущей директории на удаленный сервер под пользователем root с IP адресом 192.168.2.1 в папку /root. После выполненной команды, Вам будет предложено ввести пароль пользователя root

Для того, чтобы скопировать файл putty.zip с удаленного сервера в текущую папку, SSH сервер на стандартном 22 порту, нам необходимо выполнить команду:

Для того, чтобы скопировать файл putty.zip с удаленного сервера в текущую папку, SSH сервер на нестандартном 222 порту, нам необходимо выполнить команду:

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

В команде выше мы сказали программе pscp.exe cкачать файл putty.zip находящийся в директории /root на удаленном сервере под пользователем root с IP адресом 192.168.2.1 в текущую папку (в папку в которой мы находимся)

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

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

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

SSH из коробки поддерживает протоколы SCP и SFTP. Причём в пакете ssh поставляются одноимённые утилиты scp и sftp для обмена файлами. Подробности о них вы найдёте в статье «SSH (ч.5): Копирование файлов с помощью scp и sftp». Но это утилиты с интерфейсом командной строки, что не всем может быть удобно.

Протокол SFTP поддерживается несколькими кроссплатформенными программами с графическим интерфейсом. То есть, вы можете закачивать и управлять файлами на сервере через программу с графическим интерфейсом. Причём на сервере кроме запущенного SSH больше ничего не требуется.

SFTP в FileZilla

FileZilla — это не только FTP клиент, эта программа также поддерживает FTP через TLS (FTPS) и, главное для нас сейчас, эта программа поддерживает тот самый протокол SFTP. Программа является бесплатной, у неё открыт исходный код, она работает под Linux и Windows.

Использование программы элементарное — нужно указать хост (IP), имя пользователя и порт. Предположим, я хочу подключиться к хосту 192.168.1.68, под пользователем root. В качестве порта нужно указать порт, на котором работает SSH на этом удалённом сервере, по умолчанию это 22.

Можно просто ввести данные в поля, но мне нравится составлять такие URI адреса, которые начинаются на sftp:// - дело в том, что они нам ещё пригодяться!

Итак, я составил адрес

вставляю его в поле «Хост» и нажимаю кнопку «Быстрое подключение»:


Если вы когда-либо работали с SSH, то вы знаете, что перед каждым первым подключением к новому хосту, нужно согласиться добавить его в список известных хостов:


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

Нажимаем «ОК» и получаем список файлов директории, к которой мы подключились:


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


SFTP в Double Commander

Double Commander, как и его прототип Total Commander, умеют работать с SFTP с помощью плагина. Но в Double Commander плагин нужно установить, прежде чем эта программа начнёт понимать SFTP.

Я покажу на примере Double Commander в Linux. Если у вас Windows и показанный способ не сработает, то напишите в комментариях, попробуем вместе найти решение (вероятные пути — пробовать плагины Total Commander для SFTP, поскольку Double Commander совместим с ними).

Итак, нам нужен плагин gvfs, скачиваем его.

Распаковываем скаченный архив.

Теперь открываем Double Commander, в меню переходим в «Настройки» → «Параметры» → Вкладка «Плагины» → Плагины WFX.


Нажимаем кнопку «Добавить» и указываем скаченный файл:


Сохраняем, закрываем меню настроек, на всякий случай перезапускаем Double Commander.


Теперь нажимаем на эту кнопку и затем выбираем Network:


Можно нажать <Quick connection> и ввести уже знакомый нам URI (если честно, мне просто лень расписывать данные по полям):


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


Имя пользователя мы уже указали в URI, поэтому можно пропустить:


У меня для SSH настроен вход без пароля (аутентификация по ключу), поэтому ничего не ввожу:


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


Прямо в URI можно указывать папку, которая должна быть открыта после подключения. Предположим, я хочу, чтобы открывалась папка /var/www/html, тогда URI будет иметь следующий вид:

В Double Commander и FileZilla можно настроить подключения, чтобы соединение с сервером происходило сразу при выборе желаемого подключения.

SFTP в менеджере файлов: управление файлами на удалённом хосте через стандартный файловый менеджер

SFTP протокол поддерживается многими графическими файловыми менеджерами, которые можно найти в дистрибутивах Linux. Используя как Nemo (Cinnamon), Nautilus (GNOME), так и Konqueror (KDE), мы можем вводить URI (ссылки) начинающиеся на sftp:// в строку перехода и работать с файлами, расположенными на удалённой системе с запущенным SSH сервером.

К примеру, пользователем на удалённой системе является root, IP адрес удалённого хоста 192.168.1.68 и на нём запущен SSH сервер на 22 порту и я хочу открыть папку /root/bin/. Тогда я открываю стандартный менеджер файлов Linux и ввожу туда адрес:

Теперь я могу работать с файлами как если бы они были в локальной системе: перетаскивать, смотреть их свойства, загружать на локальный компьютер.


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

Как в curl работать с протоколами SCP и SFTP

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

На мой взгляд, работать с протоколами SCP и SFTP в командной строке удобнее через родные утилиты, поэтому я бы в первую очередь порекомендовал изучить «SSH (ч.5): Копирование файлов с помощью scp и sftp» - там подробно описано как пользоваться этими программами.

cURL и SCP

Протокол SCP предназначен в первую очередь для скачивания и закачки файлов. Для скачивания используется команда вида:

Файл oneshot.py из папки /root/bin/ будет скачен в текущую рабочую директорию с исходным именем. Чтобы сохранить файл в другое место и/или с другим именем, добавьте опцию -o, --output <ФАЙЛ> - в качестве <ФАЙЛ> укажите путь в локальной системе.

Мы используем опцию -k которая предназначена для разрешения небезопасных соединений, то есть когда невозможно валидировать (проверить) ключи. Ключи для SSH генерируются пользователями, поэтому проверить их с помощью третьей стороны невозможно. При этом данные соединения не стоит считать небезопасными — они такие же, как и при подключении по SSH, то есть надёжные.

Если приватный ключ для подключения находится по другому пути, то используйте опцию --key

/.ssh/id_rsa. В современных версиях cURL указывать публичный ключ не нужно — программа сама извлечёт его из приватного ключа. Если вход по ключу не настроен, то используйте опцию --user "testuser:testpassword" или -u user.

Для закачки файла на удалённый сервер используйте опцию -T, --upload-file <ФАЙЛ>, где вместо <ФАЙЛ> укажите файл, который нужно выгрузить. Пример команды:

cURL и SFTP

При работе с протоколом SFTP, также применяются опции:

  • -k (разрешить подключения при неудачной валидации ключа)
  • --key

Для листинга списка файлов файлов в директории /root/bin/ пользователя root на хосте 192.168.1.68, порт 22:


  • Выгрузка используя curl на SFTP
  • Загрузка используя curl на SFTP
  • Переименование используя curl на SFTP
  • Удаление используя curl на SFTP
  • Создание директории используя curl на SFTP
  • Удаление директории используя curl на SFTP

Как можно догадаться, -Q — это опция для отправки команд на SFTP сервер. Дефис перед командой (префикс) также имеет значение (имеются разные префиксы). Нужно знать, что cURL поддерживает не все команды SFTP — подробности в документации по cURL:

Опция --ftp-create-dirs означает создать необходимую директорию, если она отсутствует (в противном случае работа cURL завершится ошибкой).

Заключение

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

Читайте также: