My oracle db доступен только через сервер перепрыгивания и сбалансирован по нагрузке. В результате я запускаю следующую команду фоновую туннель в Баш:создать фоновый туннель ssh в ruby
ssh ${jumpoffUser}@${jumpoffIp} -L1521:ont-db01-vip:1521 -L1522:ont-db02-vip:1521 -fN
Перед тем, как запускать мои команды на БД с помощью SQLPlus так:
sqlplus #{@sqlUsername}/#{@sqlPassword}@'#{@sqlUrl}' @scripts/populateASDB.sql
Это все работает отлично.
Теперь я хочу рубить эту процедуру.
При поиске документации по рубину я не мог найти, как поместить туннель в фоновом режиме (что было бы для меня предпочтительным), но я нашел документацию по локальной переадресации портов, которая, как я думал, будет эмулировать вышеупомянутый туннель и последующую команду sqlplus ,
Вот мой код:
Net::SSH.start(@jumpoffIp, @jumpoffUser) do |session|
session.forward.local(1521, 'ont-db01-vip', 1521)
session.forward.local(1522, 'ont-db02-vip', 1521)
puts "About to populateDB"
res = %x[sqlplus #{@sqlUsername}/#{@sqlPassword}@'#{@sqlUrl}' @scripts/populateASDB.sql > output.txt]
puts "populateDb output #{res}"
session.loop
end
Когда я бегу выше я получаю строку «О том, чтобы populateDB», но он висит на фактическом управлении командой Sqlplus. Что-то не так с моим кодом переадресации портов или как я могу поместить следующее:
ssh ${jumpoffUser}@${jumpoffIp} -L1521:ont-db01-vip:1521 -L1522:ont-db02-vip:1521 -fN
в ruby code?
https://net-ssh.github.io/ssh/v1/chapter-4.html#s1 ⇐ почему вы ожидаете, что команда, которую вы выполняете в подоболочке _running ruby process_, знает о туннеле SSH, вы только что создали? – mudasobwa
туннель должен привязывать порты на моей машине к портам на серверах db через туннель через прыжок. Это работает в bash. то вызов localhost: 1521 идет без видимых проблем на ont-db01-vip: 1521 и вызов localhost: 1522 идет без видимых проблем в ont-db02-vip: 1521 – amadain
подоболочка работает с моей машины, которая должна иметь привязки портов – amadain