2012-01-06 5 views
1

Perl CGI 스크립트에서 ssh, mkdir을 실행하려고합니다. 작동하지 않습니다. 하지만 일반적인 펄 스크립트에서는 정상적으로 작동합니다. Perl CGI 스크립트에서 명령을 실행하는 방법을 말해 줄 수 있습니까?Perl CGI에서 어떻게 UNIX 명령을 사용할 수 있습니까?

+3

실제 코드는 흥미로울 것입니다. 어떤 명령이 "일반 스크립트"에서는 작동하지만 "CGI"에서는 작동하지 않습니까? 무슨 오류 메시지가 나옵니까 ('$!')? –

+0

demo.pl에서 나는 시스템 ("ssh username @ machinename 'ls/directoryname'") 에서 demo.cgi를 사용하고 있습니다. 나는 정상적인 펄 스크립트에서 잘 작동하는 디렉토리를 만들기위한 시스템 명령조차도 작동하지 않는 동일한 명령을 사용하고 있습니다. perl cgi에서는 그렇지 않습니다. 명령은 다음과 같습니다. system ("mkdir dirname"); –

+0

'system'은 stdout을 캡처하지 않습니다. bash에서 스크립트를 시도 할 때 "작동 중"이라고 생각하면, 터미널에 인쇄 된 펄 프로세스의 배경에서 stdout을 볼 수 있기 때문입니다. 이 데이터는 perl에서는 사용할 수 없으며 아마도 웹 서버에도 없을 것입니다. 'qx()'또는 backticks를 사용하여 stdout을 캡처하십시오. – TLP

답변

0

시스템() 또는 popen()이 아마도 당신이 찾고있는 것일 수 있습니다. 더러운 느낌이 든다면 다시 똑딱 소리를 사용할 수 있다고 생각합니다.

7

웹 서버를 통해이 스크립트를 실행하는 경우 mkdirssh과 같은 명령을 실행하는 데 필요한 권한이 활성 사용자 (예 : "nobody", "www"등)에 없을 수 있습니다. 그렇다면 펄이 해결할 수있는 것이 아닙니다. 파일을 작성하고 명령을 수행하도록 설정 웹 사용자 권한을 가지고, 또한 보안 문제입니다

print "The active user is: ", `whoami`; 

: 당신은 활성 사용자가 같은 뭔가 누구 테스트 할 수 있습니다.

+0

예 웹 서버를 통해 실행 중입니다. 그래서 Perl CGI를 통해 SSH를 사용하는 다른 컴퓨터에 로그인 할 수있는 방법이 있으며 SSH에는 암호가 필요하지 않습니다. –

+1

@ user970553 나는 이미 당신에게 그 질문에 대답하는 데 필요한 정보를주었습니다. – TLP

0

unix 명령을 실행해야합니까? Perl에는 mkdir이 내장되어 있으며 SSH를 처리 할 수있는 모듈이 있습니다. 일반적으로 CGI 프로세스는 기능이나 시스템에 대한 액세스가 제한됩니다. Perl에서 더 많이할수록 좋습니다.

+0

솔루션에 대한 감사의 표현 –

관련 문제