У меня есть настройка пользователя A на моем веб-сервере с открытым ключом SSH, скопированным в ~/.ssh/authorized_keys
пользователя B на моем сервере базы данных. Идея состоит в том, чтобы использовать туннель SSH для облегчения связи между моим веб-приложением и удаленной базой данных. Я использую ufw
для блокировки всего, кроме ssh-соединений и порта 5432 , которые PostgreSQL использует для локальных соединений:
ufw default deny
ufw allow ssh/tcp
ufw allow 5432/tcp
ufw enable
Вот команда, которую я использую для открытия туннеля SSH ( через веб-сервер):
ssh -L 63333:localhost:5432 userb@1.2.3.4
Выполнение netstat -lpnt | grep 63333 | grep ssh
после того, как приведенная выше команда на моем веб-сервере выдает следующее:
tcp 0 0 127.0.0.1:63333 0.0.0.0:* LISTEN 22560/ssh
tcp6 0 0 ::1:63333 :::* LISTEN 22560/ssh
Далее я пытаюсь подключиться на сервер базы данных через порт 63333 , чтобы убедиться, что все работает:
psql -h localhost -p 63333 userb
Я получил следующее сообщение об ошибке:
-bash : / usr / bin / psql: Нет такого файла или каталога
Есть ли что-то очевидное, что я здесь упускаю? У меня только PostgreSQL установлен на сервере базы данных. Насколько я понимаю, после того, как туннель на месте и с правильными параметрами, я не должен иметь доступ к интерактивному терминалу (PSQL)?
Doh! Мой SSH-туннель нормально подключался. Для связи с PostgreSQL на сервере должен быть установлен клиент, который устанавливает удаленное соединение.
В моем случае это была одна строка на моем веб-сервере:
sudo apt-get install postgresql-client-9.3