У нас есть настройка эластичного поиска, которая доступна только из поля перехода. Я хочу настроить ssh-туннель, чтобы я мог делать запросы с моего ноутбука или из Docker-контейнера.
Когда я запускаю ssh, либо напрямую, либо через 'систему', туннель работает, и мой пост извлекает данные. Когда я пытаюсь настроить туннель с помощью net-ssh, я получаю RestClient :: Exceptions :: ReadTimeout. Я не уверен, что мне не хватает в конфигурации net-ssh. Я предоставил упрощенный пример кода.
Попробовал запустить это в Windows с Cygwin и в контейнере Docker с Centos7.
require 'json'
require 'net/ssh'
require 'rest-client'
def fetchData
indexName = "REDACTED"
url = "http://localhost:9999/#{indexName}/_search?pretty"
body = '{"size":1, "query":{"match_all":{}}}'
resp = RestClient.post url, body, :content_type => :json, :accept => :json
return JSON.parse(resp)
end
begin
userName = 'REDACTED'
privateKey = 'id_rsa'
jumpBoxUrl = 'REDACTED.com'
elasticUrl = 'REDACTED.com'
# this works
system("ssh -fN -o StrictHostKeyChecking=no -i ~/.ssh/#{privateKey} #{userName}@#{jumpBoxUrl} -p 22 -L 9999:#{elasticUrl}:9200 sleep 10 >> logfile")
puts fetchData
# wait for the ssh to time out
sleep 5
# Timed out reading data from server (RestClient::Exceptions::ReadTimeout) - WHY?!
#
Net::SSH.start(jumpBoxUrl, userName, :port=>22, :forward_agent=>true, :verbose=>:info, :keys=>["~/.ssh/#{privateKey}"]) do |session|
session.forward.local(9999, elasticUrl, 9200)
# this works - able to authenticate to the shell box
puts session.exec!("ls -la")
# this times out - data is not returned
puts fetchData
end
end
Я ожидаю, что сообщение будет возвращать те же данные при использовании net-ssh, что и при использовании ssh.
Оцените любую помощь, которую мне не хватает в моей настройке net-ssh.