ruby net-ssh使用交互式提示调用bash脚本

时间:2012-08-09 11:50:02

标签: ruby net-ssh

我有一个问题,希望你能帮助我

我正在尝试使用ruby ssh到一台机器上并运行一个bash脚本,这部分相当容易,但bash脚本要求我以交互方式输入用户名和密码,这就是我被卡住的地方

因此,如果我手动运行脚本,我会看到: -

./run_file.sh
Enter username:
Enter password:

因此,在输入用户名提示符时,我必须输入用户名等

我有一个简单的方法用于建立连接,我的想法是传递一个由

组成的数组
[‘command to run’, ‘username’, ‘password’] 

但我不知道如何扩展Net :: SSH调用以响应提示

  # 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

任何人都有任何想法

1 个答案:

答案 0 :(得分:0)

设法通过使用通道功能解决这个问题,这是我现在使用的方法

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