ทำไม GitHub แนะนำ HTTPS มากกว่า SSH


334

บนเว็บไซต์ GitHub มีลิงค์ ...

https://help.github.com/articles/generating-ssh-keys

... และมันระบุ ...

หากคุณตัดสินใจที่จะไม่ใช้วิธี HTTPS ที่แนะนำเราสามารถใช้คีย์ SSH เพื่อสร้างการเชื่อมต่อที่ปลอดภัยระหว่างคอมพิวเตอร์ของคุณกับ GitHub ขั้นตอนด้านล่างจะนำคุณไปสู่การสร้างรหัส SSH แล้วเพิ่มรหัสสาธารณะในบัญชี GitHub ของคุณ

ทำไม HTTPS จึงเป็นวิธีที่แนะนำ? มีข้อบกพร่องด้านความปลอดภัยบางประเภทในวิธีการ SSH หรือช้าลง? ฉันสร้างคีย์ SSH เพื่อที่จะลดความกังวลด้านความปลอดภัยหรือไม่


39
การกำหนดค่าน้อยลงหมายถึงง่ายขึ้นบางที นอกจากนี้ระบบปฏิบัติการบางระบบที่ด้อยกว่ายังไม่มีการติดตั้งไคลเอ็นต์ SSH ตามค่าเริ่มต้น
katspaugh

45
สำหรับผู้ใช้ในอนาคตที่พบหัวข้อนี้: GitHub ได้เปลี่ยนนโยบายและตอนนี้พูดว่า "เราขอแนะนำอย่างยิ่งให้ใช้การเชื่อมต่อ SSH เมื่อมีปฏิสัมพันธ์กับ GitHub"
beardedlinuxgeek

9
@StevePomeroy ฉันไม่คิดว่าคำสั่ง "แนะนำอย่างยิ่ง" มีอยู่ในสถานที่นั้น
Noel Abrahams

5
@BawaiOak มันเคยเป็นในหน้า Steve Pomeroy ที่เชื่อมโยงกับ - web.archive.org/web/20140321204642/https://help.github.com/แต่ดูเหมือนว่าพวกเขาจะเปลี่ยนมันตั้งแต่นั้นมา
beardedlinuxgeek

5
@ br3nt ถูกต้อง พวกเขาไม่เคยแนะนำ จากนั้นพวกเขาก็ทำ จากนั้นพวกเขาก็ไม่ได้อีกครั้ง นั่นคือเหตุผลที่ลิงค์ของฉันไปยังหน้า archive.org
beardedlinuxgeek

คำตอบ:


192

GitHub เปลี่ยนคำแนะนำหลายครั้ง ( ตัวอย่าง )

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

ไม่มีข้อบกพร่องโดยธรรมชาติใน SSH (หากมีพวกเขาจะปิดการใช้งาน) - ในลิงก์ด้านล่างคุณจะเห็นว่าพวกเขายังให้รายละเอียดเกี่ยวกับการเชื่อมต่อ SSH เช่นกัน:

  1. HTTPS มีโอกาสน้อยที่จะถูกบล็อกโดยไฟร์วอลล์

    https://help.github.com/articles/which-remote-url-should-i-use/

    https: // clone URL นั้นมีอยู่ในที่เก็บทั้งหมดสาธารณะและส่วนตัว URL เหล่านี้ทำงานได้ทุกที่ - แม้ว่าคุณจะอยู่หลังไฟร์วอลล์หรือพร็อกซี

  2. การเชื่อมต่อ HTTPS อนุญาตให้credential.helperแคชรหัสผ่านของคุณ

    https://help.github.com/articles/set-up-git

    สิ่งที่ควรรู้: ผู้ช่วยหนังสือรับรองทำงานเฉพาะเมื่อคุณโคลน URL repo ของ HTTPS หากคุณใช้ URL repo ของ SSH แทนจะใช้คีย์ SSH สำหรับการตรวจสอบความถูกต้อง แม้ว่าเราจะไม่แนะนำ แต่ถ้าคุณต้องการใช้วิธีนี้ให้อ่านคู่มือนี้เพื่อช่วยในการสร้างและใช้คีย์ SSH


52
อ่าพวกเขาแนะนำ HTTPS อย่างง่าย ๆ ดังนั้นพวกเขาจึงไม่ต้องทำเอกสารssh-agent? ยุติธรรมพอสมควร ขอบคุณ!
sarnold

74
@sarnold อาจมีคำถามเกี่ยวกับ ssh-agent และการจัดการกุญแจสาธารณะมากกว่าและจำนวนไฟร์วอลล์ขององค์กรที่อนุญาต HTTP / HTTPS ขาออก แต่ไม่ใช่ SSH
Todd A. Jacobs

7
ฉันคิดว่า https ทำให้ผู้คนเริ่มต้นได้ง่ายขึ้นเนื่องจากคุณไม่ต้องทำธุรกิจหลักในการสร้าง / คัดลอก / วาง นอกจากนี้ยังสามารถดูได้ว่ามีความปลอดภัยมากขึ้นจากมุมมองของ Github เนื่องจากผู้โจมตีที่ได้รับรหัสผ่าน ssh ของคุณ (หรือพบว่าคอมพิวเตอร์ที่คุณเปิดทิ้งไว้) ยังคงต้องรู้รหัสผ่าน Github ของคุณเพื่อผลักดันสิ่งต่างๆ
k107

4
@kristi หากผู้โจมตีค้นพบเทอร์มินัลนั้นก่อนที่แคชรหัสผ่านจะหมดอายุเขาจะยังสามารถกดได้แม้ว่าเขาจะไม่รู้รหัสผ่านหรือไม่? คำถามจะเหมือนกันถ้าคุณใช้ ssh-agent ความแตกต่างที่ชัดเจนคือคุณต้องป้อนรหัสผ่านของคีย์ ssh แทนรหัสผ่าน github ของคุณ (และดูเหมือนว่าจะไม่มีการตั้งค่าที่ชัดเจนสำหรับการหมดอายุของแคช) แนวคิดของการป้อนรหัสผ่าน Github แทนรหัสผ่านของคีย์ ssh ดูเหมือนจะเป็นขั้นตอนย้อนหลังแม้ว่าจะเป็นรหัสขนาดเล็กเนื่องจากอำนาจที่ทั้งสองปุ่มให้คุณนั้นเกี่ยวกับ AFAIK เดียวกัน
Halil Özgür

8
ฉันคิดว่าเกือบทั้งหมดเกี่ยวกับการลดปริมาณการสอบถามการสนับสนุนที่พวกเขาได้รับ ฉันคิดว่าคุณอาจโต้แย้งได้ว่าเนื่องจากคุณต้องป้อนรหัสผ่าน HTTPS เพื่อเข้าถึงเว็บไซต์คุณจะไม่สามารถเพิ่มความปลอดภัยโดยใช้กลไกการพิสูจน์ตัวตนที่แตกต่างกัน (คีย์ SSH) แต่เป็นไปได้ว่าคุณเพิ่มพื้นผิวการโจมตีที่ อาจลดความปลอดภัย อย่างไรก็ตามทั้ง HTTPS และ SSH ควรมีความปลอดภัยเพียงพอหากใช้อย่างถูกต้อง
Cartroo

52

ฉันถือว่า HTTPS แนะนำโดย GitHub ด้วยเหตุผลหลายประการ

1) ใช้งานได้ง่ายกว่าทุกที่เพราะคุณต้องการรายละเอียดบัญชีของคุณเท่านั้น

2) HTTPS เป็นพอร์ตที่เปิดในไฟร์วอลล์ทั้งหมด SSH ไม่ได้เปิดเป็นพอร์ตสำหรับการสื่อสารกับเครือข่ายภายนอกเสมอไป

ดังนั้นที่เก็บ GitHub จึงสามารถเข้าถึง HTTPS ได้มากกว่าในระดับสากล

ในมุมมองของฉันคีย์ SSH คุ้มค่ากับการทำงานเล็ก ๆ น้อย ๆ ในการสร้างมันขึ้นมา

1) SSH Keys ไม่ให้การเข้าถึงบัญชี GitHub ของคุณดังนั้นบัญชีของคุณจะไม่ถูกขโมยหากกุญแจของคุณถูกขโมย

2) การใช้คีย์วลีที่แข็งแกร่งกับคีย์ SSH ของคุณจะ จำกัด การใช้งานในทางที่ผิดแม้ว่าคีย์ของคุณจะถูกขโมย

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

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

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

SSH สามารถทันเนลผ่าน HTTPS หากเครือข่ายที่คุณอยู่บนบล็อกพอร์ต SSH

https://help.github.com/articles/using-ssh-over-the-https-port/

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

หากคุณใช้ HTTPS ด้วยเครื่องมือ (เช่นเครื่องมือแก้ไข) คุณควรใช้โทเค็นนักพัฒนาจากบัญชี GitHub ของคุณแทนชื่อผู้ใช้แคชและรหัสผ่านในการกำหนดค่าเครื่องมือ


3
"แม้ว่าจะมีใครบางคนถือกุญแจส่วนตัวของคุณ แต่พวกเขาสามารถผลักดันพื้นที่เก็บข้อมูลที่ว่างเปล่าและล้างประวัติการเปลี่ยนแปลงของคุณ" - ใช่ (และน่ากลัวมาก) แต่ความงามของรหัสฐานกระจายช่วยให้เราสามารถกู้คืนกับใครบางคน มีสำเนาของมันอย่างน้อย
คาเมรอน

ฉันไม่แน่ใจว่าระบุว่าใครบางคนสามารถบังคับใช้การผลักดันเป็นความแตกต่างระหว่าง SSH และ HTTPS หากฉันมีชื่อผู้ใช้และรหัสผ่านของฉัน
Matt Canty

หากคุณมีชื่อผู้ใช้และรหัสผ่านคุณสามารถลบทุกอย่าง (หลังจากเปลี่ยนรหัสผ่านและที่อยู่อีเมลของหลักสูตร) ไม่จำเป็นต้องกดปุ่มบังคับแต่ละครั้งบนแต่ละที่เก็บถ้าคุณสามารถลบได้
jr0cket

คุณกำลังเปรียบเทียบรหัสผ่านกับคีย์ ssh ในขณะที่การเชื่อมต่อ https ต้องใช้โทเค็นพิเศษ
Alexey Sh

13

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

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

https://help.github.com/articles/generating-ssh-keys


22
FWIW หน้านี้ไม่มีข้อความ "แนะนำอย่างยิ่ง" ที่ยกมาในคำตอบนี้อีกต่อไป
Scott Isaacs

ยังคงใช้ "แนะนำ" สำหรับ HTTPS ในลิงค์ต่อไปนี้: help.github.com/articles/which-remote-url-should-i-use/ ...... "การโคลนด้วย HTTPS URL (แนะนำ)"
JBE

10

การเปิดใช้งานการเชื่อมต่อ SSH ผ่าน HTTPS หากถูกบล็อกโดยไฟร์วอลล์

ทดสอบว่า SSH ผ่านพอร์ต HTTPS เป็นไปได้หรือไม่ให้รันคำสั่ง SSH นี้:

$ ssh -T -p 443 git@ssh.github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

ถ้าได้ผลดีมาก! ถ้าไม่คุณอาจจำเป็นต้องปฏิบัติตามคู่มือการแก้ปัญหา

หากคุณสามารถเข้า SSH git@ssh.github.comผ่านพอร์ต443คุณสามารถแทนที่การตั้งค่า SSH ของคุณเพื่อบังคับให้การเชื่อมต่อใด ๆ กับ GitHub ทำงานแม้ว่าเซิร์ฟเวอร์และพอร์ตนั้น

หากต้องการตั้งค่านี้ในการกำหนดค่า ssh ของคุณให้แก้ไขไฟล์ที่~/.ssh/configและเพิ่มส่วนนี้:

Host github.com
  Hostname ssh.github.com
  Port 443

คุณสามารถทดสอบว่าสิ่งนี้ทำงานได้โดยเชื่อมต่อกับ GitHub อีกครั้ง:

$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

จากการพิสูจน์ตัวตนถึง GitHub / การใช้ SSH ผ่านพอร์ต HTTPS


9

ดูเพิ่มเติมที่: URLอย่างเป็นทางการของรีโมตใดที่ฉันควรใช้ ตอบใน help.github.com

แก้ไข:

ดูเหมือนว่าไม่จำเป็นที่จะต้องมีสิทธิ์การเขียนเพื่อเข้าถึง repo สาธารณะเพื่อใช้ URL SSH อีกต่อไปซึ่งทำให้คำอธิบายดั้งเดิมของฉันไม่ถูกต้อง

ORIGINAL:

เห็นได้ชัดว่าเหตุผลหลักที่นิยมใช้ HTTPS URL ก็คือ SSH URL นั้นจะไม่ทำงานร่วมกับ repo สาธารณะหากคุณไม่มีสิทธิ์เข้าถึงการเขียนของ repo นั้น

อย่างไรก็ตามการใช้ URL SSH ได้รับการสนับสนุนสำหรับการปรับใช้กับเซิร์ฟเวอร์ที่ใช้งานจริง - บริบทที่นี่คือบริการเช่น Heroku


1
"URL เหล่านี้ให้การเข้าถึงที่เก็บ git ผ่าน SSH ในการใช้ URL เหล่านี้คุณต้องมีการเข้าถึงการเขียนไปยังพื้นที่เก็บข้อมูลสาธารณะหรือการเข้าถึงพื้นที่เก็บข้อมูลส่วนตัว URL เหล่านี้จะไม่ทำงานกับพื้นที่เก็บข้อมูลสาธารณะที่คุณไม่มีสิทธิ์เข้าถึงเขียน " - นี่ไม่เป็นความจริง. ทุกคนสามารถโคลน repo สาธารณะด้วย URL SSH พวกเขาไม่มีสิทธิ์เข้าถึงเขียน
Sam

1
@ แซมมันอาจไม่เป็นจริงอีกต่อไป แต่เป็นจริงเมื่อฉันตอบคำถาม ฉันได้แก้ไขคำตอบของฉันเพื่อสะท้อนการเปลี่ยนแปลง
Mark Tye

จริง คำถาม "GitHub จะแนะนำ HTTPS ผ่าน SSH อย่างไร" จะไร้สาระ
Mark Tye

0

เป็นไปได้ที่จะยืนยันว่าการใช้คีย์ SSH เพื่อตรวจสอบสิทธิ์นั้นมีความปลอดภัยน้อยกว่าเนื่องจากเรามักจะเปลี่ยนรหัสผ่านของเราเป็นระยะมากกว่าที่เราจะสร้างคีย์ SSH ใหม่

เซิร์ฟเวอร์ที่ จำกัด อายุการใช้งานที่พวกเขาจะให้เกียรติกับคีย์ SSH สามารถช่วยให้ผู้ใช้ไปสู่การปฏิบัติของการรีเฟรช SSH-keys เป็นระยะ


ตอนนี้ก็ถือว่าคำแนะนำที่ไม่ดีเพื่อให้ผู้ใช้เปลี่ยนรหัสผ่านเป็นระยะ มุมมองของรัฐบาลสหราชอาณาจักร: ncsc.gov.uk/articles/problems-forcing-regular-password-expiry
nazerb

-3

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.