जब SSH निजी कुंजी अनुमतियाँ 0600 पर सेट की जाती हैं, तो पासवर्ड संवाद प्रकट होता है


71

मैंने अपनी SSH निजी कुंजी को इनस्टॉल किया ~/.ssh/id_rsaऔर इसकी अनुमतियों को इसमें सेट किया 0600। जब मैं एक SSH सर्वर से जुड़ता हूं, जो टर्मिनल के माध्यम से मेरी निजी कुंजी का उपयोग करता है ssh, तो एक डायलॉग पॉप अप होता है और मुझे id_rsaफ़ाइल तक पहुंचने के लिए अपना पासवर्ड दर्ज करने के लिए कहता है :

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

जब मैं इंटरसेकी GUI क्लाइंट के साथ FTP सर्वर से कनेक्ट करता हूं तो मुझे वही डायलॉग दिखाई देता है।

अद्यतन: मैं इस संवाद को हर बार देखता हूं, चाहे मैं "मेरे किचेन में पासवर्ड याद रखें" की परवाह किए बिना कनेक्ट करता हूं। यदि पासवर्ड फ़ील्ड में दर्ज किया गया है तो ठीक बटन पर क्लिक किए जाने पर यह दो बार दिखाई देता है।

जब मैं इन अनुमतियों को शिथिल कर देता हूं, तो कहता हूं, 0640मुझे अब अपने पासवर्ड के लिए मुझसे संवाद करने की अनुमति नहीं sshमिलती है, लेकिन निम्न त्रुटि के साथ गर्भपात होता है:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
@ चेतावनी: संयुक्त निजी कुंजी! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
अनुमतियाँ 0640 '/User/myusername/.ssh/id_rsa' के लिए भी खुली हैं।
यह अनुशंसा की जाती है कि आपकी निजी कुंजी फाइलें दूसरों द्वारा सुलभ न हों।
इस निजी कुंजी को अनदेखा किया जाएगा।
खराब अनुमतियाँ: कुंजी को अनदेखा करें: /User/myusername/.ssh/id_rsa

मुझे पासवर्ड डायलॉग बहुत कष्टप्रद लगते हैं और मुझे यकीन है कि इस डायलॉग को खारिज करने से बचने का कोई तरीका होना चाहिए ताकि SSH को id_rsaफ़ाइल तक पहुंचने की जरूरत पड़े ।

नोट: मैं Mac OS X 10.6.8 चला रहा हूं।

जवाबों:


70

सुनिश्चित करें कि आपके पास एक id_rsa.pubया id_dsa.pubआपकी ~/.sshनिर्देशिका में है।

जब मेरे पास id_rsaएक समान नहीं था, लेकिन id_rsa.pubमैक ओएस एक्स ने डायलॉग को पॉपअप किया और याद रखा कि मेरे किचेन में पासवार्ड कुछ भी नहीं था।

cd ~/.ssh
ssh-keygen -y -f id_rsa > id_rsa.pub

मेरे लिए उपयुक्त सार्वजनिक कुंजी फ़ाइल उत्पन्न की।

यदि आपके पास पहले से ही आपकी सार्वजनिक फ़ाइल थी (इसे किसी अन्य नाम पर नाम दें) और उपरोक्त आदेश का उपयोग करके फिर से सार्वजनिक कुंजी उत्पन्न करें, तो आप देखेंगे कि उत्पन्न और पुराना एक समान नहीं हैं। किसी तरह मैक ओएस एक्स के पुराने संस्करणों ने एक सार्वजनिक कुंजी उत्पन्न की जिसे शेर अब पसंद नहीं करता है, यह फिर से उत्पन्न करता है।

जिज्ञासु के लिए, कुंजी बिल्कुल समान है, जो भाग बदलता है वह यह है कि फ़ाइल पर कुंजी के बाद "टिप्पणी" खंड नहीं है।


2
यह समाधान पहली नज़र में बहुत मायने नहीं रख सकता है, लेकिन इसे आज़माएं। मुझे बिल्कुल वही समस्या हो रही थी और उसने इसे ठीक कर दिया। मैं हमेशा अपनी ssh कुंजियों पर पासवर्ड का उपयोग करता हूं और आपको भी करना चाहिए।
एलेक्स रेकेरी

3
इस समाधान ने मेरे लिए काम किया। यह कोई मतलब नहीं है, लेकिन यह काम करता है! (OS X शेर)
bruno077

2
वाह, जो कुछ भी समझ में आता है, लेकिन यह निश्चित रूप से मेरे सिस्टम पर बहुत अजीब व्यवहार को सही करता है। धन्यवाद।
वॉरेन पेना

2
मेरे जीवन के लिए, मैं एक ही मुद्दे के साथ अब दिनों के लिए एक समाधान का पता लगाने में सक्षम नहीं हुआ हूं और इसने मेरे लिए इसे ठीक कर दिया है। यह बिल्कुल समझ में नहीं आता है, लेकिन यह मेरा मुद्दा तय कर दिया! धन्यवाद, उत्थान।
डैनी इंग्लैंड

OMG धन्यवाद! मेरे लिए काम किया (पर्वत सिंह और सोर्सट्री का उपयोग करके) उन संवादों में बहुत गुस्सा था।
सेबस्टियन सस्त्रे

91

पहले, चलाएं ssh-add -Kऔर जांचें कि क्या यह आपकी समस्या को ठीक करता है।

अगर नहीं:

  • Rsa_id.pub फ़ाइल को निकाला और एक नया बनाया (~ / .ssh /) में होना चाहिए

    ssh-keygen -y -f id_rsa > id_rsa.pub
  • Id_rsa और id_rsa.pub दोनों के लिए सुनिश्चित अनुमतियाँ 600 पर सेट की गईं (~ / .s / और में होनी चाहिए):।

    chmod 600 id_rsa*
  • निम्न आदेश चलाएँ:

    ssh-add -K

ऐसा करने के बाद, मुझे अपना निजी कुंजी पासवर्ड देने के लिए प्रेरित नहीं किया गया था। यह वास्तव में ओएस एक्स के उपयोग के लिए निजी कुंजी पासवर्ड को सही किचेन स्थान पर रखने के लिए प्रकट होता है।


7
जब तक मैं आपके "ssh-add -K" कमांड पर नहीं जा रहा था INSANE जा रहा था। मुझे विश्वास नहीं होता कि OSX ने कितनी जटिल चीजें बनाई हैं। +1000
eduncan911

4
fwiw, मुझे इसके लिए chmod 600(644 के बजाय) काम करने की जरूरत थी
kangax

1
644 के साथ निजी कुंजी कोई
बीनो

15
ssh-add -Kमेरी समस्या हल कर दी
स्पेसल

2
जब तक chmod 644 को chmod 600 पर सही नहीं किया जाता है, तब तक यह अपवित्र नहीं है, यह असुरक्षित है।
तोमाका काफ्का

20

मेरे मामले ssh-add -Kमें चाल नहीं चली, मुझे कुंजी निर्दिष्ट करनी थी:

ssh-add ~/.ssh/id_rsa

-Kअब कोई विकल्प नहीं है। आपके समाधान ने इसे ठीक कर दिया। मुझे आश्चर्य है कि मुझे ऐसा करने की आवश्यकता क्यों थी। कभी कोई पासवर्ड संकेत नहीं था।
DannyRe

धन्यवाद! यह तब है जब OS X Sierra ने आखिरकार मेरा id_rsa पासवर्ड मांगा।
तोमाका काफ्का

2
-Kएफडब्ल्यूआईडब्ल्यू , ध्वज ने मेरे लिए सिएरा 10.12.2
क्रिस वैगनर

हां। मैं पुष्टि कर सकता हूं। -K मौजूद है और नवीनतम सिएरा में इस मुद्दे को हल करता है! अच्छी नौकरी @nathancahill।
मैट कोमारनिक

17

MacOS के लिए 10.12 सिएरा ssh-add -Kको हर रिबूट के बाद चलाने की आवश्यकता है। इससे बचने के लिए ~/.ssh/configइस सामग्री के साथ बनाएं ।

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

Apple ने Technote 2449 जोड़ा है जो बताता है कि क्या हुआ।

MacOS सिएरा से पहले, ssh आपके पासफ़्रेज़ के लिए एक संवाद प्रस्तुत करेगा और उसे किचेन में संग्रहीत करने का विकल्प प्रदान करेगा। इस UI को कुछ समय पहले हटा दिया गया था और हटा दिया गया था।

संपादित करें: जाहिरा तौर पर एक मेजबान और कुंजी निर्दिष्ट करना आवश्यक नहीं है। बस इसे जोड़ना काफी है।

AddKeysToAgent yes
UseKeychain yes

इसी से मेरा काम बना है। सबसे पहले मैंने ssh-add -K की कोशिश की, लेकिन परिवर्तन केवल तब तक काम करेगा जब तक मैं रिबूट नहीं करता।
गंडाल्फ़ ४५

मुझे AddKeysToAgentशीर्ष स्तर पर रखने की जरूरत थी ~/.ssh/config
रेडॉन रोसबोरो

12

आपको निजी कुंजी के लिए पासफ़्रेज़ कहीं दर्ज करना होगा, और OS X डिफ़ॉल्ट रूप से ssh-Agent का उपयोग करता है।

यदि आप ssh-agent का उपयोग करना चाहते हैं, लेकिन gui संवाद बॉक्स से बचना चाहते हैं, तो आप एजेंट में पासफ़्रेज़ जोड़ने के लिए ssh-add का उपयोग कर सकते हैं और फिर हमेशा की तरह ssh कर सकते हैं।

यदि आप ssh- एजेंट का उपयोग नहीं करना चाहते हैं और इसके बजाय पासफ़्रेज़ के लिए ssh प्रॉम्प्ट है, तो SSH_AUTH_SOCK परिवेश चर को अनसेट करें।


धन्यवाद, Alrescha। क्या आप जानते हैं कि मैक ओएस एक्स कीचेन में अपने निजी कुंजी पासवर्ड को स्थायी रूप से संग्रहीत करने का कोई तरीका है (न कि केवल एक सत्र के लिए)?
टाइटेनियम

3
आप टर्मिनल में 'ssh-add -K' आज़मा सकते हैं, लेकिन अगर कोई बग है जहाँ बॉक्स चेक करना काम नहीं करता है तो यह काम भी कर सकता है। मैं नहीं चाहता कि मेरे ssh पासफ़्रेज़ किचेन में संग्रहीत हों, इसलिए मैंने इसका परीक्षण नहीं किया है।
zzz

साथ ssh-add -Kकनेक्ट करने के लिए मुझे अपना पासवर्ड दर्ज करने के लिए नहीं है, लेकिन शीघ्र अभी भी प्रकट होता है; मैं इसे खारिज करता हूं।
टाइटेनियमडेकॉय

3
ssh-add -K वह है जो आप अपने पासवर्ड को किचेन में जोड़ने के लिए उपयोग करते हैं। यदि आप अपना पासवर्ड दर्ज नहीं करते हैं, तो यह चाबी का गुच्छा पर नहीं डाला जा सकता है।
zz

1
परिशिष्ट: शेर और हिम तेंदुए दोनों में, अगर मैं ssh-add -K दर्ज करता हूं, तो मुझे टर्मिनल में एक संकेत मिलता है - संवाद बॉक्स नहीं।
zzz

8

जब आप अनुमतियों को शिथिल करते हैं, तो कुंजी को अनदेखा कर दिया जाता है। ऐसा करने से आपको कुछ हासिल नहीं होगा।

यदि आप हर बार पासवर्ड डाले बिना एक कुंजी का उपयोग करना चाहते हैं, तो आपके पास दो विकल्प हैं।

यदि आप "मेरे किचेन में पासवर्ड याद रखें" की जांच करते हैं, तो आपको हर बार पासवर्ड टाइप नहीं करना होगा: यह आपके सभी अन्य पासवर्डों के साथ किचेन में संग्रहीत होगा। यह अनुशंसित विकल्प है।

आप एक पासवर्ड के बिना एक निजी कुंजी फ़ाइल बना सकते हैं। आप अपनी मौजूदा निजी कुंजी फ़ाइल को बदल सकते हैं ताकि यह पासवर्ड से सुरक्षित न हो (केवल पासवर्ड बदलने से कुंजी फ़ाइल प्रभावित होती है, कुंजी ही नहीं)। कमांड लाइन से, रन ssh -pकरें, मौजूदा पासफ़्रेज़ दर्ज करें, और फिर नया पासफ़्रेज़ खाली छोड़ दें। खाली पासफ़्रेज़ होने में एक सुरक्षा जोखिम है: कोई भी जो आपकी निजी कुंजी फ़ाइल (उदाहरण के लिए आपके बैकअप तक पहुंचकर) का उपयोग कर सकता है, इसे तुरंत उपयोग कर सकते हैं।


जवाब के लिए धन्यवाद, हालांकि एक बात जिसका मैं उल्लेख करना भूल गया - "मेरे किचेन में पासवर्ड याद रखें" विकल्प की जांच करने का कोई प्रभाव नहीं पड़ता है: अगली बार जब मैं कनेक्ट करता हूं तो संवाद फिर से प्रकट होता है। (खाली पासफ़्रेज़ का उपयोग करना मेरे लिए कोई विकल्प नहीं है।)
टाइटेनियम १२

3
पासवर्ड के बिना पासवर्ड से सुरक्षित कुंजी को बदलने का सुझाव देना वास्तव में एक भयानक विचार है ...
Schmurfy

5

यदि आपने अपनी निजी कुंजी को स्रोत ~ / .shsh निर्देशिका में जोड़ लिया है, और आपने इसे जोड़ने के लिए ssh-add -K दर्ज किया है, और आपके पास अपनी सार्वजनिक कुंजी सामग्री को .ssh / अधिकृत_keys (सही के लिए) में कॉपी कर दिया गया है। खाता) लक्ष्य सर्वर पर फ़ाइल संवाद बॉक्स चली जाती है।

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


3

मुझे लायन (मैक ओएस एक्स 10.7) पर बिल्कुल यही समस्या है। मुझे लगता है कि एक बग है ... अगर ssh प्रमाणीकरण पासवर्ड है तो क्लाइंट पहले सार्वजनिक कुंजी से गुजरता है जो सामान्य है। हालाँकि, भले ही आप अगली बार जब कोई नया ssh कनेक्शन स्थापित हो, तो चाबी का गुच्छा (जो पासवर्ड प्रमाणीकरण के लिए आवश्यक नहीं है) पर पासफ़्रेज़ को बचाने के लिए चुनें, आपको पासफ़्रेज़ के लिए फिर से पूछा जाता है ...


1
मैं इसे एक बग के रूप में भी मानता हूं, हिम तेंदुए के साथ सब कुछ ठीक काम कर रहा था, लेकिन हर बार जब मेरा कंप्यूटर नींद से वापस आ जाता है, तो ssh कुंजी पासवर्ड फिर से पूछा जाता है, हालांकि मैंने पिछली बार पूछे जाने वाले "रीमर्बर" की जांच की थी! बहुत गुस्सा ...
Schururfy

3

अपनी सार्वजनिक चाबियों को फिर से बनाने की कोई जरूरत नहीं होनी चाहिए। आप बस इन दो आदेशों को कर सकते हैं :

chmod 0600 ~/.ssh/id_rsa.pub
ssh-add ~/.ssh/id_rsa

मूल रूप से, आपको सार्वजनिक कुंजी फ़ाइल पर अनुमतियों को कसने की आवश्यकता है, और आपको अपनी कुंजी को OSX प्रमाणीकरण एजेंट में जोड़ने की आवश्यकता है।


3

MacOS के नवीनतम संस्करण (10.12.2 - सिएरा) में यह एक आसान समाधान है। बस अपना ~ / .ssh / config संपादित करें और UseKeychain विकल्प को सक्षम करें:

Host *
UseKeychain yes

सहेजें और हल करें।


2

मेरे OS X 10.7.4 सिस्टम पर यह समस्या तब आई जब ssh- एजेंट की मृत्यु हो गई। एक रिबूट ने समस्या को ठीक कर दिया। (आप ssh-agent को पुनः आरंभ करने का प्रयास कर सकते हैं, लेकिन मुझे नहीं पता कि किचेन नया ssh-Agent सॉकेट लेने के लिए पर्याप्त चतुर है।)


लगभग एक घंटे तक रुकने के बाद भी मेरी समस्या ठीक हो गई।
DannyRe

2
  1. सुनिश्चित करें कि ~ / .ssh / chmod 700 है।

  2. सुनिश्चित करें कि ~ / .ssh / id * फाइलें दोनों ही chmod 600 हैं।

  3. भागो / आवेदन / उपयोगिताएँ / चाबी का गुच्छा Access.app और मरम्मत चाबी का गुच्छा।

  4. लॉग आउट। (रिबूटिंग एक भयानक विचार नहीं होगा)

  5. लॉग इन करें

  6. यदि समस्या बनी रहती है, तो अपने मौजूदा ~ / .ssh / id * फ़ाइलों को अपने डेस्कटॉप पर ले जाएँ और नई कुंजियों का उपयोग करके नई कुंजी बनाने का प्रयास करें ssh-keygen -t dsa -f ~/.ssh/id_dsa -C you@youremail.tldऔर देखें कि क्या नई कुंजियाँ बेहतर काम करती हैं।

मैं शेर पर हूं, लेकिन IIRC स्नो लेपर्ड ने उसी तरह काम किया।

ps - जो कोई भी खाली ssh पासफ़्रेज़ का उपयोग करने का सुझाव देता है, उसे एक संकेत पहनने के लिए मजबूर किया जाना चाहिए ताकि अन्य लोग उनसे सलाह न लें।


1

सार्वजनिक कुंजी को पुनर्जीवित करना मेरे लिए काम नहीं करता है (10.8), और न ही एक नई एसएसएच कुंजी उत्पन्न करता है। यदि मैं, उदाहरण के लिए, लॉग कीचेन को लॉक करने के बाद git पुल को रन करता हूं, तो लॉगिन कीचेन से पासवर्ड को पुनः प्राप्त करने का प्रयास करने के बजाय पहले कुंजी को पासवर्ड की मांग करने के लिए एक संवाद बॉक्स पॉप अप करें।

हालाँकि, यदि मैं पहले ssh-Agent को मार देता हूं, तो मुझे लॉगिन किचेन पासवर्ड के लिए संकेत दिया जाता है जो फिर SSH कुंजी पासवर्ड को पुनः प्राप्त करता है।


नमस्ते, यह एक अलग प्रश्न की तरह दिखता है, बजाय इस प्रश्न के उत्तर के। क्या आप एक नए प्रश्न के रूप में फिर से पोस्ट कर सकते हैं?
स्कॉट

1

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

-----END RSA PRIVATE KEY-----

कुछ ऐसा ही है, जब लास्टपास जैसी किसी चीज़ से ssh कुंजी चिपकाने पर, यह सभी को एक लाइन पर चिपकाती है। यह मेरे लिए एक समस्या थी, और एक बार व्हाट्सएप पर निजी कुंजी को सही प्रारूप में विभाजित करने के बाद, इसने काम किया।
कैमरून गगनोन

1

इसे काम करने के लिए मुझे निम्न चरण करने थे।

# Change working directory
cd ~/.ssh
# Remove the old public key
rm id_rsa.pub
# Create a new public key
ssh-keygen -y -f id_rsa > id_rsa.pub
# Change permission
chmod 600 id_rsa*
# Add the key to ssh
ssh-add id_rsa
# Then finally test it (I used github)
ssh -i id_rsa.pub git@github.com

अंतिम कमांड को तब कुछ इस तरह आउटपुट करना चाहिए: Hi <user>! You've successfully authenticated, but GitHub does not provide shell access.


0

मुझे भी यही समस्या थी। मुझे लगता है ऐसा करने से यह तय हो गया है।

1) पुराने id_dsa और id_dsa.pub फ़ाइलों का नाम बदलकर समर्थित।

2) एक रिक्त पासफ़्रेज़ के साथ एक नया कीजन भाग गया।

लॉन्चर अवधि की नौकरी के साथ काम करता है एक दूरस्थ सर्वर की निगरानी के साथ-साथ एक टर्मिनल में ssh से लॉग इन करना।

मेरे टर्मिनल में एक क्विक फंक्शन ऑर्टेम फ़ंक्शन है क्योंकि मेरे पास मेरे .bash_profile में निम्नलिखित है

#~/.bash_profile    
function authme {
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub
}

तो एक त्वरित Cortme remoteserver.com नई रिमोट कुंजी को कॉपी करेगा।

मुझे लगता है कि बग पासफ़्रेज़ में परिवर्तित नहीं होने के साथ कुछ करना है (मेरे पुराने स्नो लेपर्ड में एक भी नहीं था)।

कोशिश करो और देखो कि यह मदद करता है।

इसे करने में 10 मिनट से ज्यादा का समय नहीं लगा। मैंने यह देखने के लिए हमेशा के लिए गुगली खर्च कर दी कि क्या इसका कोई अन्य उल्लेख है। यह साइट केवल एक ही थी!

Owain।


एक रिक्त पासफ़्रेज़ का उपयोग करना मेरे लिए विकल्प नहीं है, दुर्भाग्य से
टाइटेनियम

0

मुझे एक अनुकरणीय समस्या थी। यह पता चला कि मैं जिस निजी कुंजी का उपयोग कर रहा था वह गलत प्रारूप में थी। मैंने अपने Win मशीन पर PuTTY Key जेनरेटर का उपयोग किया और OS X पर ssh ने एक अलग प्रारूप की उम्मीद की - SSH प्रारूप खोलें।

यह पता चला है कि मैंने इस कुंजी (PuTTY Key जेनरेटर) को बनाने के लिए जिस टूल का उपयोग किया था, उसमें ओपन एसएसएच द्वारा आवश्यक प्रारूप में मेरी निजी कुंजी को परिवर्तित करने का विकल्प था।

के रूप में सरल:

  1. PuTTY कुंजी जनरल खोलें
  2. अपनी निजी कुंजी लोड करें
  3. कनवर्ज़न चुनें> OpenSSH कुंजी निर्यात करें।

आपके द्वारा सहेजी गई फ़ाइल में आपकी मूल निजी कुंजी उचित (OpenSSH) प्रारूप में होगी।


0

कृपया सुनिश्चित करें कि:

  1. आप अपनी निजी कुंजी के लिए pem प्रारूप का उपयोग कर रहे हैं। ऐसा इसलिए है क्योंकि मैक ओपनश क्लाइंट का उपयोग करता है जो पेम के साथ काम करता है। ppk पोटीन का मालिकाना प्रारूप है और ओपनश के साथ संगत नहीं है। आप pkk को pem में आसानी से बदल सकते हैंयदि आप केवल ppk रखते हैं, तो आप पोटीन पोटीन में उपयोग ।
  2. आपके pem फ़ाइल पर अनुमतियाँ 600 हैं। निजी कुंजियाँ केवल उनके स्वामी द्वारा सुलभ होने के लिए होती हैं। इसलिए, यदि अनुमतियाँ किसी अन्य को रीड एक्सेस प्रदान करती हैं, तो इसे सुरक्षा खतरा माना जाएगा।

इससे उम्मीद की जानी चाहिए कि समस्या सुलझ जाए।


-1

.Ppk कुंजी के बजाय .pem कुंजी का उपयोग करें।


1
हम लंबे उत्तर की तलाश कर रहे हैं जो कुछ स्पष्टीकरण और संदर्भ प्रदान करते हैं। केवल एक-पंक्ति का उत्तर न दें; समझाएं कि आपका उत्तर सही क्यों है, आदर्श रूप से उद्धरणों के साथ। स्पष्टीकरण को शामिल नहीं करने वाले उत्तरों को हटाया जा सकता है।
टेटसुजिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.