Копиране на файлове чрез SSH: Пълно ръководство за SCP, rsync и SFTP
SSH (Secure Shell) е гръбнакът на сигурното дистанционно управление на сървъри. Независимо дали сте разработчик, разгръщащ код, системен администратор, управляващ инфраструктура, или опитен потребител, поддържащ среда за VPS Хостинг, прехвърлянето на файлове сигурно между машини е задача, която ще изпълнявате постоянно.
Това изчерпателно ръководство обхваща всички основни методи за копиране на файлове чрез SSH — включително SCP, rsync, SFTP и автоматизация с ключове — с реален синтаксис, практически примери и експертни съвети, които да ви помогнат да работите по-бързо и по-сигурно.
Защо да използвате SSH за прехвърляне на файлове?
Преди да се потопим в инструментите, си струва да разберем защо SSH-базираното прехвърляне на файлове е индустриалният стандарт за сървърни администратори и разработчици.
- Криптиране от край до край: Всеки байт данни — включително идентификационни данни, команди и съдържание на файлове — е криптиран при пренос с помощта на съвременни криптографски алгоритми. Това прави SSH прехвърлянията имунизирани срещу прихващане на пакети и атаки тип „човек по средата”.
- Не се изисква допълнителен софтуер: SSH е предварително инсталиран на практически всяка Linux/Unix система и е налично по подразбиране на Windows 10+ и macOS.
- Универсалност: Една SSH връзка може да обработва интерактивни сесии на обвивката, прехвърляне на файлове, пренасочване на портове и автоматизирани скриптове.
- Подходящо за автоматизация: SSH се интегрира безпроблемно с cron задачи, CI/CD тръбопроводи и скриптове за архивиране, позволявайки напълно автоматизирани прехвърляния на файлове без парола.
- Надеждност: SSH връзките обработват мрежовите прекъсвания изящно, особено когато се комбинират с инструменти като
rsync.
Метод 1: Копиране на файлове с SCP (Secure Copy Protocol)
SCP е най-простият и най-широко използван инструмент за еднократно прехвърляне на файлове чрез SSH. Той работи, като използва вашата съществуваща SSH връзка за сигурно копиране на файлове между хостове.
Основен SCP синтаксис
scp [options] [source] [destination]Пример 1: Качване на файл от локална машина на отдалечен сървър
scp /path/to/local/file username@remote_host:/path/to/remote/destinationРазбивка:
/path/to/local/file — файлът, който искате да прехвърлите от вашата локална машина
username@remote_host — вашето SSH потребителско име и хостнейм или IP адрес на сървъра
/path/to/remote/destination — целевата директория или пътят до файла на отдалечения сървър
Пример 2: Изтегляне на файл от отдалечен сървър на локална машина
scp username@remote_host:/path/to/remote/file /path/to/local/destination
Просто разменете източника и дестинацията, за да изтеглите файл от сървъра на вашата локална машина.
Пример 3: Копиране на цяла директория рекурсивно
scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination
Флагът -r указва на SCP да копира директорията и цялото й съдържание рекурсивно, включително вложени поддиректории.
Полезни опции на SCP
Опция
Описание
-P [port]
Задайте персонализиран SSH порт (забележка: главна буква -P, за разлика от малката -p на SSH)
-C
Активирайте компресия за по-бързи прехвърляния при бавни връзки
-i [identity_file]
Използвайте конкретен SSH частен ключ за удостоверяване
-l [limit]
Ограничете използването на честотна лента в Kbit/s
-q
Тих режим — потиска изхода на прогреса
-v
Подробен режим — полезен за отстраняване на проблеми с връзката
Кога да използвате SCP
SCP е идеален за бързи, еднократни прехвърляния на файлове, където простотата е от значение. Не изисква конфигурация и работи веднага на всяка система с инсталиран SSH. Въпреки това, за големи директории или повтарящи се прехвърляния, rsync е значително по-добър избор.
Метод 2: Копиране на файлове с rsync
rsync е изборът на професионалистите за синхронизиране и прехвърляне на файлове чрез SSH. Неговата ключова функция е делта прехвърлянето: вместо да копира цели файлове, rsync анализира източника и дестинацията и прехвърля само променените части. Това спестява огромно количество време и честотна лента при работа с големи файлове или директории, които се актуализират често.
Основен rsync синтаксис
rsync [options] [source] [destination]
Пример 1: Качване на файл от локална машина на отдалечен сървър
rsync -avz /path/to/local/file username@remote_host:/path/to/remote/destination
Пример 2: Синхронизиране на цяла директория с отдалечен сървър
rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
> Важно: Обърнете внимание на наклонената черта / след изходната директория. С наклонена черта, rsync копира *съдържанието* на директорията. Без нея, rsync копира самата директория като поддиректория на дестинацията.
Пример 3: Огледално копиране на директория (изтриване на файлове, премахнати от източника)
rsync -avz --delete /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
Флагът --delete гарантира, че файловете, изтрити от източника, се премахват и от дестинацията, поддържайки двете места в перфектна синхронизация.
Пример 4: Използване на персонализиран SSH порт
rsync -avz -e "ssh -p 2222" /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
Полезни опции на rsync
Опция
Описание
-a
Режим на архивиране: запазва разрешения, времеви маркери, символни връзки и собственост
-v
Подробен режим: показва прогрес файл по файл по време на прехвърлянето
-z
Компресия: намалява данните, прехвърляни по мрежата
--delete
Изтрива файлове в дестинацията, които вече не съществуват в източника
--progress
Показва прогрес в реално време за всеки файл
--exclude
Изключва конкретни файлове или шаблони (напр. --exclude '*.log')
-n или --dry-run
Симулира прехвърлянето, без действително да копира нищо
-e "ssh -p [port]"
Задайте персонализиран SSH порт
--bwlimit=[KB/s]
Ограничете скоростта на прехвърляне, за да избегнете насищане на връзката
Кога да използвате rsync
Използвайте rsync за архивиране, разгръщане и всяка повтаряща се задача за синхронизиране. Особено мощен е при управление на големи кодови бази, медийни библиотеки или експорти на бази данни на Dedicated сървър, където ефективността на честотната лента и целостта на данните са от критично значение.
Метод 3: Копиране на файлове между два отдалечени сървъра
По-малко известна, но изключително полезна възможност на SCP и rsync е способността да прехвърлят файлове директно между два отдалечени сървъра — без да насочват данните през вашата локална машина. Това е безценно при мигриране на сървъри или синхронизиране на данни между облачни инстанции.
Копиране на файлове между два отдалечени сървъра с SCP
scp username1@remote_host1:/path/to/file username2@remote_host2:/path/to/destination
Копиране на файлове между два отдалечени сървъра с rsync
rsync -avz username1@remote_host1:/path/to/source/ username2@remote_host2:/path/to/destination/
> Забележка: За да работят прехвърлянията между сървъри, изходният сървър трябва да може да установи SSH връзка с целевия сървър. Може да се наложи да конфигурирате SSH ключове на изходния сървър или да използвате SSH agent forwarding (ssh -A).
Прехвърляне между сървъри чрез SSH тунелиране (алтернативен метод)
Ако директният SSH между сървъри не е възможен поради ограничения на защитната стена, можете да насочите прехвърлянето през вашата локална машина, използвайки tar и ssh:
ssh username1@remote_host1 "tar czf - /path/to/source" | ssh username2@remote_host2 "tar xzf - -C /path/to/destination"
Това предава компресиран архив от сървър 1 директно към сървър 2 чрез вашата локална терминална сесия.
Метод 4: Копиране на файлове с SFTP (SSH File Transfer Protocol)
SFTP предоставя интерактивно, FTP-подобно изживяване чрез криптирана SSH връзка. За разлика от SCP, който е инструмент с една команда, SFTP отваря постоянна сесия, в която можете да преглеждате директории, да качвате, изтегляте, преименувате и изтривате файлове интерактивно.
Стартиране на SFTP сесия
sftp username@remote_host
Ще бъдете прехвърлени към SFTP подканата (sftp>), от която можете да изпълнявате следните команди:
Основни SFTP команди
Команда
Описание
ls
Изброява файловете в текущата отдалечена директория
lls
Изброява файловете в текущата локална директория
cd /remote/path
Сменя отдалечената директория
lcd /local/path
Сменя локалната директория
put /local/file /remote/destination
Качва файл на отдалечения сървър
get /remote/file /local/destination
Изтегля файл от отдалечения сървър
mput *.txt
Качва множество файлове, отговарящи на шаблон
mget *.log
Изтегля множество файлове, отговарящи на шаблон
mkdir /remote/newdir
Създава директория на отдалечения сървър
rm /remote/file
Изтрива файл на отдалечения сървър
exit или quit
Затваря SFTP сесията
Свързване към персонализиран SSH порт чрез SFTP
sftp -P 2222 username@remote_host
Кога да използвате SFTP
SFTP е най-подходящ за интерактивни сесии за управление на файлове — например, когато трябва да прегледате структура на отдалечена директория, да изтеглите избирателно лог файлове или да качите конфигурационни файлове на уеб сървър. Много GUI клиенти (като FileZilla, Cyberduck и WinSCP) използват SFTP като основен протокол, което го прави достъпен и за нетехнически потребители.
Метод 5: Автоматизиране на прехвърлянията на файлове с SSH удостоверяване с ключ
Ръчното въвеждане на парола за всяко прехвърляне на файлове е неефективно и несъвместимо с автоматизацията. SSH удостоверяването с ключ решава това, като позволява влизания без парола, криптографски защитени — предпоставка за всеки автоматизиран работен процес за архивиране или разгръщане.
Стъпка 1: Генериране на двойка SSH ключове
На вашата локална машина изпълнете:
ssh-keygen -t ed25519 -C "your_email@example.com"
> Забележка: ed25519 е съвременният, препоръчан алгоритъм. Използвайте -t rsa -b 4096 ако имате нужда от съвместимост с по-стари системи.
Следвайте подканите, за да запазите ключа (местоположение по подразбиране: ~/.ssh/id_ed25519) и по желание задайте парола за допълнителна сигурност.
Стъпка 2: Копиране на вашия публичен ключ на отдалечения сървър
ssh-copy-id username@remote_host
Това добавя вашия публичен ключ към файла ~/.ssh/authorized_keys на отдалечения сървър. Ще бъдете подканени за вашата парола за последен път.
Ако ssh-copy-id не е налично, можете да го направите ръчно:
cat ~/.ssh/id_ed25519.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Стъпка 3: Тестване на удостоверяването без парола
ssh username@remote_host
Ако се свържете без да бъдете подканени за парола, удостоверяването с ключ работи правилно.
Стъпка 4: Автоматизиране на прехвърлянията с шел скрипт
С конфигурирано SSH без парола, вече можете да автоматизирате прехвърлянията на файлове в cron задачи или скриптове:
#!/bin/bash
# Daily backup script
rsync -avz --delete /var/www/html/ username@backup_server:/backups/www/
Добавете това към вашия crontab (crontab -e), за да се изпълнява нощно:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Отстраняване на често срещани проблеми при SSH прехвърляне на файлове
Дори опитни администратори срещат проблеми. Ето най-честите проблеми и техните решения:
Отказан достъп (publickey)
Проверете дали публичният ключ е правилно добавен към ~/.ssh/authorized_keys на отдалечения сървър
Проверете дали ~/.ssh има разрешения 700 и authorized_keys има разрешения 600PubkeyAuthentication yes в /etc/ssh/sshd_config)Отказана връзка
- Проверете дали SSH услугата работи:
systemctl status sshd - Проверете дали се използва правилният порт
- Прегледайте правилата на защитната стена:
ufw statusилиiptables -L
Скоростта на прехвърляне е бавна
- Активирайте компресия: добавете
-Cкъм SCP или-zкъм rsync - Използвайте по-бърз шифър:
ssh -c aes128-ctr(по-малко сигурен, но по-бърз при връзки с висока латентност) - За големи прехвърляния, обмислете
rsyncс--bwlimit, за да избегнете насищане на мрежата
Неуспешна проверка на хост ключа
- SSH отпечатъкът на отдалечения сървър се е променил (може да указва проблем със сигурността или възстановяване на сървъра)
- Премахнете стария ключ:
ssh-keygen -R remote_host - Свържете се отново и проверете новия отпечатък преди да го приемете
Избор на правилния инструмент: SCP срещу rsync срещу SFTP
| Функция | SCP | rsync | SFTP |
|---|---|---|---|
| Лесота на използване | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Делта прехвърляния | ❌ | ✅ | ❌ |
| Синхронизиране на директории | ✅ (рекурсивно) | ✅ (с --delete) | ✅ (ръчно) |
| Интерактивен режим | ❌ | ❌ | ✅ |
| Автоматизация | ✅ | ✅ | ✅ (със скриптове) |
| Ефективност на честотната лента | Ниска | Висока | Ниска |
| Най-подходящо за | Бързи еднократни прехвърляния | Архивиране и синхронизиране | Интерактивно разглеждане |
Защита на вашите SSH прехвърляния на файлове: Най-добри практики
Независимо кой инструмент използвате, следвайте тези най-добри практики за сигурност, за да защитите вашите сървъри и данни:
- Деактивирайте удостоверяването с парола — Използвайте изключително SSH ключове и задайте
PasswordAuthentication noв/etc/ssh/sshd_config - Сменете стандартния SSH порт — Преминаването от порт 22 драстично намалява автоматизираните опити за груба сила
- Използвайте
fail2ban— Автоматично блокирайте IP адреси, които многократно не успяват при удостоверяването - Ограничете SSH достъпа по IP — Използвайте правила на защитната стена или директиви
AllowUsers, за да ограничите кой може да се свързва - Поддържайте SSH актуализиран — Редовно актуализирайте OpenSSH, за да поправите известни уязвимости
- Използвайте силни алгоритми за ключове — Предпочитайте
ed25519илиrsa-4096пред по-стари, по-слаби алгоритми - Защитете вашите уеб приложения — Комбинирайте SSH сигурността с SSL сертификат, за да криптирате целия трафик към вашите уеб услуги
Често задавани въпроси
Каква е разликата между SCP и SFTP?
SCP е неинтерактивен инструмент за командния ред, предназначен за бързи прехвърляния на файлове с една команда. SFTP е интерактивен протокол, който ви позволява да преглеждате, управлявате, качвате и изтегляте файлове в интерфейс, базиран на сесии. И двата използват SSH за криптиране.
Мога ли да използвам rsync без SSH?
Да — rsync има собствен режим на демон, който работи без SSH, но е по-малко сигурен. За всяко прехвърляне, достъпно от интернет, винаги използвайте rsync чрез SSH (rsync -e ssh).
Как да прехвърлям файлове, ако моят сървър използва нестандартен SSH порт?
Използвайте флага -P с SCP (scp -P 2222) или опцията -e "ssh -p 2222" с rsync. За SFTP използвайте sftp -P 2222.
Остарял ли е SCP?
Разработчиците на OpenSSH са отбелязали, че основният протокол на SCP има ограничения и препоръчват използването на SFTP или rsync за нови работни процеси. Въпреки това, SCP остава широко достъпен и функционален на практически всички системи.
Заключение
Овладяването на SSH-базираното прехвърляне на файлове е основно умение за всеки, който управлява сървъри, разгръща приложения или поддържа отдалечена инфраструктура. Всеки инструмент има своето място:
- SCP е вашият избор за бързи, прости, еднократни прехвърляния
- rsync е незаменим за архивиране, разгръщане и ефективна синхронизация на големи набори от данни
- SFTP се отличава в интерактивни сесии, където трябва да преглеждате и управлявате файлове в движение
Комбинирането на тези инструменти с SSH удостоверяване с ключ и солидни практики за сигурност ви дава стабилен, автоматизиран и сигурен работен процес за прехвърляне на файлове, който се мащабира от единичен акаунт за Споделен уеб хостинг до сложни многосървърни архитектури на Dedicated сървъри.
Ако търсите надеждна, високопроизводителна хостинг среда, в която да приложите тези умения, разгледайте плановете за VPS Хостинг на AlexHost — създадени за разработчици и системни администратори, които изискват пълен root достъп, SSD съхранение и мрежова свързаност от корпоративен клас.
