Rails用用户输入运行shell命令

时间:2018-11-21 22:11:18

标签: ruby-on-rails ruby linux shell

我想从Rails应用程序控制器运行shell命令。 我的应用代码是:

cmd = "openssl genrsa -des3 -out testfolder/testkey.key 1024"
system cmd 

比shell会询问我密码,因此,如果您从终端运行此命令,则可以输入密码,但是如果我是从控制器运行,则不能。

出于某些原因,我不想使用Rails OPENSSL。

我尝试过Google,但没有结果。

我也尝试过这样的事情:

cmd = "openssl genrsa -des3 -out testfolder/testkey.key 1024"
system cmd
system 'echo', '111111Passs'

这不能解决我的问题。

我的问题是: 如何将密码从控制器传递到外壳? 比我该如何提交此命令? (模拟按键盘上的ENTER键)

谢谢

2 个答案:

答案 0 :(得分:2)

require 'pty'
require 'expect'

PTY.spawn("openssl genrsa -des3 -out testfolder/testkey.key 1024") do |reader, writer|
  reader.expect(/Enter pass phrase/)
  writer.puts("<password>")
end

答案 1 :(得分:1)

您可以尝试通过参数传递通行证(不推荐):

openssl genrsa -des3 -out testfolder/testkey.key -passout pass:SECRET_PASS 1024

一种更安全的选择是将密码短语写入临时文件并使用此密码:

openssl genrsa -des3 -out testfolder/testkey.key -passout file:passphrase.txt 1024

this SO thread中无耻地提出了答案,该答案具有更多细节和更好的解释。