簡體   English   中英

如何使用SSHKit從遠程服務器請求用戶輸入?

[英]How to ask for a user input from a remote server with SSHKit?

我需要從遠程服務器上的ruby腳本中請求用戶輸入。 我設法用下面的代碼用bash執行它

class ConfirmHandler
  def on_data(command, stream_name, data, channel)
    puts "data received: #{data}"
    if data.to_s =~ /\?$/
      prompt = Net::SSH::Prompt.default.start(type: 'confirm')
      response = prompt.ask "Please enter your response (y/n)"
      channel.send_data "#{response}\n"
    end
  end
end

require 'sshkit'
require 'sshkit/dsl'
include SSHKit::DSL

on '<ssh-server-name>' do |host|
  cmd = <<-CMD
    echo 'Do something?';
    read response;
    echo response=$response
  CMD

  capture(cmd.squish , interaction_handler: ConfirmHandler.new)
end

當我在本地計算機上運行此腳本時,我看到

data received: Do something?
Please enter your response (y/n)
data received: response=y

我嘗試將bash CMD代碼包裝到ruby腳本中:

on '<ssh-server-name>' do |host|
  cmd = <<-CMD
    ruby -e "
      puts 'Do something?';
      require 'open3';
      response = Open3.capture3('read response; echo $response');
      puts 'response=' + response.to_s;
    "
  CMD

  capture(cmd.squish , interaction_handler: ConfirmHandler.new)
end

並得到以下結果:

data received: Do something?
Please enter your response (y/n)
data received: response=["\n", "", #<Process::Status: pid 9081 exit 0>]

我正在查看SSHKit Github主頁上的“ 交互式命令”部分 ,編寫上面的代碼。

如何使用遠程服務器上的SSKKit捕獲來自ruby腳本的用戶響應?

我能夠使用以下代碼從遠程服務器上的ruby腳本捕獲用戶響應:

# ask_response.rb

puts 'Do something?';
response = `read response; echo $response`;
puts 'response=' + response.to_s;

ask_response.rb是位於遠程服務器上的ruby腳本。 在本地運行:

on '<ssh-server-name>' do |host|
  capture("ruby ask_response.rb" , interaction_handler: ConfirmHandler.new)
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM