Windows SSH: 'निजी-कुंजी' के लिए अनुमतियां बहुत खुली हैं


100

मैंने ओपनएसएसएच 7.6 को विंडोज 7 में परीक्षण के उद्देश्य से स्थापित किया है। SSH क्लाइंट और सर्वर तब तक ठीक काम करते हैं जब तक मैंने इस विंडो से अपने AWS EC2 बॉक्स में से एक का उपयोग करने का प्रयास नहीं किया।

ऐसा लगता है कि मुझे निजी कुंजी फ़ाइल पर अनुमति बदलने की आवश्यकता है। यह आसानी से यूनिक्स / लिनक्स पर chmodकमांड के साथ किया जा सकता है ।

खिड़कियों के बारे में क्या?

निजी- key.ppm को AWS से सीधे कॉपी किया जाता है और मुझे इसकी अनुमति का भी अनुमान है।

C:\>ssh -V
OpenSSH_7.6p1, LibreSSL 2.5.3

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh ubuntu@192.168.0.1 -i private-key.ppk
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private-key.ppk' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "private-key.ppk": bad permissions
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>
C:\>
C:\>ssh ubuntu@192.168.0.1 -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>

क्या आपने एसीएल को संशोधित करने की कोशिश की है?
इग्नासियो वाज़केज़-अब्राम्स

1
क्या आपकी निजी कुंजी वास्तव में C: \ root पथ पर है? मैं देख सकता हूं कि यह क्यों शिकायत कर रहा है क्योंकि आमतौर पर C: \ में चीजें सभी के लिए सुलभ हैं। क्या आपने इसे एक ऐसे फ़ोल्डर में ले जाने की कोशिश की है जो केवल आपके पास है जिसके पास उपयोगकर्ता की पहुंच है (उदाहरण के लिए। C: \ Users \ username \ Desktop) और देखें कि क्या वह संदेश अभी भी आता है?
डेरियस

@ डैरियस, हाँ यह है। जब आप एक फाइल को यूनिक्स / लिनक्स से विंडोज़ में कॉपी करते हैं, तो अनुमति भी कॉपी की जाती है। मुझे इसे बदलने की ज़रूरत है लेकिन यह सुनिश्चित नहीं है कि इसे विंडोज़ पर कैसे किया जाए। यह आसानी से यूनिक्स / लिनक्स पर चामोद कमांड के साथ किया जा सकता है।
सबरीना

@ इग्नासियोवेज़ज़-अब्राम्स, एसीएल? एसीएल किस तरह का?
सबरीना

1
@ सबरीना या तो आप अनुमति बदलने के लिए icacls कमांड का उपयोग करते हैं, या बस निजी कुंजी पर राइट क्लिक करें, और गुण चुनें, और "सुरक्षा" टैब के तहत जांचें। और यह सुनिश्चित करें कि यह केवल आपके द्वारा सुलभ है / जिसे निजी कुंजी तक पहुंचने में सक्षम होना चाहिए। यदि "उपयोगकर्ता" ने पहुंच पढ़ ली है - इसका मतलब है कि जिस किसी के पास सिस्टम तक पहुंच है, वह निजी कुंजी पढ़ सकता है।
डेरियस

जवाबों:


114

आप विंडोज एक्सप्लोरर में फ़ाइल का पता लगाते हैं, उस पर राइट-क्लिक करें फिर "गुण" चुनें। "सुरक्षा" टैब पर जाएं और "उन्नत" पर क्लिक करें।

मालिक को आप के लिए बदलें, विरासत को अक्षम करें और सभी अनुमतियों को हटा दें। फिर खुद को "पूर्ण नियंत्रण" प्रदान करें और अनुमतियाँ सहेजें। अब SSH फ़ाइल की अनुमति के बारे में कोई शिकायत नहीं करेगा।

इसे इस तरह देखना चाहिए:

यहाँ छवि विवरण दर्ज करें


2
मैं सिर्फ 1 जोड़ना चाहूंगा ) यह विधि मेरे विंडोज 10 ( 10.0.17134.191) बॉक्स w / Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42और ssh ver पर काम करती है OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4, और 2) धन्यवाद! @iBug!
atreyu

यदि कुंजी फ़ाइल थंब ड्राइव / फ्लैश डिस्क पर है, तो सुरक्षा टैब उपलब्ध नहीं है!
डायलन बी '

@DylanB आप एक हटाने योग्य ड्राइव पर क्रेडेंशियल्स क्यों डालेंगे? (वास्तव में, वह टैब केवल NTFS फाइल सिस्टम पर उपलब्ध है - आप अपनी ड्राइव को NTFS में आसानी से प्रारूपित कर सकते हैं)।
9

11
वास्तव में, मैंने ऐसा किया है और यह अभी भी शिकायत करता है कि 0777 अनुमतियाँ बहुत खुली हैं।
एरॉन ब्रैमसन

10
खिड़कियों पर यह इतना मुश्किल क्यों है, क्या कोई सिर्फ एक --ignore- बेवकूफ-नियम-कमांड विकल्प जोड़ सकता है?
लियाम मिशेल

21

कुंजी केवल उस उपयोगकर्ता के लिए सुलभ होनी चाहिए जिसका वे इरादा कर रहे हैं और कोई अन्य खाता, सेवा या समूह नहीं है।

  • जीयूआई:
    • [फ़ाइल] गुण - सुरक्षा - उन्नत
      1. स्वामी के उपयोगकर्ता के लिए सेट करें
      2. अनुमति प्रविष्टि के अंतर्गत, कुंजी के उपयोगकर्ता को छोड़कर , सभी उपयोगकर्ताओं, समूहों और सेवाओं को हटा दें
      3. कुंजी के उपयोगकर्ता को पूर्ण नियंत्रण पर सेट करें


  • CLI:

    :: Set Variable ::
    set key="C:\Path\to\key"
    
    :: Remove Inheritance ::
    cmd /c icacls %key% /c /t /inheritance:d
    
    :: Set Ownership to Owner ::
    cmd /c icacls %key% /c /t /grant %username%:F
    
    :: Remove All Users, except for Owner ::
    cmd /c icacls %key%  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    :: Verify ::
    cmd /c icacls %key%

अगर मालिक वास्तव में एक समूह है तो क्या होगा? मेरे मामले में, मेरे पास एक फाइल है, network serviceजिससे साइग्विन को लगता है कि अनुमति 0700 के बजाय 0770 है।
hyspace

एक फ़ाइल को एक उपयोगकर्ता और एक समूह के स्वामित्व में होना चाहिए, न कि केवल एक समूह। समूह की अनुमतियाँ 3 ऑक्टल हैं [उपयोगकर्ता 2 है] एक चार अष्टक विनिर्देश में है और एसएसएच कुंजी समूह या अन्य सुलभ नहीं हो सकता है
JW0914

यही हाल यूनिक्स का है। विंडोज में, network serviceएक फ़ाइल का मालिक हो सकता है और यह एक समूह है
hyspace

सिगविन विंडोज पर पोसिक्स एपीआई कार्यक्षमता की अनुमति देता है, लेकिन यह अभी भी मूल यूनिक्स आधारित कार्यक्रमों (इसलिए एक यूजीओ सेटअप में 3 और 4 ऑक्टल की अनुमति) के नियमों के तहत संचालित होता है। जब आप Microsoft के Win32-OpenSSH के GitHub पर कोई समस्या खोल सकते हैं, क्योंकि SSH कुंजियाँ समूह और अन्य के लिए दुर्गम होनी चाहिए , आपके द्वारा वर्णित तरीके से स्वामित्व होने की संभावना है कि वह समर्थित नहीं है। [संभवतया] गैर-समर्थित तरीके से इसे कॉन्फ़िगर करने के प्रयास से एक कार्यक्रम के मानदंडों के अनुरूप होना बेहतर है।
JW0914

1
यह सही उत्तर होना चाहिए। सीएलआई विकल्पों के लिए धन्यवाद। जीयूआई हमेशा खिड़कियों के मामले में बेकार है।
shyammakwana.me

10

Ibug द्वारा प्रदान किए गए उत्तर के अतिरिक्त। चूंकि मैं ssh कमांड को चलाने के लिए विंडोज़ के अंदर ubuntu सिस्टम का उपयोग कर रहा था। यह अभी भी काम नहीं कर रहा था। तो मैंने किया

sudo ssh ...

और फिर इसने काम किया


sudoएसएसएच सत्र खोलने के लिए उपयोग नहीं किया जाना चाहिए क्योंकि यह सुरक्षा जोखिम है। केवल एसएसएच सत्र खोलने के लिए रूट के खाते (कम से कम जो मुझे पता है) का उपयोग किया जाना चाहिए एकल-उपयोगकर्ता सिस्टम पर है (अर्थात सामान्य रूप से राउटर ओएस के [OpenWrt, DD-WRT, आदि) और अन्य एम्बेडेड सिस्टम पर। ) का है । SSH कुंजियाँ केवल उस उपयोगकर्ता के लिए सुलभ होनी चाहिए, जिसके लिए वे हैं और कोई अन्य खाता, सेवा या समूह नहीं है।
JW0914

@ JW0914 LOL मेरे पास एक एकल-उपयोगकर्ता डेबियन सर्वर है और एकमात्र (लॉगिन) उपयोगकर्ता रूट है। मुझे नहीं लगता कि एक अतिरिक्त गैर-रूट उपयोगकर्ता फायदेमंद है क्योंकि यह मेरा निजी सर्वर है और मैं केवल रखरखाव कार्य करते समय लॉगिन करता हूं।
IBug

@iBug कृपया मेरी टिप्पणी को फिर से पढ़ें, क्योंकि ऐसा प्रतीत होता है कि आप पूरी तरह से दूसरे वाक्य से चूक गए हैं ...
JW0914

5

मुझे भी यही समस्या थी, और ऐसा लगता है कि आप SSH के संस्करण से संबंधित हैं।

अगर मैं टाइप करता हूँ

where ssh

मुझे मिला...

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe

जब मैं ssh -Vदोनों स्थानों पर दौड़ता हूं , तो मुझे मिलता है

OpenSSH_7.5p1, without OpenSSL
OpenSSH_7.3p1, OpenSSL 1.0.2k  26 Jan 2017

... क्रमशः

इसलिए, जब मैं sshgit / bin निर्देशिका से चलता हूं, तो यह ठीक काम करता है और अनुमतियों के बारे में शिकायत नहीं करता है, लेकिन समान कमांड लाइन को चलाने पर, SSH की पूर्व स्थापना का उपयोग करते हुए, यह इसके साथ वापस आता है।

Load key "t:\\mykeys\\rich-private.ppk": invalid format
banana@127.0.0.127: Permission denied (publickey).

ps। फ़ाइल पर अनुमतियाँ केवल अपने लिए पूर्ण पहुँच हैं, और कुछ नहीं।


OpenSSH को पूरी सुरक्षा कारणों से, पूरी तरह से सुरक्षा के लिए, किसी बड़ी असुविधा के लिए Windows निर्देशिका में स्थापित नहीं किया जाना चाहिए, किसी को एक भ्रष्ट Windows निर्देशिका DISMको रीसेट विकल्प के माध्यम से या जिसका उपयोग करके सुधार किया जाना चाहिए, WinSxit निर्देशिका का उपयोग करने के लिए स्थापित किया जाना चाहिए। बनाम मूल में बदलकर install.esd)
JW0914

इसने मेरी मदद की, मुझे इस परिदृश्य में काम करने के लिए कभी भी विंडोज़ ssh संस्करण नहीं मिला, केवल Git :(
cudacoder

मेरे लिए भी यही तय था। ऐसा लगता है कि विंडोज 10 प्रो अब ओपनश के एक पोच्ड संस्करण को बंडल करता है। मुझे C: \ Windows \ System32 \ OpenSSH फ़ोल्डर को हटाने और GAT के ssh.exe को PATH में जोड़ने के लिए मजबूर किया गया था।
शुकरी एडम्स

यह मेरे लिए "तय" यह, सी का उपयोग कर: \ Program Files \ Git \ usr \ बिन \ सी के रूप में काम करता है ssh.exe: \ Windows \ System32 \ OpenSSH \ ssh.exe नहीं है
smartins

3

आपको 2 चीजें चाहिए:

1) वंशानुक्रम अक्षम करें यहाँ छवि विवरण दर्ज करें

2) विरासत में मिली अनुमतियों को स्पष्ट अनुमतियों में बदलें यहाँ छवि विवरण दर्ज करें

3) उपयोगकर्ता समूह निकालें यहाँ छवि विवरण दर्ज करें

4) आप समाप्त कर देंगे कोई भी उपयोगकर्ता निजी फ़ाइलों तक नहीं पहुंच सकता है, यह id_rsa जोड़ने के लिए पर्याप्त होना चाहिए। यहाँ छवि विवरण दर्ज करें


2

मेरे पास एक समान मुद्दा था, लेकिन मैं काम पर था और मेरे काम के कंप्यूटर पर फ़ाइल अनुमतियों को बदलने की क्षमता नहीं थी। आपको WSL स्थापित करने के लिए क्या करना है तो अपनी कुंजी को WSL में छिपी ssh निर्देशिका में कॉपी करें:

cp <path to your key> ~/.ssh/<name of your key>

अब आपको सामान्य रूप से अनुमतियों को संशोधित करने में सक्षम होना चाहिए।

sudo chmod 600 ~/.ssh/<your key's name>

तब WSL का उपयोग कर ssh:

ssh -i ~/.ssh/<name of your key> <username>@<ip address>


2

विंडोज़ पर काम करने वाली आपकी कुंजी पर कमांड का उपयोग करें

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"

1

फ़ाइल अनुमति को समायोजित करने के लिए आप chmod के बजाय विंडोज़ में icacls का उपयोग कर सकते हैं। वर्तमान उपयोगकर्ता को पढ़ने की अनुमति देने और बाकी सब को हटाने के लिए,

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"

0

यह सिर्फ @ JW0914 के सीएलआई उत्तर का एक स्क्रिप्टेड संस्करण है, इसलिए उसे पहले और सबसे आगे बढ़ाएं। इसके अलावा, यह मेरी पहली पॉवरशेल स्क्रिप्ट है, इसलिए सुझावों का स्वागत है।

# DO the following in powerhsell if not already done:
# Set-ExecutionPolicy RemoteSigned


# NOTE: edit the path in this command if needed
$sshFiles=Get-ChildItem -Path C:\DevContainerHome\.ssh -Force

$sshFiles | % {
  $key = $_
  & icacls $key /c /t /inheritance:d
  & icacls $key /c /t /grant %username%:F
  & icacls $key  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
}

# Verify:
$sshFiles | % {
  icacls $_
}


-1

IBug द्वारा उत्तर ठीक काम करता है! आप इसका अनुसरण कर सकते हैं और इस समस्या से छुटकारा पा सकते हैं।

लेकिन कुछ चीजें हैं जिन्हें क्लीयर करने की जरूरत है क्योंकि मैंने परमिशन सेट करने के दौरान मुद्दों का सामना किया और मुझे समस्या का पता लगाने में कुछ मिनट लगे!

IBug के उत्तर के बाद, आप सभी अनुमतियां हटा देंगे, लेकिन आप अपने आप को पूर्ण नियंत्रण अनुमति कैसे सेट करेंगे? यही कारण है कि मैं पहली बार में फंस गया क्योंकि मुझे नहीं पता था कि यह कैसे करना है।

वंशानुक्रम को अक्षम करने के बाद, आप सभी अनुमत उपयोगकर्ताओं या समूहों को हटा सकेंगे।

एक बार उसके साथ हो गया,

पर क्लिक करें Addफिर पर क्लिक करें Set a Principalतो प्रवेश Systemऔर Administratorsऔर your email addreddनिचले भाग में क्षेत्र में फिर पर क्लिक करें check names

यदि उपयोगकर्ता मौजूद है तो यह नाम लोड करेगा। फिर, OK> टाइप करें Allow> बेसिक परमिटिस Full Control> पर क्लिक करेंOkay

यह सिस्टम, प्रशासक और आपके उपयोगकर्ता को पूर्ण नियंत्रण अनुमति देगा।

इसके बाद उस कुंजी का उपयोग करके ssh करने का प्रयास करें। इसे अब हल किया जाना चाहिए।

मेरे पास एक ही मुद्दा था और मैंने इस पद्धति का उपयोग करके हल किया। यदि उस नाम के साथ कोई उपयोगकर्ता या समूह है तो वह उसे लोड करेगा।

-Screenshots-

अनुमति प्रविष्टियाँ एक प्रिंसिपल / उपयोगकर्ता या समूह का चयन करें

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