Как безопасно передавать файлы в Linux с помощью SCP
При передаче файлов на удаленный сервер Linux у вас есть несколько вариантов. Один из лучших способов — использовать программу Secure Copy, или SCP, которая работает по протоколу SSH и позволяет быстро передавать файлы по сети в удаленную систему. В этом руководстве показано, как безопасно передавать файлы с помощью SCP в Linux.
Содержание
- Настройка SSH
- Подключение к вашей системе через SSH
- Использование SCP для передачи файлов
- Сжатие передаваемых файлов в SCP
- Оптимизация передачи данных с помощью SCP
- Ограничение использования полосы пропускания в SCP
- Удаленная передача на удаленный доступ с помощью SCP
- Использование прокси с SCP
- Изменение порта по умолчанию в SCP
- Использование тихого режима SCP
- Часто задаваемые вопросы
Настройка SSH
На вашем удаленном сервере вам необходимо установить SSH-сервер. Наиболее распространенным в Linux является сервер OpenSSH. Чтобы установить его, выполните одну из следующих команд:
# Debian/Ubuntu-based server sudo apt install ssh # Fedora sudo dnf install openssh
В зависимости от вашего дистрибутива вам может потребоваться разрешить SSH через некоторые программные брандмауэры. В Ubuntu этой проблемы нет, но в Fedora вам также придется выполнить следующие команды:
sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload
Подключение к вашей системе через SSH
Прежде чем вы сможете подключиться по SSH, вам необходимо узнать IP-адрес удаленного сервера. На графических серверах IP-адрес отображается в апплете «Сеть» в настройках системы. На большинстве серверов вам следует использовать команду ip
в терминале.
ip addr
В выводе найдите строку, начинающуюся с inet
в разделе ethX
или enpXsy
, в зависимости от способа подключения вашего сетевого интерфейса к системе. В моем случае это 192.168.68.108.
Чтобы проверить SSH-соединение, перейдите на другой компьютер с Linux и введите:
ssh user@remote.machine.ip.address
Измените «пользователя» на фактическое имя пользователя на сервере.
Введите пароль этой учетной записи, и вы в деле. Если вам зададут вопрос «подлинность хоста не может быть установлена», просто ответьте «да». Это проверка безопасности, предназначенная для того, чтобы убедиться, что вы подключаетесь к своему реальному серверу, а не к мошеннику. В вашей клиентской системе вы должны увидеть то же приглашение, которое вы видите при входе непосредственно на сервер, что означает, что ваше соединение прошло успешно. Вам также следует настроить SSH-соединения для максимальной безопасности или даже настроить двухфакторную аутентификацию, прежде чем переходить к следующему шагу.
Использование SCP для передачи файлов
Теперь, когда вы проверили SSH-соединение, начните копировать файлы между двумя компьютерами. Безопасное копирование достигается с помощью команды scp
. Основной формат команды scp
:
scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION
Например, чтобы скопировать файл «backup.tar.gz» с локального компьютера в папку «backups» домашнего каталога пользователя «ramces» на удаленном сервере с IP-адресом 192.168.68.165, используйте:
scp backup.tar.gz ramces@192.168.68.165:~/backups/
Как и при подключении с помощью ssh
, вам будет предложено ввести пароль. Вам не будет предложено ввести имя пользователя, как оно было указано в команде.
Вы также можете использовать подстановочные знаки, например:
scp *.tar.gz ramces@192.168.68.165:~/backups/
Чтобы скопировать файл с удаленного сервера на локальный компьютер, просто поменяйте местами параметры:
scp ramces@192.168.68.165:~/backups/backup.tar.gz ./
Обратите внимание на точку в конце команды? Оно означает «текущий каталог», как и стандартные команды cp
или mv
. Если хотите, вы можете с тем же успехом указать и другой каталог.
scp -r ramces@192.168.68.165:~/backups/ backups-from-server/
То же самое и с дикими картами:
scp ramces@192.168.68.165:~/backups/*.txz ./
Чтобы рекурсивно скопировать каталог на удаленный сервер, используйте опцию -r
:
scp -r backups/ ramces@192.168.68.165:~/backups/
Чтобы скопировать рекурсивную копию каталога с удаленного сервера на локальный компьютер, используйте:
scp -r ramces@192.168.68.165:~/backups/ ./
Сжатие передаваемых файлов в SCP
Помимо базового копирования, также можно изменить поведение SCP во время передачи файлов. Например, вы можете использовать флаг -C
для сжатия данных, которые SCP отправляет удаленным клиентам:
scp -C backup.tar.gz ramces@192.168.68.165:/home/ramces/
Эта опция работает путем сжатия каждого пакета данных при его отправке через программу SCP. Таким образом, это может быть невероятно полезно, если вы используете соединение с ограниченной пропускной способностью и хотите надежно отправить файл на удаленный сервер.
Аналогично приведенным выше параметрам, вы также можете использовать -C
вместе с флагом -r
для рекурсивного сжатия и передачи файлов на удаленный компьютер. Например, следующая команда сжимает и извлекает файл «backup.tar.gz» с моего удаленного сервера:
scp -Cr ramces@192.168.68.165:/home/ramces/backups /home/ramces/
Оптимизация передачи данных с помощью SCP
По большей части SCP пытается использовать алгоритм шифрования AES-128 для всех передач файлов. Однако бывают случаи, когда этот конкретный алгоритм не подходит для файлов, которые вы хотите перенести.
Зная это, можно дополнительно оптимизировать и защитить SCP, напрямую изменив алгоритм шифрования для конкретной передачи. Для этого вам нужно использовать флаг -c
, за которым следует шифр, который вы хотите использовать.
Например, следующая команда передает файл «backup.tar.gz» на мой удаленный сервер с использованием AES-256:
scp -c aes256-ctr ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Кроме того, опция -c
также позволяет вам предоставить список шифров, которые вы хотите использовать для передачи конкретного файла. Например, следующая команда использует как AES-192, так и AES-256 при передаче файла «backup.tar.gz» на мой удаленный сервер:
scp -c aes192-ctr,aes256-ctr ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Ограничение использования полосы пропускания в SCP
Хотя сжатие пакетов файлов может помочь вам использовать SCP в плохих условиях сети, также можно ограничить полосу пропускания, используемую программой во время передачи. Это полезно в тех случаях, когда вы используете лимитное соединение и не хотите, чтобы SCP доминировал над пропускной способностью вашей сети.
Чтобы ограничить эффективную пропускную способность программы, вам необходимо использовать флаг -l
, за которым следует верхний предел, который вы хотите, в килобитах в секунду (Кбит/с). Например, выполнение следующей команды передаст файл «backup.tar.gz» на мой удаленный сервер с эффективной пропускной способностью 1600 Кбит/с:
scp -l 1600 ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Удаленная передача на удаленный доступ с помощью SCP
Помимо копирования локальных файлов на удаленный сервер и наоборот, вы также можете использовать SCP для управления несколькими удаленными серверами с вашего локального компьютера, поскольку SCP занимается только передачей файлов и не делает различия между локальным и удаленным компьютером.
Для передачи между двумя удаленными серверами вам необходимо явно указать имя пользователя и адрес каждого из этих компьютеров. Например, выполнение следующей команды перенесет мой файл «remote-backup.tar.gz» между двумя удаленными серверами:
scp ramces@192.168.68.108:/home/ramces/remote-backup.tar.gz ramces@192.168.68.165:/home/ramces/
Использование прокси с SCP
По умолчанию SCP использует IP-адрес вашего локального компьютера при передаче файлов между разными хостами. Хотя в нормальных ситуациях это вполне нормально, это может стать проблемой, если ваша локальная сеть ограничивает любую активность SCP. Один из быстрых способов решения этой проблемы — передать локальное соединение через SSH-прокси.
Для этого вам нужно использовать флаг -o
, за которым следует опция ProxyCommand
. Это позволяет вам создать базовое SSH-соединение с новым компьютером, который, в свою очередь, выполнит вашу команду SCP. Например, выполнение следующей команды создаст новый прокси-сервер SSH на удаленном компьютере и передаст с его помощью файл «backup.tar.gz»:
scp -o "ProxyCommand ssh ramces@192.168.68.108 nc %h %p" ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Изменение порта по умолчанию в SCP
Помимо создания базового прокси-сервера SSH, вы также можете изменить порт по умолчанию для SCP. Это особенно полезно, если вы защищаете свой Linux-сервер и не хотите раскрывать порты по умолчанию.
Чтобы использовать SCP с другим портом, вам необходимо использовать флаг -P
, за которым следует номер порта, который вы хотите использовать. Например, следующая команда рекурсивно скопирует мой «резервный» каталог и подключится к моему удаленному серверу через порт 2222:
scp -r -P 2222 ./backup ramces@192.168.68.165:/home/ramces/
Использование тихого режима SCP
Наконец, также можно полностью удалить любой вывод терминала из команды SCP. Это особенно полезно, если вы хотите создать неинтерактивный сценарий, который будет запускаться на вашем компьютере. Мало того, вы также можете полностью автоматизировать этот процесс, создав задание cron и передав закрытый ключ SSH на свой сервер.
Чтобы создать тихую передачу SCP, вам необходимо использовать флаг -q
. Например, следующая команда автоматически перенесет мой файл «backup.tar.gz» на удаленный сервер:
scp -q ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Часто задаваемые вопросы
У меня удаленный переход на удаленный в SCP не работает. Как я могу это исправить?
Эта проблема, скорее всего, связана с заблокированным портом в одном из файлов конфигурации удаленного компьютера. Чтобы устранить эту проблему, убедитесь, что порт по умолчанию для SSH открыт на обоих ваших компьютерах.
Эта проблема также может быть связана с тем, что один из ваших удаленных компьютеров находится за соединением CG-NAT, поэтому любое внешнее соединение с вашим удаленным компьютером не будет решено должным образом. Чтобы это исправить, вам нужно использовать программу виртуальной локальной сети, например Yggdrasil, которая позволит вам пробивать CG-NAT.
Я запустил прокси-сервер SCP, и удаленный хост закрыл соединение. Что я могу сделать?
Эта проблема, скорее всего, связана с проблемой вашего прокси-сервера. Чтобы правильно запустить SSH-прокси, убедитесь, что на компьютере, который вы хотите использовать, есть сервер OpenSSH и netcat. Чтобы установить эти программы в Ubuntu, выполните следующую команду: sudo apt install ssh netcat
.
Можно ли знать все доступные шифры SCP?
По умолчанию программа SCP в своих криптографических функциях в значительной степени полагается на протокол SSH. По этой причине вы можете использовать программу SSH для печати списка шифров, которые можно использовать вместе с SCP. Например, вы можете запустить ssh -Q ciphers
, чтобы распечатать краткий список всех доступных шифров на вашем компьютере.
Изображение предоставлено: Unsplash. Все изменения и скриншоты Рамсеса Реда.