2012-04-01 2 views
1

나는 내 전용 서버에 연결하는 Phpseclib을 사용하여 다음 화면 프로세스에 연결 후 화면 프로세스 내에서 명령을 실행하고 결과를 반환하려고 안녕phpseclib ssh를 첨부

나는 서버에 연결하는 PHP를 얻을 수 있고 스크린 프로세스에 다시 붙이면된다고 생각하지만, 내가 에코를하려고하는 명령은 내가 예상했던 것 대신에 "1"을 반환한다.

<?php 
set_include_path(get_include_path() . PATH_SEPARATOR . '.././static/classes/phpseclib'); 

include('.././static/classes/phpseclib/Net/SFTP.php'); 

//SSH Run Command 
$ssh = new Net_SSH2($host); 
if (!$ssh->login($user,$pass)) { 
    exit('Login Failed SSH'); 
} 

//Run the server 
echo 'Attaching to screen process...'; 
$ssh->exec('screen -r server1'); 
echo 'Attached'; 
echo $ssh->write('status\n'); 
?> 

누군가 내 문제에 대해 밝힐 수 있다면 감사하게 생각합니다.

또한 내가 연결하는 SRCDS 서버이고 srcds 게임 서버를 쿼리하는 PHP 스크립트를 사용할 수 있기 때문에 더 많은 정보를 알 수 있습니다. 공유 웹 호스팅에서 작동하기 때문에 작동하지 않습니다. 소켓을 연결해야하는 포트를 차단합니다.

답변

0

$ ssh-> exec ('screen -r server1') 대신 $ ssh-> write ("screen -r server1 \ n")해야 할 수도 있습니다.

exec() 문제는 항상 새로운 채널에서 명령을 수행한다는 것입니다. 이것은 phpseclib에는 문제가 아니지만 SSH 프로토콜과 관련됩니다. 퍼티를 통해 "screen -r server1"을하고, 퍼티를 닫고, 퍼티를 다시 열고, "상태"를 수행하고, 원하는 것을 출력 할 것을 기대하는 것과 같습니다. 그렇지 않습니다.

관련 문제