2011-01-13 11 views
5

मैं एसएसएच पर एक php स्क्रिप्ट के भीतर रिमोट कमांड निष्पादित करने का प्रयास कर रहा हूं, और मैं चाहता हूं कि कमांड (stdout और stderr) से आउटपुट को मूल होस्ट में स्ट्रीम किया जाए।मैं एसएचएस के माध्यम से PHP में रिमोट कमांड कैसे निष्पादित कर सकता हूं?

मुझे पर्ल और रूबी में पता है यह संभव है। मुझे php में ऐसे कोई उदाहरण नहीं मिल सका।

कोड:

$ip = 'kssotest.yakabod.net'; 
$user = 'tester'; 
$pass = 'kmoon77'; 

$connection = ssh2_connect($ip); 
ssh2_auth_password($connection,$user,$pass); 
$shell = ssh2_shell($connection,"bash"); 

$cmd = "echo '[start]';your commands here;echo '[end]'"; 
$output = user_exec($shell,$cmd); 

fclose($shell); 

function user_exec($shell,$cmd) { 
    fwrite($shell,$cmd . "\n"); 
    $output = ""; 
    $start = false; 
    $start_time = time(); 
    $max_time = 2; //time in seconds 
    while(((time()-$start_time) < $max_time)) { 
    $line = fgets($shell); 
    if(!strstr($line,$cmd)) { 
     if(preg_match('/\[start\]/',$line)) { 
     $start = true; 
     }elseif(preg_match('/\[end\]/',$line)) { 
     return $output; 
     }elseif($start){ 
     $output[] = $line; 
     } 
    } 
    } 
} 

लेकिन जब मैंने उसे यह $php remote.php तरह अमल, मैं कोई त्रुटि मिलती है:

PHP Fatal error: Call to undefined function ssh2_connect() 
in /home/tester/PHP_SSH2/remote.php on line 6 

ssh के माध्यम से PHP में दूरदराज के आदेश पर अमल करने के लिए सबसे अच्छा तरीका क्या है?

+1

ऐसा लगता है कि आप PECL SSH2 पैकेज स्थापित नहीं किया है। –

+0

मैंने एसएसएच 2 स्थापित करने का प्रयास किया, @ http://www.php.net/manual/en/ssh2.installation.php सुडो pecl इंस्टॉल ssh2 चैनल: //pecl.php.net/ssh2-v यहां है स्टउट: पसंदीदा स्थिति "स्थिर" के भीतर pecl/ssh2 डाउनलोड करने में विफल, नवीनतम रिलीज संस्करण 0.11.2 है, स्थिरता "बीटा", "चैनल: //pecl.php.net/ssh2-0.11.2" को स्थापित करने के लिए उपयोग करें parsePackageName(): "संस्करण" न तो वैध संस्करण है और न ही "चैनल: //pecl.php.net/ssh2-version" अवैध पैकेज नाम/पैकेज फ़ाइल "चैनल: //pecl.php.net में एक वैध स्थिति है/ssh2-version " इंस्टॉल विफल हुआ और यदि मैं स्रोत से कोशिश करता हूं लेकिन कॉन्फ़िगरेशन एमएम – kamal

उत्तर

5

आप लाल टेप के कारण php संकुल नहीं जोड़ सकते हैं, तो यहाँ एक सरल वर्ग कि क्या कर सकते हैं चाल

class ExecuteRemote 
{ 
    private static $host; 
    private static $username; 
    private static $password; 
    private static $error; 
    private static $output; 

    public static function setup($host, $username=NULL, $password=NULL) 
    { 
     self::$host = $host; 
     self::$username = $username; 
     self::$password = $password; 
    } 

    public static function executeScriptSSH($script) 
    { 
     // Setup connection string 
     $connectionString = self::$host; 
     $connectionString = (empty(self::$username) ? $connectionString : self::$username.'@'.$connectionString); 

     // Execute script 
     $cmd = "ssh $connectionString $script 2>&1"; 
     self::$output['command'] = $cmd; 
     exec($cmd, self::$output, self::$error); 

     if (self::$error) { 
      throw new Exception ("\nError sshing: ".print_r(self::$output, true)); 
     } 

     return self::$output; 
    } 
} 
+0

आप कह रहे हैं कि वह एक php पैकेज जोड़ सकता है, अगर यह लाल झंडा नहीं है। किस प्रकार का PHP पैकेज आपके बारे में बात कर रहा है? कुछ तीसरे पक्ष पुस्तकालय? कोई सुझाव? – Klaus

+0

मुझे लगता है कि मैं ssh2 pecl पैकेज का जिक्र कर रहा था। हालांकि लगभग 5 साल पहले इसका जवाब देने के बाद, संगीतकार PHP के लिए उपयोगी चीज बन गया है। उन सभी संकुलों के लिए getcomposer.org देखें जिन्हें आप कभी चाहें। –

3

क्या आपने एसएसएच 2 पैकेज स्थापित किया था?

http://www.php.net/manual/en/ssh2.installation.php

+0

संकलित करने का तरीका नहीं समझ पा रहा था, तो इंस्टॉल विफल रहा सुडो pecl स्थापित ssh2 चैनल: //pecl.php.net/ssh2-version [सुडो] परीक्षक के लिए पासवर्ड: पसंदीदा राज्य "स्थिर" के भीतर pecl/ssh2 डाउनलोड करने में विफल, नवीनतम रिलीज संस्करण 0.11.2 है, स्थिरता " बीटा ", parsePackageName():" संस्करण "स्थापित करने के लिए" चैनल: //pecl.php.net/ssh2-0.11.2 "का उपयोग करें," संस्करण "न तो वैध संस्करण है और न ही" channel: //pecl.php "में एक वैध स्थिति है। नेट/एसएस 2 संस्करण " अवैध पैकेज नाम/पैकेज फ़ाइल" चैनल: //pecl.php.net/ssh2-version " इंस्टॉल विफल – kamal

+0

@ अनाम डाउनवॉटर, डाउन वोट दोस्त क्यों? –

1
SSH कुंजियों द्वारा प्रबंधित authentification के साथ

यह काफी सरल है:

+०१२३५१६४१०६
$cmd = 'ssh [email protected] script ' . $arguments . ' 2>/dev/null'; 
$result = shell_exec($cmd); 

पीएचपी 5.5

संबंधित मुद्दे

 संबंधित मुद्दे