Как настроить net-ssh, чтобы я мог получать данные с помощью rest-client через ssh-туннель? - PullRequest
0 голосов
/ 21 мая 2019

У нас есть настройка эластичного поиска, которая доступна только из поля перехода. Я хочу настроить 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.

1 Ответ

0 голосов
/ 30 мая 2019

Я подозреваю, что это связано с переадресацией портов.Внутри этого блока вы сможете получить доступ к elasticUrl:9200, так как в этот момент вы находитесь на прыжковом месте.

Мое предложение заключается в том, чтобы подключить SSH к Jumphost и curl конечную точку API в качестве теста.Если это сработает, вы сможете скопировать эту команду дословно и передать ее session.exec!.И, наконец, если это сработает, тогда вы сможете обновить fetchData, чтобы сделать запрос на elasticUrl:9200, и вы отправитесь в гонки.

...