Измените второе значение remote_host
на 'localhost'
. Возможно, ваш сервер базы данных привязан только к 127.0.0.1 (localhost), но ваш SSH-перенаправитель отправляет пакеты на ваш внешний IP-адрес (полученный путем разрешения remote_host
).
Ssh в окно linux и запустите sudo netstat -n --tcp --listen -p
. Например, я вижу это:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
...
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1552/postgres
, что означает, что postgres прослушивает только 127.0.0.1 (значение Local Address
). Если я запускаю команду psql -h 127.0.0.1
, я могу подключиться к своей базе данных. Но если я выполню команду psql -h <hostname>
или psql -h <my external IP>
, соединение будет отклонено.
Кроме того, если у меня ssh.forward.local(4444, remote_host, 5432)
, я не могу подключиться к своей базе данных через порт forward. Но если у меня есть ssh.forward.local(4444, 'localhost', 5432)
, я могу подключиться.
Попробуйте это:
Net::SSH.start(remote_host, user_name, :password => password) do |ssh|
ssh.forward.local(4444, 'localhost', 1234)
ssh.loop { true }
end
Обратите внимание, что «localhost» в этом случае интерпретируется относительно хоста, к которому вы подключились через ssh, то есть удаленного хоста.