繁体   English   中英

Ruby Net / ssh脚本未关闭

[英]Ruby net/ssh script not closing

我有一个ruby脚本,我在其中使用net / ssh将ssh SSH到服务器,sudo -s,su-用户,运行脚本并回答该脚本的问题。 到目前为止,我已经能够完成所有操作,登录,完成所有su / sudo内容,运行脚本并回答其问题,但是看来,我创建的通道不会关闭并结束脚本。 它全部运行,但是在脚本运行后挂起。 我究竟做错了什么? 我是ruby的菜鸟,所以我不太确定发生了什么。 谢谢你的帮助!

以下是我所拥有的:

Net::SSH.start("server01", 'user') do |ssh|
  ssh.open_channel do |channel|
    channel.on_request "exit-status" do |channel, data|
      $exit_status = data.read_long
    end

    channel.on_data do |channel, data|
      data
    end

    channel.request_pty do |channel, data|
      channel.send_data("sudo -s\n")
      channel.send_data("su - user2\n")
      sleep 0.5

      channel.send_data("/opt/scripts/test\n")
      sleep 10

      channel.send_data("answer1\n")
      sleep 5

      channel.send_data("answer2\n")
      sleep 5

      channel.send_data("answer3\n")
      sleep 10
    end

    channel.wait
    puts "SUCCESS" if $exit_status == 0
  end
end

实际上,在测试中,您需要发送exit\\n ,否则将挂起。

因此,请在睡眠后尝试添加它(您真的需要睡眠10吗?)

 channel.send_data("answer3\n")
 sleep 10
 channel..send_data("exit\n")

sudo -u user2 -H /opt/scripts/test也会使其生效,因此您只需要退出一个shell。 按照您的脚本原样启动3个shell。 登录并请求PTY时返回1,运行根shell(sudo -s)时返回一个,而当用户切换到user2时返回另一个。

所以块看起来像这样

channel.request_pty do |channel, data|
  channel.send_data("sudo -u user2 -H /opt/scripts/test")
  sleep 10

  channel.send_data("answer1\n")
  sleep 5

  channel.send_data("answer2\n")
  sleep 5

  channel.send_data("answer3\n")
  sleep 10
  channel.send_data("exit\n")

end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM