如何使用 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 主页上的 Interactive commands section
如何使用远程服务器上的 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
我需要通过远程服务器上的 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 主页上的 Interactive commands section
如何使用远程服务器上的 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