วิธีการกู้คืนจาก“ การตรวจสอบสิทธิ์ล้มเหลวมากเกินไปสำหรับผู้ใช้รูท”


64

ฉันพยายามหลายครั้งเพื่อสร้าง SSH-connecton สำหรับผู้ใช้ root @ host โดยใช้ putty terminal ในขณะที่ทำเช่นนั้นฉันระบุข้อมูลประจำตัวที่ไม่ถูกต้องหลายครั้งและหลังจากนั้นฉันได้ระบุอย่างถูกต้องแล้วหลังจากนั้นข้อมูลประจำตัวได้รับการยอมรับการแบ่งเซสชัน ssh ด้วย

"เซิร์ฟเวอร์ปิดการเชื่อมต่อเครือข่ายโดยไม่คาดคิด"

ข้อผิดพลาดนี้มีการรายงานโดยสถานีฉาบ เมื่อพยายามที่จะ ssh root @ localhost จากคอนโซลท้องถิ่น - มันทำงานได้ดี มันทำงานได้ดีเมื่อฉัน ssh otheruser @ host จากโฮสต์อื่น ดังนั้นปัญหาการเชื่อมต่อเครือข่ายจึงไม่มีความผิด ข้อผิดพลาดเดียวที่ฉันคิดคือ: "การตรวจสอบสิทธิ์ล้มเหลวมากเกินไปสำหรับผู้ใช้รูท"แม้ว่าจะมีการรายงานว่า putty มีข้อผิดพลาดแตกต่างกัน

คำถามคือ: วิธีการกู้คืนจากเงื่อนไขข้อผิดพลาดนี้และให้เข้าสู่ระบบสีโป๊วอีกครั้ง? การรีสตาร์ท sshd ดูเหมือนจะไม่ช่วย



1
ตรวจสอบให้แน่ใจว่าได้ปิดการใช้งานเอเจนต์ ssh ของคุณ (เช่น pageant บน Windows) หากคุณได้รับToo many Authentication Failuresข้อผิดพลาดก่อนที่คุณจะสามารถเข้าสู่ระบบได้เลย
มาห์

คำตอบ:


8

คุณแน่ใจหรือว่าอนุญาตให้รูทเข้าสู่ ssh ได้

ตรวจสอบ sshd_config และตรวจสอบว่าอนุญาตให้เข้าสู่ระบบรูท sshd จะต้องเริ่มต้นใหม่หากการตั้งค่ามีการเปลี่ยนแปลง


120

"ความล้มเหลวของการตรวจสอบสิทธิ์มากเกินไปสำหรับผู้ใช้ root" หมายความว่าเซิร์ฟเวอร์ SSH ของคุณขีด จำกัด MaxAuthTries เกิน มันเกิดขึ้นเพื่อให้ลูกค้าของคุณพยายามตรวจสอบกับคีย์ที่เป็นไปได้ทั้งหมดที่เก็บไว้ใน /home/USER/.ssh/

สถานการณ์นี้สามารถแก้ไขได้ด้วยวิธีเหล่านี้:

  1. ssh -i / path / to / id_rsa root @ host
  2. ระบุโฮสต์ / IdentityFileคู่ใน/home/USER/.ssh/config
    • Host host
    • IdentityFile /home/USER/.ssh/id_rsa
    • Host host2
    • IdentityFile /home/USER/.ssh/id_rsa2
  3. เพิ่มค่าMaxAuthTriesบนเซิร์ฟเวอร์ SSH ใน/ etc / ssh / sshd_config (ไม่แนะนำ)

9
นี่ควรเป็นคำตอบที่ยอมรับได้จริง ๆ !
Benjamin

4
ในการเป็นคำตอบที่ยอมรับคำตอบนั้นจะต้องเกี่ยวกับซอฟต์แวร์ที่กล่าวถึงในคำถาม =)
rakslice

4
สาเหตุของการ จำกัด เกินอีกอาจเป็นตัวแทนของคุณ ssh ssh -vvแสดงให้เห็นถึงสองรุ่นหลายคีย์ (จัดทำโดย ssh-agent) กำลังพยายาม ฉันคิดว่านี่เป็นเพราะฉันเริ่มระบบใหม่ไม่บ่อยนักและต้องแทนที่บางคีย์ที่หมดอายุ เห็นได้ชัดว่า ssh-agent ไม่เขียนทับปุ่มเก่าด้วยปุ่มใหม่ ฉันฆ่า ssh-agent และปัญหาก็หายไป
ทำเครื่องหมาย

ข้อเสียเปรียบอะไรจะมีจากการเพิ่มMaxAuthTries? ฉันสงสัยว่ามีการโจมตีเกิดขึ้นมากมายโดยการลองใช้กุญแจที่แตกต่างกันมากมาย นอกจากนี้หากผู้โจมตีต้องการทำเช่นนั้นพวกเขาสามารถปิดการเชื่อมต่อและเปิดใหม่ได้ทุกครั้งที่ถึงขีด จำกัด พวกเขาจะไม่ประสบความสำเร็จในการบังคับใช้เดรัจฉานคีย์
kasperd

@ Mark ขอบคุณมาก! การรีสตาร์ท ssh-agent แก้ไขสำหรับฉัน!
winduptoy

90

หากคุณได้รับข้อผิดพลาด SSH ต่อไปนี้:

$ Received disconnect from host: 2: Too many authentication failures for root

สิ่งนี้อาจเกิดขึ้นหากคุณมี (ค่าเริ่มต้นในระบบของฉัน) ไฟล์ข้อมูลระบุตัวตน DSA / RSA ห้าไฟล์ขึ้นไปที่จัดเก็บใน.sshไดเรกทอรีของคุณ ในกรณีนี้หาก-iไม่ได้ระบุตัวเลือกที่บรรทัดคำสั่งไคลเอ็นต์ ssh จะพยายามเข้าสู่ระบบโดยใช้ข้อมูลประจำตัวแต่ละตัว (รหัสส่วนตัว) และข้อความถัดไปสำหรับการตรวจสอบรหัสผ่าน อย่างไรก็ตาม sshd จะตัดการเชื่อมต่อหลังจากพยายามเข้าสู่ระบบไม่ถูกต้องห้าครั้ง (ค่าเริ่มต้นอีกครั้งอาจเปลี่ยนแปลง)

ดังนั้นหากคุณมีคีย์ส่วนตัวจำนวนหนึ่งในไดเรกทอรี. ssh คุณสามารถปิดการใช้งานPublic Key Authenticationที่บรรทัดคำสั่งโดยใช้-oอาร์กิวเมนต์ตัวเลือก

ตัวอย่างเช่น:

$ ssh -o PubkeyAuthentication=no root@host

1
ขอบคุณมาก! ใช้ Ubuntu Server ที่นี่ซึ่งฉันสามารถเข้าถึงได้โดย SSH เท่านั้น ฉันได้ตั้งค่า "MaxAuthTries 1" หลังจากติดตามการสอนบนอินเทอร์เน็ต
Andre Figueiredo

คุณช่วยชีวิตฉันไว้! ไม่ใช้การรับรองความถูกต้องของคีย์ดังนั้นคำตอบอื่น ๆ ก็ไม่ได้ช่วยอะไร วิธีนี้แก้ไขได้ง่ายมาก !!
George Green

5
นี่คือคำตอบ
smac89

ฉันคัดลอกคีย์ของฉันอีกครั้งโดยใช้การตรวจสอบรหัสผ่านและตอนนี้ใช้ได้ทุกครั้ง ฉันมีคีย์มากมายใน.sshไดเรกทอรีของฉันฉันไม่คิดว่ามันเป็นปริมาณที่สำคัญ
เคนชาร์ป

นี่คือคำตอบที่เกี่ยวข้องมากที่สุดและควรเป็นพฤติกรรมเริ่มต้นสำหรับ ssh-copy-id ดังนั้นหากฉันต้องการคัดลอก id ของฉันไปยังเซิร์ฟเวอร์มักจะไม่อยู่ที่นั่น แต่ถ้า ssh พยายามพิสูจน์ตัวตนกับเซิร์ฟเวอร์ก่อนโดยใช้ pubkey เซิร์ฟเวอร์จะยกเลิกการเชื่อมต่อก่อนที่จะสามารถป้อนรหัสผ่านได้
Sprinterfreak

17

บนเครื่องรีโมตเปิด / etc / sshd_config และเปลี่ยนค่า

MaxAuthTries 30

นี่เป็นปัญหาทั่วไปเมื่อคุณติดตั้งหลายคีย์หรือเปิดการเชื่อมต่อหลายรายการ การตรวจสอบเซิร์ฟเวอร์ทีละขั้นตอนแต่ละคีย์และถ้า MaxAuthTries มีการตั้งค่าใน 3 จากนั้นหลังจาก 3 พยายามครั้งแรกจะยกเลิกการเชื่อมต่อคุณ ความปลอดภัย ssh ทั่วไป

ฉันแนะนำให้คุณใช้โหมด verbose ระหว่างการเชื่อมต่อกับเครื่องระยะไกลเพื่อวิเคราะห์ปัญหา

ssh -v -p port_number user @ servername

การเดาว่าคนส่วนใหญ่ในฟอรัมนี้มีความผิดและเสียเวลา ก่อนอื่นให้ลองวิเคราะห์ปัญหารวบรวมข้อมูลแล้วถาม

มีความสุข.


ในกรณีเฉพาะของฉันปัญหาคือว่าฉันเข้าสู่ระบบด้วยการส่งต่อตัวแทนพยายามที่จะเรียกใช้สคริปต์ที่ใช้มันเป็นตัวตนของ SSH เมื่อฉันวิ่งผ่านตัวแทนส่งต่อมันเป็นอัตลักษณ์มากเกินไปก่อนที่จะลองด้วยตัวเอง ดังนั้นฉันจึงตั้งค่าสคริปต์ให้ทิ้งสภาพแวดล้อมของเอเจนต์และลบทิ้ง ฉันยังสามารถเพิ่ม MaxAuthTries ได้ แต่ฉันไม่จำเป็นต้องทำในกรณีนี้
Sean Reifschneider

1
ขอบคุณ -vแสดงไคลเอ็นต์ ssh ของฉันพยายามใช้หลายปุ่ม (ตอนนี้ฉันมีไม่กี่ครั้ง) ฉันทำความสะอาดพวกเขาจากตัวแทนด้วยssh-add -D
joeytwiddle

12

นี่คือการปฏิบัติที่ไม่ดี เพียงแค่มีผู้ใช้ประจำบนกล่องรีโมตและเชื่อมต่อผ่าน ssh โดยใช้มันจากนั้นรับการเข้าถึงรูทด้วย su / sudo


10

สำหรับฉันปัญหานี้ได้รับการแก้ไขโดยการสร้าง ssh_config ด้านล่างสำหรับโฮสต์ที่ฉันกำลังเชื่อมต่อ

(~ / .ssh / config)

Host example
HostName example.com
User admin
IdentityFile ~/path/to/ssh_key_rsa
IdentitiesOnly=yes

ปัญหาเกิดขึ้นเพราะฉันมีคีย์ ssh มากเกินไปใน~/.sshโฟลเดอร์เช่น 16 หรือมากกว่านั้น และหากไม่มีทั้งสองคำสั่งIdentityFileAND IdentitiesOnlyในการกำหนดค่าเครื่องของฉันก็ลองใช้ปุ่มทั้งหมดใน~/.sshและถึงจำนวนครั้งสูงสุดก่อนที่จะพยายาม IdentityFile ที่ถูกต้อง


6

ฉันอยากจะแนะนำคุณตามอานนท์ที่โพสต์ข้างต้นใช้ผู้ใช้รายอื่นเพื่อเข้าใช้ ssh จากนั้นใช้suคำสั่งเพื่อเข้าrootใช้งาน

ตรวจสอบให้แน่ใจเพื่อเปิดใช้งานPermitRootLoginใน/etc/ssh/sshd_configไฟล์บนเซิร์ฟเวอร์


5

ฉันยังต้องเผชิญกับปัญหาเดียวกัน สิ่งนี้สามารถเกิดขึ้นได้อย่างง่ายดายหากคุณใช้Pageantและมีการโหลดคีย์จำนวนมากเนื่องจากเซิร์ฟเวอร์เหล่านี้นับข้อเสนอของคีย์สาธารณะแต่ละรายการเป็นความพยายามในการตรวจสอบสิทธิ์

(คำแนะนำนี้นำมาจากที่นี่ )


1
เราไม่ค่อยกระตือรือร้นกับคำตอบของลิงก์อย่างเดียวที่นี่เนื่องจากลิงก์เน่าและคำตอบก็ไร้ประโยชน์ เก็บลิงค์โดยทั้งหมด แต่ถ้าคุณสามารถสรุปการแก้ปัญหาในวรรคหนึ่งหรือสองคุณอาจมีคำตอบ upvotable ตัวเองที่นี่
MadHatter

2
ฉันหวังว่าคุณจะให้อภัยการแก้ไขของฉันในภายหลัง ตอนนี้ (ฉันหวังว่า) มันทำให้ชัดเจนว่าคำแนะนำที่คุณอ้างถึงคือคำแนะนำที่คุณให้ แต่ยังคงให้เครดิตแหล่งข้อมูลต้นฉบับ +1 จากฉันที่พยายามอย่างหนักเพื่อปรับปรุงคำตอบของคุณ!
MadHatter

ฉันมีปัญหา "การตรวจสอบสิทธิ์ล้มเหลวมากเกินไป" ใน Putty ด้วย หลังจากฉันลบคีย์อื่นทั้งหมดจาก PageAnt ในที่สุดก็เข้าสู่ระบบได้สำเร็จ
คลอ

4

ฉันแก้ไขปัญหานี้ในระบบของฉันโดยใช้คำสั่งต่อไปนี้:

eval $(ssh-agent)
ssh-add  ~/.ssh/keyname

จากนั้นลองใช้ ssh ในเครื่องระยะไกล


3

หากต้องการแก้ไขปัญหานี้ชั่วคราวจนกว่าสิ่งต่างๆจะได้รับการจัดการอย่างเต็มที่ตามที่ระบุไว้ที่อื่นคุณสามารถรีเซ็ต PAM ของผู้ใช้เพื่อให้พวกเขาสามารถลองอีกครั้งได้:

pam_tally --reset --user <USERNAME>
pam_tally2 --reset --user <USERNAME>

2

ฉันถูกกัดด้วยปัญหาที่คล้ายกัน อย่างไรก็ตามสาเหตุที่แท้จริงคือฉันมีForwardAgent yesไฟล์ config ของเครื่องตามไปป์ ฉันกำลังเชื่อมต่อจากเครื่อง A เข้ากับเครื่อง B เข้ากับเครื่อง C

ข้อความแสดงข้อผิดพลาดปรากฏขึ้นในความพยายาม ssh จาก B -> C แต่เกิดจากการที่ A มีการส่งต่อที่ใช้งานอยู่ ดังนั้น C เป็นครั้งแรกที่ให้บริการกุญแจทั้งหมดจาก A และจากนั้นก็เป็นเพียงปุ่มจาก B

ทันใดนั้นก็ปรากฏขึ้นเมื่อฉันเพิ่มคีย์อีกหนึ่งคีย์ลงใน A


1

ฉันแก้ไขปัญหานี้บน Mac ของฉันโดย:

  1. ตั้งค่ารหัสผ่านรูทด้วย "sudo passwd root"
  2. การแก้ไขและบันทึกไฟล์ ssh config ด้วย "nano / etc / ssh_config" และ
  3. เปลี่ยน RSAAuthentication เป็น "ไม่" แทนที่จะใช่

0

ตกลงดังนั้นในกรณีของฉันนี้มันค่อนข้างแปลกที่นี่มันไป ...

ฉันมี VM คนจรจัดมาตรฐานที่มีคีย์ SSH และฉันสามารถ SSH เข้าไปโดยใช้ Putty ในขณะที่พยายามดำเนินการต่อในระหว่างการปรับใช้ใน PHPS ฉันพบtoo many authentication failuresข้อผิดพลาด ดังนั้นผมจึงเพิ่มขึ้นMaxAuthTriesในของฉันsshd_configแล้วฉันได้ตีด้วยข้อผิดพลาดแล้วAuth failedAuth cancel

ตอนนี้ฉันไม่รู้เหมือนกันว่าทำไมฉันถึงได้ลองทำเช่นนี้ แต่ ... ฉันเพิ่มจุดที่ส่วนท้ายของพา ธ คีย์ SSH ของฉันในหน้าต่างการนำไปใช้งานใน PHPStorm ดังนั้นจึงเป็นเช่นนี้:

C:\Users\Deadpool\\.ssh\chimichanga

และตอนนี้มันเป็นเช่นนี้:

C:\Users\Deadpool\\.ssh\chimichanga.

และใช้งานได้ ... ในโฟลเดอร์ ".ssh" ของฉันฉันมีไฟล์เพิ่มเติม:

chimichanga - copy of "id_rsa" from vagrant machine
chimichanga.ppk
chimichanga.pub

ฉันไม่แน่ใจว่าจุด fcuking ทำอะไร แต่การใช้.ppkไฟล์ไม่ทำงานดังนั้นฉันจึงเดาว่ามันวิเศษมาก) โอ้และฉันสามารถกำจัด MaxAuthTries หลังจากนั้น "dot trick"


0

คำตอบอื่น ๆ บอกวิธีที่ดีที่สุดในการเชื่อมต่อในฐานะรูทและผลกระทบด้านความปลอดภัยของสิ่งนั้น แต่เป็นคำถามที่ชัดเจนของคุณ

วิธีการกู้คืนจากเงื่อนไขข้อผิดพลาดนี้และปล่อยให้ฉาบเข้าสู่ระบบอีกครั้ง?

คุณพูดถึงครั้งล่าสุดที่คุณเชื่อมต่อจากนั้นรีโมตเซิร์ฟเวอร์จะตัดการเชื่อมต่อ

สิ่งที่ฉันคิดว่าคุณอาจพบคือเซิร์ฟเวอร์ระยะไกลกำลังทำงาน fail2ban (*) และ "จำคุก" IP ของคุณหลังจากล็อกอินสำเร็จ คุณสามารถทดสอบสิ่งนี้ได้โดยพยายามลงชื่อเข้าใช้อีกครั้งและคุณจะไม่ได้รับข้อความแจ้งการเข้าสู่ระบบด้วยซ้ำ

มีวิธีแก้ปัญหาสองวิธีคุณสามารถรอเวลาคุกได้ซึ่งสิ่งต่าง ๆ ก็กลับมาเป็นปกติ แต่เวลาคุกอาจเป็นอะไรก็ได้ หรือคุณสามารถค้นหาคอมพิวเตอร์เครื่องอื่นเพื่อล็อกอินจากนั้นทำและ "ปลดคุก" IP ของคุณในกรณีนี้ "แตกต่าง" มาจากมุมมองของเซิร์ฟเวอร์ระยะไกลดังนั้นคอมพิวเตอร์เครื่องอื่นที่อยู่หลังไฟร์วอลล์เดียวกันอาจไม่ทำงานเช่นกัน .

(*) fail2ban เป็นภูตที่มีประโยชน์มากที่สามารถตรวจสอบไฟล์บันทึกต่าง ๆ เป็นระยะ ๆ และปรับกฎไฟร์วอลล์เพื่อให้เซิร์ฟเวอร์ "หายไป" เมื่อตรวจพบพฤติกรรมที่อาจเป็นอันตรายจากลูกค้า บนเดเบียนมันออกมาจากกล่องกำหนดค่าให้ตรวจสอบการเข้าสู่ระบบ ssh ล้มเหลวหลายรายการจาก IP เฉพาะและหลังจาก 3 (ฉันคิดว่า) มันจะวางแพ็กเก็ตทั้งหมดจาก IP นั้น ทำงานได้อย่างยอดเยี่ยมเพื่อหยุดยั้งการโจมตีด้วยสคริปต์ที่ดุร้าย


0

ในฐานะที่เป็น @sufferer กล่าวถึงในคำตอบอื่นบาง distros Linux รวมถึงการตรวจสอบเพื่อป้องกันจากการโจมตีแรงเดรัจฉานในการให้บริการที่มองเห็นภายนอกเช่น SSH เช่นหรือDenyHosts fail2banมอนิเตอร์เหล่านี้ตรวจสอบล็อกไฟล์เพื่อค้นหาความพยายามที่ล้มเหลวและเพิ่มตัวกรองเพื่อบล็อกที่อยู่ IP ที่มีความล้มเหลวมากเกินไป (จำนวนสามารถกำหนดค่าได้และไม่ขึ้นกับ sshd config)

หาก distro ของคุณมีfail2banบริการใดบ้างที่ป้องกันบริการที่เพิ่มกฎในไฟร์วอลล์ iptables คุณสามารถตรวจสอบว่าบริการใดหรือ "คุก" ได้รับการดูแลโดยใช้คำสั่ง:

sudo fail2ban-client status

คุกสำหรับบริการ SSH คือ sshd ดังนั้นเพื่อตรวจสอบว่ามี IP ที่ถูกแบนหรือไม่ที่คุณสามารถใช้:

sudo fail2ban-client status sshd

และยกเลิกการห้ามใช้งาน abcd IP บางตัว:

sudo fail2ban-client set sshd unbanip a.b.c.d

หากคุณมีDenyHostsรายการต้องห้ามอยู่ในไฟล์ /etc/hosts.deny คุณสามารถแก้ไขไฟล์นี้โดยตรงในฐานะรูท หากต้องการให้สิทธิ์การเข้าถึง IP abcd แบบถาวรคุณสามารถเพิ่มบรรทัดsshd:a.b.c.dลงในไฟล์ /etc/hosts.allow

เช่นเคยmanคำสั่งคือเพื่อนของคุณ:

man fail2ban
man hosts.deny

ควรมียูทิลิตี้อื่น ๆ ที่คล้ายกันอยู่ แต่ฉันได้ใช้สิ่งเหล่านี้เท่านั้น

โปรดทราบว่าการเพิ่มจำนวนการลองใหม่ที่อนุญาตในการกำหนดค่า sshd ไม่ได้เพิ่ม IP ที่ถูกแบน แต่อนุญาตให้เกิดความล้มเหลวได้มากขึ้นในการเชื่อมต่อเดียวกัน หากเกินจำนวนที่อนุญาตผู้ใช้ / ผู้โจมตีจะทำการเชื่อมต่อใหม่อีกครั้งเพื่อลองอีกครั้ง

บริการอื่น ๆ มีการห้ามรายการรวม (ดังแสดงในคำตอบของ Rajnesh Thakur เกี่ยวกับการรีสตาร์ทเซิร์ฟเวอร์ VNC)


-2

ฉันแก้ไขปัญหานี้ด้วยสองขั้นตอนง่าย ๆ บนเซิร์ฟเวอร์ Ubuntu 16.04 ของฉัน -

แรกหยุดเซิร์ฟเวอร์ vnc ของฉันหรือฆ่ากระบวนการ -

vncserver -kill :1

จากนั้นเริ่มใหม่อีกครั้ง -

vncserver

หลังจากนั้นเชื่อมต่อจากไคลเอนต์เดสก์ท็อประยะไกล -

192.0.2.99:5901

เสร็จสิ้น !!


สิ่งนี้ไม่เกี่ยวกับคำถาม
เคนชาร์ป

-3

โปรดทำตามขั้นตอนด้านล่างเพื่อทำการแก้ปัญหา

  1. สำรองข้อมูล / etc / ssh / sshd_config
  2. เพิ่มค่าของ MaxAuthTries ใน sshd_config
  3. stopsrc -s sshd; startsrc -s sshd

และตรวจสอบอีกครั้งหลังจากการเปลี่ยนแปลงด้านบน


-4

ฉันมีปัญหาเดียวกันกับที่ฉันได้รับ "SServer ส่งข้อความที่ไม่ได้เชื่อมต่อประเภท 2 (ข้อผิดพลาดของโพรโทคอล): การตรวจสอบสิทธิ์ล้มเหลวมากเกินไปสำหรับผู้ใช้"

ฉันแก้ไขปัญหานี้โดยการลบ ssh (.ppk keys) ทั้งหมดของฉันจากนั้นเข้าสู่เซิร์ฟเวอร์ AD intergrated


คำตอบนี้ไม่เป็นประโยชน์และการแนะนำให้ลบไฟล์. pkk นั้นเป็นอันตราย ได้โปรดผู้คนถ้าคุณคิดว่าคุณต้องการลบไฟล์. pkk (และฉันไม่สามารถคิดได้ว่ามีเหตุผลที่ดีที่คุณต้องการ) ให้เปลี่ยนชื่อพวกเขาเป็นอย่างอื่นอย่าลบออก มันมีกุญแจของคุณซึ่งคุณอาจต้องการ
Law29
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.