Аутентификация и шифрование
Исполняемый файл SSH обычно называется ssh, а туннель создается командой следующего вида:
ssh – L лок_порт:уддл_хост:удал_порт пользователь@удал_хост
Параметр лок_порт содержит произвольный номер порта, по которому организуется локальное прослушивание. Номер порта должен быть больше 1024 (если команда не выполняется с правами root, чего делать не рекомендуется). Заданное число определяет тот номер порта, по которому, как полагает ваш клиент, он подключен к PostgreSQL. В действительности данные, передаваемые через этот порт, попадают на порт прослушивания SSH (обычно порт 22) удаленного хоста, расшифровываются и затем передаются на заданный порт удаленного хоста.
Секция пользователь@удал_хост необходима для аутентификации системных пользователей. Без действительной учетной записи на удаленном хосте создать туннель SSH не удастся. Весь процесс создания туннеля продемонстрирован в листинге 8.14, в котором два терминальных сеанса разделены многоточием. Первое терминальное подключение создает туннель SSH и остается активным, чтобы туннель продолжал существование. Второе терминальное подключение использует туннель для установки связи с локальным портом и последующей пересылки данных на удаленный хост, их расшифровки и передачи серверу PostgreSQL.
Листинг 8.14. Создание туннеля SSH на сервере PostgreSQL.
[user@local ~]$ ssh – L 4001:remotehost:5432 userPremotehost user@remotehost's password: [user@remote – ]$ [user@local – ]$ psql – h localhost – p 4001 tempiatel Welcome to psql, the PostgreSQL Interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit tempiatel=#
Примечание
Если после создания туннеля SSH вам не нужно переходить в режим командной строки, как это происходит по умолчанию, включите в команду ssh ключ – Т. В этом случае после аутентификации терминал перестает реагировать на действия пользователя. После завершения сеанс прерывается комбинацией клавиш CTRL + C.
Единственный недостаток механизма туннелей SSH заключается в том, что он требует наличия системной учетной записи для пользователя, подключающегося к PostgreSQL. SSH не предоставляет абсолютно прозрачного доступа к шифрованным потокам данных до тех пор, пока пользователь не инициирует соединение и не пройдет аутентификацию у демона ssh, обычно называемого sshd. В зависимости от ситуации это ограничение может приносить как пользу, так и вред.
Тем, кто захочет создать туннель шифрования данных еще более общего характера, стоит рассмотреть возможность использования пакета Stunnel.
Настройка и использование пакета Stunnel
Хотя встроенная поддержка SSL и OpenSSH обеспечивают надежный, хорошо защищенный обмен данными с PostgreSQL, у этих инструментов имеются свои особенности и недостатки. Многие пользователи PostgreSQL интересуются, существует ли другой способ шифрования с полностью прозрачным удаленным доступом к серверу. Если вы хотите обеспечить прозрачное шифрование сеанса для любого клиента, без обязательной привязки к SSH, в вашем распоряжении два общедоступных средства: OpenSSL и Stunnel.
Системные администраторы Unix и Linux обычно знакомы с одним или обоими пакетами, поскольку они часто используются в других областях (в конце концов, шифрование применяется не только в контексте PostgreSQL). А если вы еще не сталкивались с шифрованием обмена данными, с этой проблемой стоит познакомиться поближе.