如何从Ruby输入另一个进程提示的密码

时间:2014-03-09 09:54:20

标签: ruby io popen

我正在编写一个需要使用revssh脚本在远程Raspberry PI上运行命令的应用程序。 revssh是一个自定义脚本,可以在某种程度上实现Revssh协议概念。它使用ssh反向隧道将命令从服务器发送到客户端。

我正在使用Ruby 2.1,我尝试使用IO.popen来做这件事,但它不起作用,所以我尝试了以下内容:

# revssh (short for reverse ssh ) enables the execution of remote commands 
# from the server on connected clients, like the 'psu_pi_analytics' here. but it requires
# to enter a root password each time you want to run a command using 'revssh -c' 
IO.popen('revssh -c psu_pi_analytics uname -a', 'w+') do|io|
  io.puts 'password' # enter the password when prompted
  puts io.gets
end

如果要执行的命令在本地计算机上运行,​​则此代码可以正常工作,但在我的情况下则不行。 所以任何想法或建议。

这里重要的是如何处理revssh脚本使用ssh创建的新连接,如果脚本直接从终端运行,则在终端中管理。

修改

不工作我的意思是它仍然会提示输入密码,即使我把密码输入io。

1 个答案:

答案 0 :(得分:0)

您可以使用类似Expect的库(例如RExpect,Expect4r)与其他进程进行交互。

与此相关的另一个问题:Is there an Expect equivalent gem for Ruby?