15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
28.10.2024

Копиране на файлове чрез 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 има разрешения 600
  • Потвърдете, че SSH демонът позволява удостоверяване с ключ (PubkeyAuthentication 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

    ФункцияSCPrsyncSFTP
    Лесота на използване⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
    Делта прехвърляния
    Синхронизиране на директории✅ (рекурсивно)✅ (с --delete)✅ (ръчно)
    Интерактивен режим
    Автоматизация✅ (със скриптове)
    Ефективност на честотната лентаНискаВисокаНиска
    Най-подходящо заБързи еднократни прехвърлянияАрхивиране и синхронизиранеИнтерактивно разглеждане

    Защита на вашите SSH прехвърляния на файлове: Най-добри практики

    Независимо кой инструмент използвате, следвайте тези най-добри практики за сигурност, за да защитите вашите сървъри и данни:

    1. Деактивирайте удостоверяването с парола — Използвайте изключително SSH ключове и задайте PasswordAuthentication no в /etc/ssh/sshd_config
    2. Сменете стандартния SSH порт — Преминаването от порт 22 драстично намалява автоматизираните опити за груба сила
    3. Използвайте fail2ban — Автоматично блокирайте IP адреси, които многократно не успяват при удостоверяването
    4. Ограничете SSH достъпа по IP — Използвайте правила на защитната стена или директиви AllowUsers, за да ограничите кой може да се свързва
    5. Поддържайте SSH актуализиран — Редовно актуализирайте OpenSSH, за да поправите известни уязвимости
    6. Използвайте силни алгоритми за ключове — Предпочитайте ed25519 или rsa-4096 пред по-стари, по-слаби алгоритми
    7. Защитете вашите уеб приложения — Комбинирайте 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 съхранение и мрежова свързаност от корпоративен клас.

    15%

    Спести 15% на всички хостинг услуги

    Тествай уменията си и получи Отстъпка за всеки хостинг план

    Използвайте код:

    Skills
    За начало