ruby net-ssh calling bash script with interactive prompts

这一生的挚爱 提交于 2019-12-02 16:19:41

问题


I have a problem that I hope you can help me with

I’m trying to use ruby to ssh onto a machine and run a bash script, this part is fairly easy but the bash script requires me to entry a username and password interactively and this is where I’m stuck

So if I run the script manually I see:-

./run_file.sh
Enter username:
Enter password:

So at the enter Username prompt I have to enter the username etc

I’ve got a simple method I use to make the connection and my idea was to pass in an array made up of

[‘command to run’, ‘username’, ‘password’] 

but I don’t know how to extend the Net::SSH call to respond to the prompts

  # ssh conectivity method
  def command_ssh(host, cmd)
    require 'net/ssh'
   user = LocalConfig::SSH_DETAILS[:user]
   pass = LocalConfig::SSH_DETAILS[:pass]

    Net::SSH.start(host, user, :password => pass, :paranoid => false, :auth_methods => ['password'], :timeout => 10 )do |ssh |
      output = (ssh.exec!(cmd[0]))
      return output
    end
  end

anyone got any ideas


回答1:


managed to fix this by using the channel function, here's the method I use now

def connect(host,command)

  require 'rubygems'
  require 'net/ssh'

  user = LocalConfig::SSH_DETAILS[:user]
  pass = LocalConfig::SSH_DETAILS[:pass

    o = ""
    Net::SSH.start(host, user, :password => pass, :paranoid => false, :auth_methods => ['password'], :timeout => 30 )do |ssh |
      channel = ssh.open_channel do |ch|
    ch.exec(command) do |ch2, success|
      ch2.send_data "myUserName\n"
      ch2.send_data "mPassWord\n"

      ch.on_data do |ch2, data|
        o += data
      end
    end
      end
      channel.wait
      return o.to_s
    end
end


来源:https://stackoverflow.com/questions/11882776/ruby-net-ssh-calling-bash-script-with-interactive-prompts

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!