Подключение к SSH серверу
Оригинал статьи: http://pacify.discrete.ru/ssh-intro.html
Автор оригинальной статьи: Александр Лубягин
Опубликовано на условиях лицензии GNU Free Documentation License.
Все примеры из этой статьи прошли успешное тестирование на VDS хостинге TTK
SSH (Secure Shell — «безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и передачу файлов. Сходен по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы имеются для большинства операционных систем.
SSH позволяет передавать через небезопасный канал практически любой другой сетевой протокол, таким образом, можно не только удаленно работать на компьютере через командную оболочку, но и передавать по шифрованному каналу звуковой поток или видео (например, с веб-камеры) Для этого используется Port Forwarding соединении TCP. Также, SSH может использовать сжатие передаваемых данных для последующей их шифрации, что удобно, например, для удаленного запуска клиентов X Window System.
Большинство хостинг-провайдеров за определенную плату предоставляют клиентам доступ к их домашнему каталогу по SSH. Это может быть удобно как для работы в командной строке, так и для удаленного запуска программ (в том числе графических приложений). Через SSH можно работать с консолью удалённого сервера, будто находясь рядом с ним.
Стандарты и программные реализации
Первая версия протокола, SSH-1, была разработана в 1995 году исследователем Tatu Yl’nen из Технологического университета Хельсинки, Финляндия. SSH-1 был написан для обеспечения большей конфиденциальности, чем протоколы rlogin, telnet и rsh. В 1996 году была разработана более безопасная версия протокола, SSH-2, уже несовместимая с SSH-1. Протокол приобрел еще большую популярность, и к 2000 году его использовало уже порядка двух миллионов пользователей.
В 2006 году протокол был утвержден рабочей группой IETF в качестве Интернет‐стандарта.
Однако, в некоторых странах (Франция, Россия, Ирак и Пакистан) до сих пор требуется специальное разрешение в соответствующих структурах для использования определенных методов шифрования, включая SSH. См. закон Российской Федерации «О федеральных органах правительственной связи и информации».
Распространены две реализации SSH: собственническая коммерческая, и бесплатная свободная. Свободная реализация называется OpenSSH. К 2006 году 80 % компьютеров Интернет использовало именно OpenSSH. Собственническая реализация разрабатывается организацией SSH Inc., http://ssh.com/ она бесплатна для некоммерческого использования. Эти реализации содержат практически одинаковый набор команд.
Существуют две версии протокола SSH: SSH-1 и SSH-2. В первой версии протокола есть существенные недостатки, поэтому в настоящее время SSH-1 практически нигде не применяется.
Многие взломщики сканируют сеть в поиске открытого порта SSH, особенно — адреса хостинг-провайдеров; обычно пытаясь подобрать пароль суперпользователя.
Протокол SSH-2 устойчив к атакам «man-in-middle», в отличие от протокола telnet. То есть, прослушивание трафика, «снифинг», ничего не дает злоумышленнику. Протокол SSH-2 также устойчив к атакам путем присоединения посредине (session hijacking) и обманом сервера имен (DNS spoofing).
Поддержка SSH реализована во всех UNIX‑подобных системах, и на большинстве из них в числе стандартных утилит присутствуют клиент и сервер ssh. Существует множество реализаций SSH-клиентов и для не-UNIX ОС. Большую популярность протокол получил после широкого развитияанализаторов трафика и способов нарушения работы локальных сетей, как альтернативное небезопасному телнету решение для управления важными узлами.
SSH-серверы
- OpenBSD: OpenSSH
- Debian GNU/Linux: dropbear, lsh-server, openssh-server, ssh
- MS Windows: freeSSHd, OpenSSH sshd, WinSSHD
SSH-клиенты и оболочки
- Debian GNU/Linux: kdessh, lsh-client, openssh-client, putty, ssh
- MS Windows и Windows NT: PuTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD
- MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole
- Mac OS: NiftyTelnet SSH
- Symbian OS: PuTTY
- Java: MindTerm, AppGate Security Server
- J2ME: MidpSSH
Для работы по SSH нужен SSH-сервер и SSH-клиент. Сервер прослушивает соединения от клиентских машин и при установлении связи производит аутентификацию, после чего начинает обслуживание клиента. Клиент используется для входа на удаленную машину и выполнения команд.
Для соединения сервер и клиент должны создать пары ключей — открытых и закрытых — и обменяться открытыми ключами. Обычно используется также и пароль.
Рекомендации по безопасности использования SSH
- Запрещение удаленного root-доступа.
- Запрещение подключения с пустым паролем или отключение входа по паролю.
- Выбор нестандартного порта для SSH-сервера.
- Использование длинных SSH2 RSA-ключей (2048 бит и более). По состоянию на 2006 год система шифрования на основе RSA считалась надёжной, если длина ключа не менее 1024 бит.
- Ограничение списка IP-адресов, с которых разрешен доступ. Например, настройкой файрвола.
- Запрещение доступа с некоторых, потенциально опасных адресов.
- Отказ от использования распространенных или широко известных системных логинов для доступа по SSH.
- Регулярный просмотр сообщений об ошибках аутентификации.
- Установка детекторов атак (IDS, Intrusion Detection System).
- Использование ловушек, подделывающих SSH-сервис (honeypots).
Примеры использования SSH
Команда подключения к локальному SSH-серверу из командной строки GNU/Linux или FreeBSD для пользователя pacify (сервер слушает нестандартный порт 30000):
$ ssh -p 30000 pacify@127.0.0.1
Генерация пары SSH-2 RSA-ключей длиной 4096 бита программой puttygen
под UNIX‐подобными ОС:
$ puttygen -t rsa -b 4096 -o sample
Некоторые клиенты — например, PuTTY — имеют и графический интерфейс пользователя.
Для использования SSH в Python существуют модули вроде python-paramiko и python-twisted-conch.
Техническая информация о протоколе
SSH — это протокол прикладного уровня (или уровня приложений). SSH-сервер обычно слушает соединения на TCP-порту номер 22. Спецификация протокола SSH-2 содержится в RFC 4251. Для аутентификации сервера SSH использует алгоритм Diffie-Hellman’а. Для аутентификации клиента — шифрование с открытым ключом (оно сравнительно медленное). Для шифрования передаваемых данных — более быстрое симметричное шифрование. Среди алгоритмов шифрования с открытым ключом чаще всего используются RSA и DSA. Из симметричных алгоритмов — Advanced Encryption Standard(AES), Blowfish и 3DES. Целостность переданных данных проверяется с помощью CRC32 в SSH1 или HMAC-SHA1/HMAC-MD5 в SSH2.
Для сжатия шифруемых данных используется алгоритм LempelZiv (LZ77), который обеспечивает такой же уровень сжатия, что и архиватор ZIP.
Ссылки
- Стандарты
- Программы терминального доступа
- OpenSSH — свободная библиотека и набор утилит для поддержки шифрования, открытый код
- PuTTY — популярный кроссплатформенный SSH-клиент
- ShellGuard — SSH-клиент
- SecureCRT — SSH-клиент
- Программы доступа к файлам
- FTP Commander Deluxe — популярная программа поддерживает все безопасные протоколы
- WinSCP [1] — SFTP-клиент для Microsoft Windows
- SSH Filesystem [2] — позволяет подключить директорию, доступную на удаленной машине по ssh, как локальную директорию в GNU/Linux.
- Прочее