Вопрос или проблема
У меня есть “HDD VPS” с Debian bullseye, много места для хранения, но не много вычислительной мощности. FTP с этого дискового пространства работает на скорости 10-12 Мб/с (ограничено скоростью чтения HDD), но rsync по SSH работает на скорости ~2 Мб/с, явно ограничено процессором. Поэтому я хочу включить отсутствие шифрования или легкое шифрование (arcfour, я полагаю). Данные не конфиденциальны, но я предпочел бы не полагаться на FTP или RSH из-за паролей в открытом виде.
Ответы на stackexchange указывают на добавление строки Ciphers в sshd_config с такими опциями, как none и arcfour256. Однако мой единственный доступ к этому серверу осуществляется через SSH. Поэтому, если я ошибусь в sshd_config, я полностью заблокируюсь из сервера.
Я вижу несколько возможных выходов из этого, но не знаю, как реализовать ни одно из них; другие предложения тоже будут очень кстати.
-
Как мне протестировать, что мое изменение в sshd_config не сделает sshd недоступным? (Кроме как воспроизвести конфигурацию в локальной ВМ). Также были бы полезны примеры точных строк Ciphers, так как в файле /etc/ssh/sshd_config на сервере их нет.
-
Существует ли способ заставить rsync работать, запустив удаленный rsync через ssh (так что, все еще используя SSH для аутентификации), но с использованием нешифрованного протокола с удаленным rsync и не зашифрованного SSH-канала?
Для справки, вывод ssh -vv:
debug2: ciphers ctos: [email protected],[email protected],aes256-ctr,[email protected],aes128-ctr
debug2: ciphers stoc: [email protected],[email protected],aes256-ctr,[email protected],aes128-ctr
Вы можете запустить rsync --daemon
на удаленном сервере. Это принимает данные только без шифрования. Вы все равно можете попробовать добавить сжатие, чтобы посмотреть, станет ли быстрее. Есть необязательная аутентификация пользователя и пароля, которая использует слабое основанное на MD4 128-битное управление ответом.
Вы настраиваете, на каком порту сервер слушает, и какие части файловой системы могут быть записаны или прочитаны. rsync --daemon
может работать от имени root или от имени обычного пользователя для более ограниченного доступа. Часто одноразовый rsync --daemon
запускается из ssh-входа, унаследовав ssh-соединение, но это не то, что вам нужно. Просто избегайте добавления опции --server
, которая указывает rsync
, что он должен продолжать через ssh-соединение.
Смотрите man rsyncd.conf и разделы справки по rsync о РЕЖИМЕ ДАЕМОНА.
Существует ли способ заставить rsync работать, запустив удаленный rsync через ssh (так что, все еще используя SSH для аутентификации), но с использованием нешифрованного протокола с удаленным rsync и не зашифрованного SSH-канала?
Шифрование защищает от атаки “человек посередине”. Если вы думаете, что ваша оболочка заслуживает шифрования (и я бы с этим на 100% согласился), то и протокол rsync также, потому что, очевидно, кто-то, использующий функцию передачи протокола rsync в направлении, которое помещает их файлы на ваш сервер в атаке MITM, получает произвольный доступ (например, они могут изменить ваш ~/.ssh/authorized_keys. Игра окончена.).
Таким образом, отсутствие шифрования или слабое шифрование не являются вариантом. К счастью, шифрование теперь не так уж и дорого. Ваш опыт может отличаться – действительно есть VPS с недостаточной вычислительной мощностью – но, по моему опыту, часть сжатия часто является тем, что ограничивает вашу скорость передачи. Вам может быть полезно проверить --compress-choice
в справке по вашему rsync
(и если ваша версия rsync этого не поддерживает, возможно, стоит попробовать `ssh -o Compression=no yourhost ‘sh -c ‘tar cf – file1 file2… | zstd -1’ | zstd -d | tar xf -‘ или что-то подобное, чтобы сжать вручную на лету, а не через SSH.
Ответ или решение
Оптимизация rsync без шифрования и настройка sshd_config
Учитывая описанные вами ограничения и требования по производительности, давайте исследуем возможные решения для улучшения скорости передачи данных с использованием rsync
, обращая внимание на настройки вашего sshd_config
, а также возможность использования демона rsync
.
1. Изменение конфигурации sshd для уменьшения нагрузки на ЦП
Как вы правильно заметили, стоит изменить параметры конфигурации SSH, чтобы улучшить производительность, поддерживая при этом базовые стандарты безопасности. Вот несколько ключевых моментов:
-
Backup конфигурации: Перед тем как вносить изменения, обязательно создайте резервную копию вашего файла конфигурации SSH в
/etc/ssh/sshd_config
. Например, выполните команду:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
-
Настройка параметров Cipher: Откройте файл
sshd_config
в текстовом редакторе:sudo nano /etc/ssh/sshd_config
Добавьте или измените строку
Ciphers
следующим образом:Ciphers arcfour,arcfour256,arcfour128
Здесь вы можете установить алгоритмы шифрования, которые являются менее ресурсоемкими по сравнению с современными. Однако, учтите, что
arcfour
не рекомендуется к использованию по соображениям безопасности, поэтому используйте его с осторожностью. -
Тестирование изменений: Чтобы избежать блокировки доступа к серверу в случае ошибок в
sshd_config
, вы можете проверить конфигурацию с помощью команды:sudo sshd -t
Это позволит выявить синтаксические ошибки в конфигурации без перезапуска службы.
-
Использование
sshd
на альтернативном порту: Вы можете временно изменить порт SSH, чтобы иметь возможность подключаться после внесения изменений. Добавьте или измените строку:Port 2222
И затем попытайтесь соединиться по этому новому порту, прежде чем применять изменения.
2. Использование демона rsync
Запуск rsync
в режиме демона может быть хорошим вариантом. На сервере выполните следующие шаги:
-
Создайте файл конфигурации для демона:
Создайте файл/etc/rsyncd.conf
со следующим содержимым:uid = nobody gid = nobody use chroot = no max connections = 10 log file = /var/log/rsync.log [myfiles] path = /path/to/files comment = My file storage read only = no
-
Запустите rsync в демоническом режиме:
Для запуска можно использовать команду:sudo rsync --daemon
Теперь rsync
будет доступен без шифрования, но через этот метод вам следует быть осторожным в плане безопасности и настройки файловых прав.
3. Альтернативные методы
-
Сжатие данных: Попробуйте использовать параметр
-z
вrsync
для сжатия во время передачи. Это может помочь увеличить скорости передачи данных в зависимости от типа ваших файлов. -
Скрипты и другие методы: Варианты использования
tar
иzstd
могут быть эффективными. Например:ssh user@host 'tar cf - /path/to/files | zstd -1' | zstd -d | tar xf -
Это создаст архив и сожмет его, что может снизить нагрузку на процессор.
Заключение
Ваш подход сосредоточен на снижении нагрузки на ЦП и оптимизации работы rsync
. Конфигурирование sshd_config
, использование демона rsync
, а также другие методы, такие как сжатие данных, могут значительно улучшить вашу ситуацию.
Пожалуйста, убедитесь в постоянной мониторинге производительности и безопасности, чтобы избежать проблем в будущем.