2012-04-02 3 views
0

알았어요,이 사람은 꽤 드문 경우지만 저는 이것에 대한 귀하의 현명한 의견에 진심으로 감사 할 것입니다.쉘 스크립트 (다른 ​​서버에서 쉘/명령을 실행하는 쉘 스크립트)를 실행하는 CGI는 출력을 반환하지 않습니다.

저는 20 명 이상의 서버를 모니터링하기 위해 CGI (Perl/SSH)를 사용하여 모니터링/운영 웹 GUI를 개발 중입니다. 대부분의 작업이 끝났습니다. 쉘 스크립트를 준비했고 거기에서 대부분의 작업을 자동화하고 있습니다. 어쨌든 우리는 우리가 수행 한 모니터링 및 자동화 작업을위한 프론트 엔드를 제공하도록 설득되었습니다.

짧게 요약하면 CGI를 실행하기 위해 서버 중 하나를 기본 게이트웨이로 사용하고 있습니다. 내 계획은 무엇입니까,이 서버에서 Perl CGI를 사용하여 예를 들어 qx() 함수를 사용하여 쉘 스크립트를 실행하고 결과를 파일에 저장합니다. 쉘 스크립트는 다른 서버에 연결하여 명령을 실행합니다. 문제는 내가 SSI에서 cgi 또는 쉘 스크립트를 실행하는 동안 잘 작동하고 출력을 출력하지만 웹을 통해 CGI를 호출 할 때 CGI 서버의 쉘 출력까지만 반환됩니다 (연결된 Im이없는 경우) SSH는 잘 작동합니다). 여기

는 CGI 코드 :

#!/bin/bash 

expect -c 'spawn ssh -q [email protected] "df -h"; expect password ; send "password\n" ; interact; '; 

exit; 

가 내가 생각하는 것은 문제가 I와 협력하고있다 (dspace91.sh 파일)

#!/usr/bin/perl -w 
use strict; 
use CGI; 
use Shell; 

my $query = new CGI; 
print $query->header(-charset=>'utf-8'); 

my $value=qx(sh dspace91.sh > space.txt); 
open(FILE, '<space.txt') or die "Can't read file [$!]\n"; 

while (<FILE>){ 
$document = $document . $_; 
} 

close FILE; 
my $gdate=qx(date); 

print "<div id='black' style='color:white'><pre>$document</pre>Information generated on <font color='#00CC00'>$gdate</font></div>"; 

여기 쉘 스크립트 코드를입니다/O 환경 변수. STDOUT과 관련이 있습니다. 확실하지 않은!

이 내가 SSH를 통해 CGI를 실행할 때 출력 :

spawn ssh -q [email protected] df -h 
[email protected]'s password: 
Filesystem   Size Used Avail Use% Mounted on 
/dev/sda2    20G 7.1G 12G 39%/
/dev/sda7    90G 25G 61G 29% /iwa 
/dev/sda6    4.9G 1.3G 3.4G 28% /oracle 
/dev/sda3    10G 595M 8.9G 7% /var 
/dev/sda1    99M 45M 49M 48% /boot 
tmpfs     16G  0 16G 0% /dev/shm 
drst002:/logs   400G 274G 127G 69% /backup-logs 
drst002:/unix   7.0T 5.2T 1.9T 74% /unix 

나는 웹 GUI를 통해 실행할 때이 출력입니다 :

spawn ssh -q [email protected] df -h 
[email protected]'s password: 

Information generated on Tue Apr 3 02:21:47 IRDT 2012 

모든 아이디어의 사람들을?

답변

2

몇 가지 아이디어 :

  • 사용 SSH 공개 키 인증와 모두 기대 사용할 필요가 없습니다.

    expect은 충분히 신뢰할만한 것으로 입증되지 않는 불쾌한 해킹입니다.

  • 시도 :

    expect -c '...' 2>&1

  • 또한, 는하지만 나는 그들이 아닌 다른 사용자로 실행되기 때문에, CGI를 보통 문제로 실행 그런 경우 생각하지 않는 개발자는 시험입니다 명령 행에서. 그 설정이 설치에 영향을 줄 수 있는지 항상 확인하십시오.

+0

의견을 보내 주셔서 감사합니다. 보안 정책으로 인해 공개 키 인증을 사용할 수 없습니다. –

+0

STDOUT과 관련이 없다고 생각하십니까? –

+0

은 "expect -c '...'2> & 1"로 테스트되었지만 동일한 결과가 발생했습니다. –

관련 문제