2013-04-30 6 views
8

से sysinternals PSExec का उपयोग करके स्क्रिप्ट निष्पादित करें मैं दूरस्थ सर्वर से कनेक्ट करने के लिए अपने Asp.Net वेब अनुप्रयोग से PSExec निष्पादित करने का प्रयास कर रहा हूं। किसी भी तरह से यह "Access Denied Error -5" देता है जिसमें कोई क्रेडेंशियल सेट नहीं है, और PSEXEC कमांड में प्रमाण-पत्र सेट करके यह "2250 Network connection could not be found" देता है। मैं सर्वर पर एक व्यवस्थापक हूं और मेरे पास Windows authentication and Asp.Net Impersonation सक्षम है (IIS7.5)। अधिक दिलचस्प बात यह है कि जब मैं इसे console application से निष्पादित करने का प्रयास करता हूं या यहां तक ​​कि केवल command prompt का उपयोग करके यह ठीक काम करता है। मैं एक परीक्षण के रूप में सिर्फ एक पिंग ऑपरेशन करने की कोशिश कर रहा हूँ।Asp.Net वेब अनुप्रयोग

  var startInfo = new ProcessStartInfo{ 
       CreateNoWindow = true, 
       UseShellExecute = false, 
       FileName = FilePath, 
       Arguments = CommandArgs 
      } 

      Process vsCommandProcess = Process.Start(startInfo); 

      vsCommandProcess.WaitForExit(); 
      var exitCode = vsCommandProcess.ExitCode; 
      if (vsCommandProcess.ExitCode != 0) 
      { 
       ...rest of the code 

यहाँ: - -:

FilePath --> C:\pstools\psexec.exe 
Arguments --> \\servername -accepteula -u domain\userName -p password ipconfig (1) 
       \\servername -accepteula ipconfig (2)   

(1) Gives Error 2250 (2) gives Error 5 

समान आदेश और कोड एक सांत्वना आवेदन के साथ काम करता

यहाँ मेरी कोड स्निपेट है। इसलिए मुझे विश्वास है कि यह निश्चित रूप से Asp.net एप्लिकेशन के साथ कुछ करने के लिए है जो मशीन को रिमोट के लिए क्रेडेंशियल ले जाने में सक्षम नहीं है। मैंने घटना startInfo.LoadUserProfile कोशिश की लेकिन कोई फायदा नहीं हुआ।

आपकी सहायता की सराहना करें। मैंने इसी तरह के प्रश्नों को देखने की कोशिश की लेकिन मुझे जिस समस्या का सामना करना पड़ रहा है उसका समाधान नहीं मिला।

+0

1 यदि यह कंसोल के साथ काम करता है और एएसपी वेब एप्लिकेशन के साथ नहीं, तो यह सुरक्षा समस्या की तरह लगता है। 2 क्या आप यह भी जांचते हैं कि .NET संस्करण सही है या नहीं? आईआईएस पर .net 2.0 के साथ अपना ऐप पूल चलाने का प्रयास करें (मुझे आज यह समस्या थी)। – gartenabfall

+0

मैं डॉटनेट संस्करण 4.0 का उपयोग कर रहा हूं। हां ऐसा लगता है कि अधिक प्रमाणीकरण टोकन आगे नहीं ले जाया गया है .... – PSL

+0

क्या आईआईएस आपके कमांड प्रॉम्प्ट के समान उपयोगकर्ता विशेषाधिकारों के तहत चल रहा है? – Powerslave

उत्तर

2

प्रक्रिया से psexec लेने पर विचार करें। WMI के लिए जा रहे सीधे क्या गलत हो रहा है की अधिक जानकारी दे सकता है:

var connOpts = new ConnectionOptions() 
{ 
// Optional, default is to use current identity 
    Username = "username", 
    Password = "password" 
}; 

// create a handle to the Win32_Process object on the remote computer 
ManagementScope mgmtScope = new ManagementScope(@"\\servername\root\cimv2", connOpts); 
ManagementClass w32Process = new ManagementClass(mgmtScope, 
    new ManagementPath("Win32_Process"), new ObjectGetOptions()); 

// create the process itself 
object[] createArgs = new object[] { 
    // [in] string CommandLine, 
    "notepad.exe", 
    // [in] string CurrentDirectory, 
    null, 
    // [in] Win32_ProcessStartup ProcessStartupInformation, 
    null, 
    // [out] uint32 ProcessId 
    0}; 

var result = (int)w32Process.InvokeMethod("Create", createArgs); 

switch (result) 
{ 
    case 0: /* no-op, successful start */ break; 
    case 2: throw new Exception("Access Denied"); 
    case 3: throw new Exception("Insufficient Privilege"); 
    case 8: throw new Exception("Unknown failure"); 
    case 9: throw new Exception("Path not found"); 
    case 21: throw new InvalidOperationException("Invalid Parameter"); 
} 

आप अभी भी प्रतिरूपण के साथ समस्याएं आ रही हों, यह सत्यापित करने के लिए आईआईएस सही तरीके से कॉन्फ़िगर HttpContext.Current.User.Identity की सामग्री को डंप करने के लिए सहायक हो सकता है। इसके अलावा, यदि आप केर्बेरोस (नेगोशिएट/एसपीएनईजीओ के माध्यम से) का उपयोग कर रहे हैं, तो आपको allow the machine to delegate identity की आवश्यकता हो सकती है। यदि आप एसपीएन जानते हैं कि मशीन कनेक्ट हो रही है, तो आप बाध्य प्रतिनिधिमंडल का उपयोग कर सकते हैं, लेकिन कई मामलों में अनिवार्य प्रतिनिधिमंडल को अनुमति देना आवश्यक है यदि लक्ष्य समय से पहले ज्ञात नहीं हैं।


नोट: बस ipconfig चलाने के लिए अगर आप कंप्यूटर के लिए दूरस्थ बनाने हैं, तो आप STDOUT उत्पादन वापस बुला कंप्यूटर के लिए प्राप्त करने की कोशिश के साथ उलझे बिना WMI के माध्यम से ही जानकारी मिल सकती है। Win32_NetworkAdapterConfiguration कक्षा पर एक नज़र डालें।

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