Я все еще изучаю программирование сокета (использующий Perl), но у меня есть обе опции (программирование сокета и SSH/SCP/FTP) доступный для передачи данных с удаленных машин на мои локальные серверы.
Но я должен выбрать тот, который более безопасен (зашифрованные данные по сети) с точки зрения передачи данных. Любые предложения.
Простое использование сокетов не дает вам никакой безопасности. Правильный выбор зависит от приложения, систем, которые вы используете, и от того, насколько пользователи понимают, что им нужно сделать, чтобы использовать его. Например, если вы взаимодействуете с веб-сервером безопасным способом, вы, вероятно, в конечном итоге будете использовать для него TLS / SSL. Если вы просто переносите данные между двумя системами, использование ssh может быть наиболее удобным способом.
Когда вы говорите «безопасность», вы ищете зашифрованные данные в сети? Аутентификация взаимодействующих сторон? Оба?
Другой альтернативой является использование TLS / SSL, возможно, с набором инструментов OpenSSL (и есть модули Perl с привязками для него.) Программирование сложнее, чем с ssh, и вам придется проделать больше работы по аутентификации для него, так что он возвращается к тому, что вы пытаетесь сделать.
Кроме того, FTP сам по себе небезопасен.
Все сетевое программирование использует сокеты под капотом. Так что это скорее вопрос используемых вами протоколов.
Обычно, если вы хотите быть в безопасности, вы должны туннелировать свое соединение с помощью SSL (https, sftp, ftps)
Стандартные розетки не защищены. Данные передаются в необработанном виде из точки A в точку B.
Добавление SSL повышает безопасность. Многие протоколы поддерживают SSL. В частности, несколько разновидностей FTP и HTTP поддерживают SSL.
FTPS широко поддерживается многими платформами и многими клиентами. Даже если вы пишете собственный клиент, иметь под рукой других клиентов, таких как FileZilla, для тестирования - это хорошо.
Если бы я начал с нуля в такой системе, я бы использовал FTPS.
SSH / SFTP / SCP все используют сокеты при программировании сокетов. Если у вас нет лучшего алгоритма (для обеспечения безопасности), чем тот, который предоставляет SSH, используйте модуль SSH для Perl.
SSH - это протокол удаленной оболочки и сам по себе не используется для передачи файлов (например, FTP). Протокол передачи файлов SCP был частью SSH1, но поскольку SSH1 устарел и имеет недостатки, SCP не рекомендуется использовать. В SSH2 (используется во всех современных системах) используется SFTP (протокол передачи файлов SSH).
FTP (RFC 959) сам по себе не обеспечивает никакой безопасности. Существуют расширения, которые позволяют запускать FTP через SSL / TLS (либо неявно, по предварительно зашифрованному каналу, либо явно через TLS как часть протокола FTP). FTP через SSL называется FTPS (не смешивайте его с SFTP).
Вы можете прочитать подробные описания плюсов и минусов FTPS и SFTP здесь .
Я бы рассмотрел три основных варианта:
FTPS (FTP через SSL / TLS) - это эквивалент HTTPS, что, попросту говоря, означает, что это зашифрованная версия обычного протокола FTP. Я считаю, что он отлично подходит для загрузки через Интернет с удаленных и, возможно, общедоступных машин. Он предлагает превосходный механизм аутентификации в виде сертификатов X.509. Есть некоторые проблемы с брандмауэрами, потому что он, как и FTP, использует два соединения. Если ваша цель - запретить кому-либо видеть то, что вы загружаете, это идеальное решение IMHO. Я обычно использую этот протокол для доступа к машинам, которые я не контролирую.
SFTP (SSH FTP) - это хороший протокол, возможно, немного лучше FTPS, но, на мой взгляд, он лучше подходит для контролируемой среды. Я буду использовать этот протокол, когда захочу загрузить файл из моей учетной записи с одного компьютера на другой. Или когда я хочу загрузить новый скрипт на сервер. Для меня это удаленный эквивалент того, что я иду к машине с флешкой и регистрируюсь на ней.
VPN - если эти машины фиксированы, так сказать - вы всегда подключаетесь к одним и тем же машинам - я бы подумал об использовании VPN для обеспечения безопасности. Передачи защищены от посторонних, сервер ведет себя так, как будто находится в той же сети, и я могу использовать любой протокол, который захочу.