Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:cgi+;ssh不';我们不能一起工作_Ruby_Ssh_Cgi - Fatal编程技术网

Ruby:cgi+;ssh不';我们不能一起工作

Ruby:cgi+;ssh不';我们不能一起工作,ruby,ssh,cgi,Ruby,Ssh,Cgi,无法强制“cgi”和“ssh”模块一起工作。例如,这段代码 #!/usr/bin/ruby1.9 require 'cgi' require 'net/ssh' cgi = CGI.new cgi.out("status" => "302", "Connection" => "close", "Content-Length" => 1, "Location" => 'http://google.com') {' '} 2.times { |t| %x[ echo

无法强制“cgi”和“ssh”模块一起工作。例如,这段代码

#!/usr/bin/ruby1.9

require 'cgi'
require 'net/ssh'

cgi = CGI.new

cgi.out("status" => "302", "Connection" => "close", "Content-Length" => 1, "Location" => 'http://google.com') {' '}

2.times { |t| %x[ echo 'do something #{t}' >> /tmp/log.log ] }

%x[ echo 'before ssh' >> /tmp/log.log ]

Net::SSH.start('somehost.domain', 'someuser', :keys => [ "/tmp/id_rsa" ]) do |ssh|
  ssh.exec("echo 'doing some job on remote host'; sleep 5")
end

%x[ echo 'after ssh' >> /tmp/log.log ]
在web服务器下运行时,向/tmp/log生成以下输出(请注意,ssh会话开始后没有输出):

当我从shell运行时,它完全按照我的预期执行:

do something 0
do something 1
before ssh
after ssh

这是一个bug还是我做错了什么?

为什么要使用CGI?为什么不使用更现代的工具,比如,至少,或者直接与之交谈呢?另外,与其依赖重复打开子shell来重定向echo命令的输出,为什么不使用Ruby的内置记录器,或者使用
file打开日志文件。使用
a
模式打开
,以便附加到它?实际上,您的代码效率很低,并且与流程背道而驰。最后,当您从shell运行代码时,您的代码会像您一样运行。它以web服务器所有者的身份运行,当它作为CGI运行时,web服务器所有者的权限应该降低。这可能会妨碍使用SSH或它所需的资源。我之所以选择cgi,是因为脚本应该非常简单(几乎和我的例子一样),并且使用框架或框架,因为它太过简单了。但它似乎没有选择。2.通过shell进行日志记录就是一个例子。当然,我用的是记录器。3.特权并非如此-我从运行web服务器的同一用户运行脚本。
do something 0
do something 1
before ssh
after ssh