Windows ssh के बराबर - रिमोट मशीन और एक्सेस कमांड लाइन से कैसे जुड़ें?


18

मुझे एक मुश्किल समय आ रहा है जिसमें एक ऐसे ढांचे का विस्तार करने का उपाय है जो खिड़कियों के लिए * निक्स मशीनों के लिए डिज़ाइन किया गया था। वर्तमान में यह फ्रेमवर्क एक * nix सर्वर से चलता है और दूसरे * nix सर्वर से ssh का बाहर निकलता है और लॉग फाइल की जाँच, सोर्स कंट्रोल से फाइल सिंक करना, सोर्स कंट्रोल में लॉग को सबमिट करना आदि जैसे विभिन्न कमांड्स का एक गुच्छा तैयार करता है। इस पर अटका हुआ है कि दूरस्थ विंडोज़ मशीनों से कैसे कनेक्ट किया जाए और कमांड लाइन तक कैसे पहुंचा जाए। कनेक्शन एक और विंडोज मशीन से भी आ सकता है, इसे यूनिक्स मशीन से शुरू करने की आवश्यकता नहीं है, यह विंडोज़ से विंडोज के बजाय यूनिक्स से खिड़कियों तक जा सकता है।

यहां इस बात का उदाहरण दिया गया है कि वर्तमान में यूनिक्स सिस्टम पर कैसे कमांड चलती हैं। ऐसा कुछ लूप में है जो सर्वर नामों की सूची से गुजरता है। मुझे विंडोज़ मशीनों पर चलने के लिए ऐसा कुछ प्राप्त करने की आवश्यकता है।

ssh ${user}@${server} "cd /app/app_name/logs; <export source control params>; <submit logs to source control>" >> Log.txt

इसके अलावा, मैं तीसरे पक्ष के उपकरण का उपयोग नहीं करना पसंद करूंगा (मेरा बजट लगभग $ 0 है)। मैंने PsExec और कुछ अन्य लोगों की जांच की है, लेकिन ऐसा लगता है कि आपको व्यवस्थापक पहुंच की आवश्यकता है या उपयोगकर्ताओं को सादे पाठ में पास / पास करना होगा।


डिज़ाइन के अनुसार, एक गैर-प्रशासनिक उपयोगकर्ता सामान्यतः रिमोट मशीन पर कोड नहीं चला सकता है। आपको अपना समाधान स्वयं बनाना पड़ सकता है। क्या एक विशिष्ट संदर्भ है जिसमें कोड को चलाने की आवश्यकता है? क्या हर बार समान चलाने के आदेश हैं?
Harry Johnston

जब आप MobaSSH को सर्वर के रूप में स्थापित कर सकते हैं और एक क्लाइंट के रूप में पोटीन का उपयोग कर सकते हैं, या जो कुछ भी आप अधिक या कम चाहते हैं (जो मेरे अनुभव में डूबा हुआ है) करने के लिए psexec का उपयोग करें, विंडोज दुनिया में बराबर मुहावर का उपयोग किसी शेल में नहीं करना सभी, लेकिन दूरस्थ निष्पादन के लिए कमांड स्तर के समर्थन पर भरोसा करना चाहे वह एक विरासत कमांड हो या नेटवर्क शेयर और मैप किए गए ड्राइव के साथ संयुक्त रूप से।
Shanteva

जवाबों:


13

पॉवर्सशेल रेमोटिंग का उपयोग करें: https://msdn.microsoft.com/en-us/powershell/scripting/core-powershell/running-remote-commands

बेशर्मी से कॉपी-पेस्ट:

विंडोज पॉवरशेल रेमोटिंग

Windows PowerShell रीमोटिंग, जो WS-Management प्रोटोकॉल का उपयोग करता है, आपको एक या कई दूरस्थ कंप्यूटरों पर कोई भी Windows PowerShell कमांड चलाने देता है। यह आपको लगातार कनेक्शन स्थापित करने देता है, 1: 1 इंटरैक्टिव सत्र शुरू करता है और कई कंप्यूटरों पर स्क्रिप्ट चलाता है।   Windows PowerShell रीमोटिंग का उपयोग करने के लिए, दूरस्थ कंप्यूटर को दूरस्थ प्रबंधन के लिए कॉन्फ़िगर किया जाना चाहिए।   आपके द्वारा Windows PowerShell रीमोटिंग कॉन्फ़िगर करने के बाद, कई रीमोटिंग रणनीतियाँ आपके लिए उपलब्ध हैं। इस दस्तावेज़ के शेष केवल उनमें से कुछ को सूचीबद्ध करता है।

एक इंटरैक्टिव सत्र प्रारंभ करें

एकल दूरस्थ कंप्यूटर के साथ एक इंटरैक्टिव सत्र शुरू करने के लिए, Enter-PSSession cmdlet का उपयोग करें। उदाहरण के लिए, Server01 दूरस्थ कंप्यूटर के साथ एक इंटरैक्टिव सत्र शुरू करने के लिए, टाइप करें:

Enter-PSSession Server01

जिस कंप्यूटर से आप कनेक्ट हैं, उसका नाम प्रदर्शित करने के लिए कमांड प्रॉम्प्ट बदलता है। तब से, दूरस्थ कंप्यूटर पर प्रॉम्प्ट पर चलने वाले किसी भी आदेश और परिणाम को स्थानीय कंप्यूटर पर प्रदर्शित किया जाता है।

इंटरेक्टिव सत्र समाप्त करने के लिए, टाइप करें:

Exit-PSSession

रिमोट कमांड चलाएं

एक या कई दूरस्थ कंप्यूटरों पर किसी भी कमांड को चलाने के लिए, Invoke-Command cmdlet का उपयोग करें। उदाहरण के लिए, सर्वर 01 और Server02 दूरस्थ कंप्यूटर पर गेट-यूआईसीलचर कमांड चलाने के लिए टाइप करें:

invoke-command -computername Server01, Server02 {get-UICulture}

आउटपुट आपके कंप्यूटर पर वापस आ जाता है।

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

एक स्क्रिप्ट चलाएँ

एक या कई दूरस्थ कंप्यूटरों पर स्क्रिप्ट चलाने के लिए, इनवोक-कमांड cmdlet के फ़ाइलपैथ पैरामीटर का उपयोग करें। स्क्रिप्ट आपके स्थानीय कंप्यूटर पर या उसके लिए सुलभ होनी चाहिए। परिणाम आपके स्थानीय कंप्यूटर पर वापस आ जाते हैं।

उदाहरण के लिए, निम्न कमांड Server01 और Server02 दूरस्थ कंप्यूटरों पर DiskCollect.ps1 स्क्रिप्ट चलाता है।

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

एक स्थायी कनेक्शन स्थापित करें

डेटा साझा करने वाले संबंधित आदेशों की एक श्रृंखला को चलाने के लिए, दूरस्थ कंप्यूटर पर एक सत्र बनाएं और फिर आपके द्वारा बनाए गए सत्र में कमांड चलाने के लिए Invoke-Command cmdlet का उपयोग करें। एक दूरस्थ सत्र बनाने के लिए, नए-PSSession cmdlet का उपयोग करें।

उदाहरण के लिए, निम्न कमांड Server01 कंप्यूटर पर एक दूरस्थ सत्र और Server02 कंप्यूटर पर एक और दूरस्थ सत्र बनाता है। यह $ s चर में सत्र वस्तुओं को बचाता है।

$s = new-pssession -computername Server01, Server02

अब जब सत्र स्थापित हो गए हैं, तो आप उनमें कोई भी आदेश चला सकते हैं। और क्योंकि सत्र लगातार होते हैं, आप एक कमांड में डेटा एकत्र कर सकते हैं और एक बाद की कमांड में इसका उपयोग कर सकते हैं।

उदाहरण के लिए, निम्न कमांड $ s चर में सत्रों में गेट-हॉटफ़िक्स कमांड चलाता है और यह $ h चर में परिणाम बचाता है। $ H चर $ s में प्रत्येक सत्र में बनाया गया है, लेकिन यह स्थानीय सत्र में मौजूद नहीं है।

invoke-command -session $s {$h = get-hotfix}

अब आप बाद के आदेशों में $ h चर में डेटा का उपयोग कर सकते हैं, जैसे कि निम्नलिखित। परिणाम स्थानीय कंप्यूटर पर प्रदर्शित किए जाते हैं।

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }

4
यह इसे करने का मूल तरीका है और स्वीकृत उत्तर IMHO होना चाहिए।
Gregory Higley

SSH सर्वर 22 पोर्ट का उपयोग करने के लिए कनेक्ट करने के लिए, क्या आप कृपया मुझे इस PowerShell समाधान उपयोग पोर्ट की जांच करने में मदद कर सकते हैं?
Luke

1
@Luke blogs.technet.microsoft.com/christwe/2012/06/20/... 5985-5986 डिफॉल्ट हैं, लेकिन ज्यादातर चीजों की तरह, आप एक और पोर्ट निर्दिष्ट कर सकते हैं
Shanteva

4

प्रयत्न tunnelier Bitvise से। वह एक ssh क्लाइंट है। वहाँ भी एक है ssh सर्वर एक विंडोज़ मशीन से कनेक्ट करने के लिए। दोनों आपको वेब प्रॉक्सी या पोर्ट टनलिंग जैसी अधिक उन्नत चीजों के साथ बहुत सुरक्षित कनेक्शन बनाने में सक्षम बनाते हैं।


दुर्भाग्य से SSH सर्वर फ्रीवेयर नहीं है।
Harry Johnston

4

विंडोज के लिए ओपनएसएसएच पोर्ट स्थापित करें - यह मुफ्त है और क्लाइंट और सर्वर दोनों प्रदान करता है।


1
हालाँकि, सुरक्षा के मुद्दे हैं, क्योंकि यह साइगविन का उपयोग करता है, यह एकाधिक-उपयोगकर्ता सुरक्षित नहीं है (जब तक मेरी जानकारी पुरानी न हो?)
Harry Johnston

1
Microsoft इसे ठीक से विंडो में पोर्ट करने पर काम कर रहे हैं। लेकिन यह काफी धीमी प्रगति है: blogs.msdn.microsoft.com/powershell/2017/12/15/...
Martin Brown

2

तुम कोशिश कर सकते हो psexec जो आपको फ़ाइल शेयर सेवा पर एक दूरस्थ शेल प्रदान करता है (या हालाँकि यह कहा जाता है) वहाँ भी winexe यदि आप क्लाइंट के रूप में लिनक्स का उपयोग करना चाहते हैं।


1

मैं वास्तव में PowerShell के विचार को पसंद करता हूं, हालांकि कॉन्फ़िगरेशन सर्वर और क्लाइंट पर कुछ मिनट लग सकता है।

शनटेवा के पूर्ण उत्तर के अलावा, जो पॉवरशेल के उपयोग का सुझाव देता है, आपको इस पर भी ध्यान देना चाहिए यहाँ Howtogeek वेबसाइट पर वास्तव में कैसे सक्षम करें (और अनुमति) PowerShell सर्वर के लिए एक दूरस्थ कनेक्शन। सर्वर कंप्यूटर पर आवश्यक थोड़ा सा विन्यास है।

दो महत्वपूर्ण चीजें जो आपको करने की आवश्यकता है: (मुझे इस बात का उल्लेख करने की आवश्यकता नहीं है कि आपको प्रत्येक विन्यास को एक प्रशासक के अधिकार के रूप में करना है; बस PowerShell / cmd को 'व्यवस्थापक के रूप में खोलें')

  • सबसे पहले, WINRM सेवा (विंडोज़ अनुप्रयोग जो दूरस्थ कमांड को संसाधित करता है) को सक्षम करें सर्वर

सर्वर कंप्यूटर पर, PowerShell खोलें और चलाएँ:

Enable-PSRemoting -Force

ऐसा करने का एक और तरीका भी है। आप कमांड प्रॉम्प्ट खोल सकते हैं और चला सकते हैं:

winrm -quickconfig

बदलने के लिए बहुत अधिक कॉन्फ़िगरेशन हो सकते हैं। अब इसकी कोई जरूरत नहीं।

  • दूसरा, यह उल्लेखनीय है कि क्लाइंट और सर्वर हमेशा एक दूसरे को प्रमाणित करने की कोशिश कर रहे हैं। सर्वर यह सुनिश्चित करना चाहता है कि ग्राहक वास्तव में सर्वर तक पहुंच की अनुमति देता है या नहीं। इस खातिर आप सर्वर को कुछ प्रमाणीकरण जानकारी प्रदान करने जा रहे हैं (SSH के समान, आप शायद उपयोगकर्ता नाम / पासवर्ड प्रदान कर रहे हैं)। इसके विपरीत, क्लाइंट यह सुनिश्चित करना चाहता है कि सर्वर एक विश्वसनीय है। विभिन्न योजनाओं का उपयोग किया जा सकता है, जैसे कि एक सर्वर पर भरोसा करना जो एक स्मार्ट सार्वजनिक प्रमाण पत्र प्रदान करता है या आईपी पते के आधार पर भरोसा करता है या शायद हर किसी पर भरोसा करता है !! फिर से हमारे पास एसएसएच पर एक ही प्रक्रिया है जहां एक सर्वर कुछ प्रमाणीकरण जानकारी प्रदान कर सकता है। (चलो अभी के लिए SSH विवरण भूल जाते हैं।)

यदि दोनों कंप्यूटर एक ही 'डोमेन' पर हैं (कंप्यूटरों का एक समूह जिसे सभी के पास अलग-अलग नियम और भूमिकाएं सौंपी गई हैं), तो प्रक्रिया सरल प्रतीत होती है (मैंने ऐसा नहीं किया है)।

लेकिन, जैसा कि आप शायद अपने सर्वर को इंटरनेट के माध्यम से एक्सेस करना चाहते हैं (तकनीकी रूप से वान नेटवर्क कहा जाता है), कुछ जटिलताएं हैं और आपको दूरस्थ सर्वर से कनेक्शन की अनुमति देने के लिए कुछ कॉन्फ़िगरेशन को बदलना होगा। पर ग्राहक कंप्यूटर WINRM सेवा को सक्षम करता है। प्रक्रिया वही है जो हमने ऊपर सर्वर के लिए किया है। बस कमांड चलाएं:

Enable-PSRemoting -Force

(फिर से उल्लेखनीय! कुछ संदर्भ कहते हैं कि क्लाइंट कंप्यूटर और सर्वर कंप्यूटर 'निजी' नेटवर्क पर होना चाहिए, या पूरी बात काम नहीं करेगी। मुझे इसके लिए त्रुटि संदेश मिल रहे हैं जब मैं उपरोक्त कमांड चलाता हूं, लेकिन सब कुछ काम करता है । मैं इस तथ्य के बारे में सुनिश्चित नहीं हूँ।

फिर पर चलाएं ग्राहक पॉवरशेल में कंप्यूटर:

Set-Item wsman:\localhost\client\trustedhosts *

जिसका अर्थ है कि क्लाइंट सभी सर्वर (होस्ट) पर भरोसा करेगा। अंत में, इसे चलाएं (on) ग्राहक फिर से मैं जोर देता हूं):

Restart-Service WinRM

तुम जाने के लिए तैयार हो। शेष श्वेतव के उत्तर की जाँच करें। CLIENT कंप्यूटर पर, उदाहरण के लिए चलाएँ:

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

यह पासवर्ड के लिए पूछेगा और रिमोट कंसोल खुलता है जो दिखता है:

[12.34.56.78]: PS C:\Users\Administrator\Documents>

फिर जैसे आप SSH के लिए करते हैं वैसे ही कमांड दर्ज करें।


-2

पुट्टी एक लोकप्रिय विंडोज एसएसएच क्लाइंट भी है।


क्या आपको इसके लिए SSH सर्वर की आवश्यकता नहीं होगी, न कि केवल एक ग्राहक की?
Ajedi32

2
इस सवाल का जवाब नहीं है। वह एक सर्वर-क्लाइंट संयोजन की तलाश में है
guidod
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.