2012-05-30 10 views
5

का उपयोग कर एसएसएच कनेक्शन एसएसएच कनेक्शन के माध्यम से एसएसएच कनेक्शन के माध्यम से कनेक्शन के लिए सी # के साथ कनेक्शन के लिए मुझे एक लिंक दिया गया था।एसएसएच कनेक्शन एसएसएच.NET लाइब्रेरी

लाइब्रेरी में LINK है क्योंकि आप में से बहुत से रोचक पाएंगे क्योंकि आपको मैन्युअल रूप से एक एसएसएच चैनल खोलने की आवश्यकता नहीं है।

यह एक बहुत विस्तृत पुस्तकालय है और इसमें कई सुविधाएं हैं लेकिन मैं जो करना चाहता हूं वह बहुत आसान है। मैं डेटाबेस में लिखने के लिए हर बार एक एसएसएच चैनल खोलना चाहता हूं।

जब मैं स्रोत है कि मैं कोड के इस हिस्से TestSshCommand.cs में पाया जा सकता है जो करने के लिए आया था प्रदान की जाती है के माध्यम से खोज रहा था और मुझे लगता है कि मैं अपने कनेक्शन के लिए इस भाग का उपयोग कर सकते, लेकिन मैं करने के लिए आपकी मदद की जरूरत इसे काम करें क्योंकि मेरे पास कनेक्शन कनेक्शन है, मुझे नहीं पता कि यह सब कैसे कनेक्ट करें।

कोड:

public void Test_Execute_SingleCommand() 
     { 
      using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD)) 
      { 
       client.Connect(); 
       var result = ExecuteTestCommand(client); 
       client.Disconnect(); 

       Assert.IsTrue(result); 
      } 

गैर SSH चैनल में connectiong के लिए मेरे कोड है:

con.ConnectionString = ConfigurationManager.ConnectionStrings["Con2"].ConnectionString; 
      con.Open(); 
      cmd = new MySqlCommand("SELECT COUNT(*) FROM " + ConfigSettings.ReadSetting("main"), con); 

    //...... more of the code 

तो कैसे मैं तो यह पहली बार एक SSH चैनल खोल सकते हैं ऊपर एक के लिए इस कोड को जोड़ सकते हैं और फिर मेरी क्वेरी निष्पादित करें?

मैं डाल करने के लिए मेरे कोड अंदर और डिस्कनेक्ट कार्यों कनेक्ट की ज़रूरत है?

एक और सोचता है कि मैंने .dll संदर्भों के अंदर फ़ाइल दर्ज की है और मुझे कहना होगा कि आयात में से कोई भी काम नहीं कर रहा है। तो क्या कोई व्यक्ति लाइब्रेरी डाउनलोड कर सकता है और यह देखने के लिए इस सरल कोड को आजमा सकता है कि क्या आपके प्रोजेक्ट पर संदर्भ काम कर रहे हैं और ताकि हर कोई (जो बहुत कुछ हो) उनके भविष्य की परियोजनाओं के लिए एक समाधान समाधान हो सकता है?

संपादित करें:

यह मेरा कोड है कि मैं बाद में करने के लिए कोशिश कर रहा था है। मेरा एसएसएच कनेक्शन काम करता है अब इसे काम करने के लिए केवल उन दोनों को गठबंधन करने की आवश्यकता है।

समस्या यह है कि मुझे अपने पीसी पर स्थानीय रूप से एक डेटाबेस होना चाहिए और सर्वर से कनेक्ट करने की आवश्यकता है। तो पोर्ट अग्रेषण somone के रूप में काम नहीं करेगा मंच पर कहता है कि मैं बंदरगाह आगे नहीं जबकि mysql पहले से ही

using (var client = new SshClient("cpanel****", "******", "******")) 
      { 
      client.Connect(); 
      con = new MySqlConnection(GetConnectionString()); 
      con.Open(); 
      cmd = new MySqlCommand(String.Format("insert into {0} values (null, ?Parname , ?Parname2, ?Parname3, ?Parname4, ?Parname5, ?Parname6, ?Parname7);", ConfigSettings.ReadSetting("main")), con); 
      cmd.Parameters.Add("?Parname", MySqlDbType.Double).Value = Math.Round(deciLat, 5); 
      // ... more parameters 
      cmd.ExecuteNonQuery(); 
      client.Disconnect(); 
      } 
+0

आपको शायद स्थानीय पोर्ट से रिमोट को आगे बढ़ाने के लिए लाइब्रेरी का उपयोग करना चाहिए और अपने कनेक्शन स्ट्रिंग में इसका उपयोग करना चाहिए। – user629926

उत्तर

4

चलाने के लिए बंदरगाह हो सकता है आप अपने SSH कनेक्शन के साथ सेटअप पोर्ट अग्रेषण की आवश्यकता होगी ...

मूल रूप से एक SSH कनेक्शन है कि स्थानीय होस्ट पर पोर्ट 3306 पर सुनता है और अग्रेषित करता है कि आपके MySQL DB सर्वर से ...

अपने MySQL DB के लिए कनेक्शन स्ट्रिंग में करें कि आपने अपनी SSH कनेक्शन जबकि server=localhost को हिस्सा server=... बदलने की जरूरत है अपने MySQL डीबी सर्वर के आईपी पर जाने की जरूरत है।

आप नहीं आगे पोर्ट 3306 आप किसी भी बंदरगाह आप चाहते हैं का उपयोग कर सकते कर सकते हैं, लेकिन आपको अतिरिक्त port= कनेक्शन स्ट्रिंग के भाग को बदल ... एक अलग बंदरगाह के सिलसिले तारों पर उदाहरण के लिए here देखने की जरूरत है ... एसएसएच कनेक्शन अभी भी 3306 को लक्षित करता है लेकिन इस मामले में लोकहोस्ट पर एक अलग बंदरगाह पर सुनता है ...

यहाँ स्रोत कोड के साथ कुछ काम कर उदाहरण हैं (हालांकि SSH.NET साथ के बाद से मैं SSH.NET का उपयोग नहीं करते नहीं है, लेकिन यह फिर भी आप IMO शुरू करने चाहिए): (

+0

हाय, आपकी कोशिश के लिए धन्यवाद लेकिन मैंने पहले ही यह सब कोशिश की है। कृपया मेरे प्रश्न को हर तरह से पढ़ें। मैंने बंदरगाह अग्रेषण –

+0

के बारे में लिखा था, मुझे एसएसएच कनेक्शन को गठबंधन करने की आवश्यकता है क्योंकि मैं एक एसएसएच कनेक्शन –

+0

@denonth पास कर रहा हूं, आप किसी भी एसएसएच कनेक्शन का उपयोग नहीं कर सकते ... एसएसएच कनेक्शन पोर्ट पोर्टिंग कनेक्शन के रूप में स्थापित होना चाहिए और आपको इसकी आवश्यकता है अपनी MySQL कनेक्शन स्ट्रिंग बदलें - अन्यथा यह काम नहीं करेगा। – Yahia

6

आप बस जो आपके MySQL उदाहरण के द्वारा प्रयोग किया जा रहा है 3306 की तुलना में सुरंग के लिए एक अलग स्थानीय पोर्ट का उपयोग करने की जरूरत है। पोर्ट 8001 के साथ नीचे

उदाहरण के बजाय प्रयोग किया जा रहा:

using (var client = new SshClient("ssh_hostname", "ssh_username", "ssh_password")) 
{ 
    client.Connect(); 
    var tunnel = new ForwardedPortLocal("127.0.0.1", 8001, "127.0.0.1", 3306); 
    client.AddForwardedPort(tunnel); 
    tunnel.Start(); 
    using (var DB = new DBContext()) 
    { 
    //MySQL interaction here! 
    scores = DB.Table 
     .Where(x => !String.IsNullOrEmpty(x.SomeField)) 
     .ToList(); 
    } 
    tunnel.Stop(); 
} 

और फिर आप सर्वर 127.0.0.1 और पोर्ट 8001

server=127.0.0.1;port=8001 

यह कुछ भी कनेक्ट करेगा आपके कनेक्शन स्ट्रिंग में यह सुनिश्चित कर लें 127.0.0.1:8001 को ssh_hostname पर जा रहा है: 3306।

+0

यह पूरी तरह से काम करता है, बहुत अधिक है।हालांकि, क्या यह हर बार इसे खोलने के लिए अनिवार्य है? क्या मैं केवल एक बार खोल सकता हूँ? – DanielGatti

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