簡體   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