การขออนุญาตถูกปฏิเสธ (คีย์สาธารณะ) บน gitlab


135

ปัญหาของฉันคือฉันไม่สามารถพุชหรือดึงข้อมูลจาก GitLab อย่างไรก็ตามฉันสามารถโคลน (ผ่าน HTTP หรือผ่าน SSH) ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามผลักดัน:

การอนุญาตถูกปฏิเสธ (คีย์สาธารณะ) ร้ายแรง: ไม่สามารถอ่านจากที่เก็บระยะไกล

จากหัวข้อทั้งหมดที่ฉันดูนี่คือสิ่งที่ฉันได้ทำ:

  • ตั้งค่าคีย์ SSH บนคอมพิวเตอร์ของฉันและเพิ่มคีย์สาธารณะลงใน GitLab
  • ทำการกำหนดค่า --global สำหรับชื่อผู้ใช้และอีเมล
  • โคลนผ่าน SSH และผ่าน HTTP เพื่อตรวจสอบว่าจะแก้ปัญหาได้หรือไม่
  • ทำคำสั่ง ssh -T git@gitlab.com

หากคุณมีข้อมูลเชิงลึกเกี่ยวกับวิธีการแก้ไขปัญหาของฉันขอขอบคุณเป็นอย่างยิ่ง


5
วิ่งssh -vvvv git@gitlab.comเพื่อดูว่ามันหยิบคีย์ SSH หรือไม่
Nils Werner

1
คุณเพิ่มคีย์ SSH ผ่านgitlab.com/profile/keysหรือไม่
อักค่าโดยสาร

@ Nils Werner: ฉันมีบรรทัดมากมายเมื่อฉันทำคำสั่งนี้ แต่หนึ่งในนั้นคือ "Authentification successed (publickey)"
Alexandre Fernandes Bartolomeu

4
ตรวจสอบให้แน่ใจว่าคุณไม่ได้ทำงานsudo git clone git@gitlab.com:project/somethiing.gitมิฉะนั้น ssh จะดู/root/.sshแทนคีย์ที่คุณอัปโหลด~/.ssh/id_rsa
rivanov

1
ฉันแก้ไขปัญหาเดียวกันโดยการเพิ่มคีย์ให้กับตัวแทนผ่าน "ssh-add ~ / .ssh / the_key" ตามด้วยการอนุญาตให้คีย์ทีละวลี นี่เป็นส่วนส่วนตัวของสิ่งที่ฉันเพิ่มลงใน GitLab
Celdor

คำตอบ:


261

ฉันพบสิ่งนี้หลังจากค้นหามามากมาย มันจะทำงานได้ดีสำหรับฉัน

  1. ไปที่ "Git Bash" เหมือนกับ cmd คลิกขวาและ "Run as Administrator"
  2. ชนิด ssh-keygen
  3. กดปุ่มตกลง.
  4. จะขอให้คุณบันทึกคีย์ลงในไดเร็กทอรีเฉพาะ
  5. กดปุ่มตกลง. มันจะแจ้งให้คุณพิมพ์รหัสผ่านหรือป้อนโดยไม่ต้องใช้รหัสผ่าน
  6. คีย์สาธารณะจะถูกสร้างขึ้นในไดเร็กทอรีเฉพาะ
  7. ตอนนี้ไปที่ไดเร็กทอรีและเปิด.sshโฟลเดอร์
  8. id_rsa.pubคุณจะเห็นไฟล์ เปิดบนแผ่นจดบันทึก คัดลอกข้อความทั้งหมดจากมัน
  9. ไปที่https://gitlab.com/profile/keys
  10. วางที่นี่ในช่องข้อความ "คีย์"
  11. ตอนนี้คลิกที่ "หัวข้อ" ด้านล่าง มันจะถูกเติมโดยอัตโนมัติ
  12. จากนั้นคลิก "เพิ่มคีย์"

ตอนนี้ให้มันยิงและจะทำงานได้อย่างแน่นอน


2
ในกรณีที่คุณหลงทางในการคัดลอกไฟล์ pub ไปยังคลิปบอร์ด ลองทำดังต่อไปนี้:type %userprofile%\.ssh\id_rsa.pub | clip
jquijano

5
ใน windows 10 หากคุณต้องการค้นหา. ssh \ id_rsa.pub คุณสามารถพิมพ์ cat ~ / .ssh / id_rsa.pub นี้บน git bash มันจะแสดง "คีย์" ให้คุณเพื่อให้คุณสามารถคัดลอกและวางลงในช่องข้อความ ในgitlab.com/profile/keys
ชุติพงษ์รากกลม

11
ตรวจสอบให้แน่ใจว่าได้ทำสิ่งนี้: ssh-add filename(มีเส้นทางหากไม่ได้อยู่ใน rsa dir) หลังจากทำตามขั้นตอนข้างต้น
Blasanka

3
ฉันทำสิ่งนี้แล้วปัญหาไม่ได้รับการแก้ไขได้รับการอนุญาตถูกปฏิเสธ
Billal Begueradj

. ทำงานอย่างมีเสน่ห์. ขอบคุณ!
RafiAlhamd

62

ขั้นตอนที่ 1: เพิ่มไฟล์กำหนดค่าใน~/.ssh/configไฟล์ที่ดูเหมือน

   User git
   Hostname gitlab.com
   IdentityFile ~/.ssh/id_rsa_gitlab
   TCPKeepAlive yes
   IdentitiesOnly yes

ขั้นตอนที่ 2: เพียงแค่โคลน repo git โดยไม่ต้อง sudo
เอกสารประกอบ: https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths


1
สิ่งนี้จำเป็นหากมีการใช้คีย์ไฟล์ที่มีชื่อดีฟอลต์อยู่แล้วเพื่อวัตถุประสงค์อื่น หากคุณกำลังสร้างคีย์ - ไฟล์โดยใช้ชื่อที่ไม่ใช่ค่าเริ่มต้นเช่นid_rsa_gitlabในตัวอย่างของ Fedo คุณจะต้องจัดหาไฟล์กำหนดค่า บทความดีๆของ Gitlab เกี่ยวกับเรื่องนี้: gitlab.com/help/ssh/…
Dany

สิ่งนี้ได้ผลสำหรับฉัน ฉันมีทั้งคีย์ Github และ Gitlab เพื่อให้คุณใช้วิธีนี้
M.Cush

ฉันต้องเปลี่ยนHostnameเพื่อHostให้ทำงานนี้
Sadee

26

ฉันคิดว่าวิธีง่ายๆคือการเพิ่มคีย์ส่วนตัวให้กับตัวแทนการพิสูจน์ตัวตน (ถ้ารหัสของคุณไม่ใช่~/.ssh/id_rsa)

ssh-add ~/.ssh/<your private key>

โดยทั่วไปคุณปล่อยให้ssh-agentดูแลมัน

นอกจากนี้คุณสามารถเพิ่มอย่างถาวร


เป็นไฟล์ที่มีนามสกุล. ผับ
เฟลิเป้

7
ไม่คีย์ส่วนตัวคือไฟล์ที่ไม่มี.pubนามสกุล
Hussain

15

ในกรณีของฉันมันไม่ทำงานใน WSL (Windows Subsystem for Linux)

เมื่อฉันเริ่ม WSL ฉันต้อง

  • เริ่ม ssh-agent_ eval $(ssh-agent -s)
  • เพิ่มคีย์ให้กับ ssh-agent: ssh-add ~/.ssh/id_rsa
  • หากได้รับแจ้งให้ป้อนรหัสผ่าน

ตอนนี้การเชื่อมต่อใช้งานได้
เราสามารถทดสอบสิ่งนี้ด้วยssh -T git@github.com

บันทึก:


12

ตรวจสอบให้แน่ใจว่าคุณไม่ได้ทำงานsudo git clone git@gitlab.com:project/somethiing.gitมิฉะนั้น ssh จะดู/root/.sshแทนคีย์ที่คุณอัปโหลด~/.ssh/id_rsa


ขอบคุณคุณผู้ชาย บริษัท ของฉันต้องการ em / โฟลเดอร์โครงการ ฉันต้อง gerenate ssh โดยใช้ sudo ด้วยวิธีนี้ฉันสามารถใช้ sudo git clone คำแนะนำของคุณช่วยฉันได้มาก
Jocsã

10

มีวิธีแก้ปัญหาที่ง่ายมาก: แทนที่จะทำงานกับ ssh ให้ย้ายไปที่ https เพื่อทำสิ่งนี้: ในโฟลเดอร์โครงการของคุณคุณมีโฟลเดอร์. git อยู่ที่นั่น - คุณมีไฟล์ config - เปิดในโปรแกรมแก้ไขข้อความและเปลี่ยนบรรทัด

url =git@gitlab.com: yourname / yourproject.git

ถึง

url = https://gitlab.com/yourname/yourproject.git


ขอบคุณ. ทำงานให้ฉัน
ktv6

7

หากคุณใช้ Linux หรือ macox ให้ลองใช้ในเทอร์มินัล:

ssh-add -l

หากไม่คืนค่าใด ๆ ให้ลองทำดังนี้:

ssh-add

ต้องสร้างเอกลักษณ์ใน ~ / .ssh / id_rsa

หลังจากลองใหม่:

ssh-add -l

จะต้องส่งคืนข้อมูลประจำตัวของคุณดังนั้นหลังจากลองโคลนอีกครั้งจะต้องใช้งานได้

หมายเหตุ: อย่าลืมเพิ่มคีย์ ssh ใน gitlab โปรไฟล์ของคุณ

ขอบคุณ


5

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

คุณสามารถตรวจสอบการตั้งค่าเซิร์ฟเวอร์ SSH /etc/ssh/sshd_configของคุณ หากคุณมีบรรทัดที่มีตัวเลือกAllowUsersให้เพิ่ม git เข้าไป:

AllowUsers user1 user2 user3 git

3

ฉันใช้ gitlab กับนักเทียบท่านี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหาของฉัน

พบว่าภายในdocker / var / log / gitlab / sshd / currentมีข้อความเกิดขึ้นหลายครั้ง:

ปฏิเสธการรับรองความถูกต้อง: ความเป็นเจ้าของที่ไม่ถูกต้องหรือโหมดสำหรับไฟล์ /var/opt/gitlab/.ssh/authorized_keys

หลังจากนั้นฉันเปลี่ยนความเป็นเจ้าของไฟล์นั้นจาก99: usersเป็นgit: usersด้วย:

chown git: ผู้ใช้ที่ได้รับอนุญาต _keys


1
ขอบคุณมาก. ฉันใช้ Gitlab บน Kubernetes และไดเร็กทอรี / gitlab-data (ซึ่งเป็นจุดเชื่อมต่อสำหรับ Authorized_keys ด้วย) มีปัญหาเรื่องสิทธิ์ Chown ธรรมดา ๆ ก็เพียงพอแล้ว
Dillen Meijboom

3

ขั้นตอนที่ต้องทำมีข้อผิดพลาดเดียวกัน แต่ฉันแก้ไขแล้ว Gitlab ต้องการ ssh-rsa ดังนั้นด้านล่างคือรหัสเพื่อเรียกใช้ ssh สำหรับ rsa

  1. ssh-keygen -o -t rsa -b 4096 -C "name@gmail.com"

name@gmail.com คืออีเมลบัญชี gitlab ของคุณ

  1. มันจะแจ้งให้คุณป้อนดังนั้นเพียงแค่กด Enter หลังจากที่รหัสด้านล่างพร้อมต์

    ป้อนไฟล์ที่จะบันทึกคีย์ (/home/yourDesktopName/.ssh/id_rsa):

  2. มันจะแจ้งให้คุณป้อนอีกครั้งดังนั้นเพียงแค่กด Enter หลังจากที่รหัสด้านล่างพร้อมต์

    ป้อนข้อความรหัสผ่าน (ว่างเปล่าหากไม่มีข้อความรหัสผ่าน):

  3. มันจะแจ้งให้คุณป้อนครั้งสุดท้ายอีกครั้งดังนั้นเพียงแค่กด Enter หลังจากที่รหัสด้านล่างพร้อมต์

    ป้อนรหัสผ่านเดียวกันอีกครั้ง:

  4. คุณจะแสดงการสร้าง ssh-rsa ของคุณ

  5. เข้าสู่ระบบบัญชี Gitlab ของคุณและไปที่แถบนำทางด้านขวาคุณจะได้รับการตั้งค่าและในแถบด้านข้างทางซ้ายคุณจะได้รับคีย์ ssh ใส่ในนั้น

  6. มองไปที่ข้อความแจ้งขอให้คุณป้อนคุณจะได้รับเส้นทางของ ssh-rsa

  7. ไปที่โฟลเดอร์ SSH ของคุณแล้วรับ id_rsa.pub

  8. เปิดและรับคีย์และคัดลอกวางไปที่ Gitlab และคุณเกือบจะเสร็จแล้ว

  9. ตรวจสอบโดย: ssh -T git@gitlab.com

  10. คุณจะได้รับ: Welcome to GitLab, @joy4!

  11. เสร็จสิ้น


ขอบคุณ สิ่งนี้ใช้ได้กับ windows 10 ฉันลอง ed25519 ตามที่ gitlab สั่ง แต่ไม่ทำงาน
ฎีกา

คำตอบนี้ค่อนข้างดี - ไม่แน่ใจว่าทำไมจึงไม่ได้รับการโหวตให้สูงขึ้น
mgibson

3

ก่อนหน้านี้มันยากมากสำหรับฉัน แต่เมื่อฉันลองมันกลายเป็นเรื่องง่ายมากที่จะเพิ่มคีย์ ssh ใน Mac และ Linux มีขั้นตอนและคำสั่งในการดำเนินการดังต่อไปนี้:

  1. เปิดเทอร์มินัลของระบบของคุณและย้ายเข้าไปในไดเร็กทอรีโปรเจ็กต์ของคุณโดยใช้คำสั่ง:
cd 'project directory name'
  1. เรียกใช้คำสั่ง ssh-keygenในเทอร์มินัลนั้นและป้อนจนกว่าภาพสุ่มของคีย์จะปรากฏขึ้นที่นั่น

  2. จากนั้นป้อนอีกหนึ่งคำสั่งในเทอร์มินัลนั้น:

cat ~/.ssh/id_rsa.pub

มันจะสร้างคีย์ ssh ของคุณ คีย์จะขึ้นต้นด้วยssh-rsaและลงท้ายด้วย.localและจบด้วย

  1. คัดลอกคีย์และไปที่ส่วนโปรไฟล์ Gitlab ของคุณจากนั้นssh keyส่วนและวางที่นั่น คลิกที่Addปุ่มนี้จะใช้งานได้

สิ่งนี้ได้ผลสำหรับฉัน! ขอบคุณ
Shamseer Ahammed

2

ฉันมีปัญหาเดียวกันฉันแก้ไขได้โดยการเพิ่มคีย์ ssh ใหม่:

  1. ssh-keygen -t ed25519 -C "email@example.com"
  2. คัดลอกคีย์ SSH สาธารณะของคุณไปยังคลิปบอร์ด (xclip -sel clip < ~/.ssh/id_ed25519.pubในกรณีของฉันบน Linux)
  3. บน gitlab ไปที่settings=>sshคีย์และวางคีย์ใหม่

2

เมื่อคุณมีบัญชี git หลายบัญชีและคุณต้องการคีย์ ssh ที่แตกต่างกัน

คุณต้องทำตามขั้นตอนเดียวกันในการสร้างคีย์ ssh แต่ต้องแน่ใจว่าคุณ

ssh-keygen -t ed25519 -C "your-email-id@gmail.com" 

ป้อนเส้นทางที่คุณต้องการบันทึก (เช่น my-pc / Desktop / .ssh / ed25519)

เพิ่มคีย์สาธารณะใน gitlab ของคุณ ( วิธีเพิ่มคีย์ ssh ใน gitlab )

คุณต้องสร้างข้อมูลประจำตัว ssh ใหม่โดยใช้ comand ด้านล่าง

ssh-add ~/my-pc/Desktop/.ssh/ed25519

2

สองสิ่งหลัก ๆ

  1. คุณต้องมีคีย์ id_rsa.pub และ id_rsa (ส่วนตัว) ในโฟลเดอร์. ssh ของคุณ (ซึ่งควรอยู่ในโฟลเดอร์บ้านของคุณสร้างมันหากไม่มีให้ใส่คีย์ของคุณ) มันจะไม่ได้ผลหากคุณตั้งชื่อไฟล์คีย์ของคุณแตกต่างกัน

  2. เปลี่ยนสิทธิ์ของ id_rsa เป็น chmod 400 ~ / .ssh / id_rsa


2

อีกปัญหาหนึ่งที่อาจทำให้เกิดพฤติกรรมนี้คือเมื่อคุณมีการตั้งค่าที่เป็นไปได้ 2% HOME% -locations

ฉันใช้พีซีที่ซึ่งเอกสารบางส่วนของฉันถูกจัดเก็บไว้ในเครื่องและเอกสารบางส่วนจะถูกเก็บไว้ในไดรฟ์เครือข่าย แอปพลิเคชันบางตัวคิดว่าC:\Users\<MyUserName>\เป็นของฉัน%home%คนอื่นคิดว่าU:\เป็นบ้าน

จะเปิดออกssh-keygenใส่กุญแจส่วนตัวของฉันภายใต้C:\users\<MyUserName>\และที่ssh -Tและssh -vยังดูมี

ดังนั้นทุกอย่างน่าจะปรับการทำงานยกเว้นว่าgit clone, git pushและคนอื่น ๆ มองหาที่สำคัญในU:\มองหาที่สำคัญใน ซึ่งล้มเหลวดังนั้นฉันจึงได้รับข้อผิดพลาดดังกล่าว

ฉันใช้เวลาหนึ่งชั่วโมงในการค้นหา แต่ในที่สุดวิธีแก้ปัญหาก็ง่ายมาก: ฉันคัดลอกทุกอย่างจากC:\Users\<MyUserName>\.sshถึงU:\.ssh


1

ก็แก้แบบนี้ ..

สร้างคีย์สำหรับ Windows โดยใช้คำสั่งนี้:

ssh-keygen -t rsa -C "your.email@example.com" -b 4096

แต่ปัญหาคือหลังจากเรียกใช้คำสั่งนี้มันโผล่ขึ้นมาบรรทัด: "ป้อนไฟล์ที่จะบันทึกคีย์ (/c/Users/xxx/.ssh/id_rsa):" ที่นี่ฉันให้ชื่อไฟล์เท่านั้นเนื่องจาก คีย์ของฉันได้รับการบันทึกใน pwd ของฉันและไม่ได้อยู่ในตำแหน่งที่กำหนด เมื่อฉันทำ "git clone" สมมติว่าคีย์อยู่ที่ตำแหน่ง "/c/Users/xxx/.ssh/id_rsa" แต่ไม่พบจึงเกิดข้อผิดพลาด

ในช่วงเวลาของการสร้างคีย์ 2 ไฟล์ถูกสร้างขึ้นโดยพูดว่า "file1" & "file1.pub" ฉันเปลี่ยนชื่อไฟล์ทั้งสองนี้เป็นไฟล์

file1 -> id_rsa 

และ

file1.pub -> id_rsa.pub

และวางไว้ในตำแหน่งที่ตั้ง "/c/Users/xxx/.ssh/"


1

ไปที่เทอร์มินัลและสร้างคีย์ ssh อีกครั้ง ประเภท ssh-keygen. มันจะถามคุณว่าคุณต้องการบันทึกไว้ที่ไหนพิมพ์เส้นทาง

จากนั้นคัดลอกคีย์สาธารณะไปยังแพลตฟอร์ม gitlabs โดยปกติจะเริ่มต้นด้วย ssh-rsa


1

ปัญหาสำหรับผมก็คือว่าผมเปลี่ยนUsePAMจากyesไปnoในแฟ้มการกำหนดค่า SSH /etc/ssh/sshd_configภายใต้ ด้วยUsePAM yesการทำงานทุกอย่างได้อย่างสมบูรณ์แบบ


1

ผมพบว่าวิธีการแก้ปัญหาในความช่วยเหลือ gitlab

To create a new SSH key pair: 
 1. Open a terminal on Linux or macOS, or Git Bash / WSL on Windows.
 2. Generate a new ED25519 SSH key pair: ssh-keygen -t ed25519 -C "email@example.com"
 2.1 Or, if you want to use RSA: ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
 3. Next, you will be prompted to input a file path to save your SSH key pair to... use the suggested path by pressing Enter
 4. Once the path is decided, you will be prompted to input a password to secure your new SSH key pair. It's a best practice to use a password, but it's not required and you can skip creating it by pressing Enter twice.
 5. Copy your public SSH key to the clipboard by using one of the commands below depending on your Operating System:
        macOS:        pbcopy < ~/.ssh/id_ed25519.pub
        WSL / GNU/Linux (requires the xclip package):      xclip -sel clip < ~/.ssh/id_ed25519.pub
        Git Bash on Windows:      cat ~/.ssh/id_ed25519.pub | clip
 6. Navigating to SSH Keys and pasting your public key in the Key field
 7. Click the Add key button

ฉันหวังว่ามันจะช่วยพวกคุณได้บ้าง!


1

จะเพิ่มคีย์ SSH ในบัญชี gitlab ใน Ubuntu ได้อย่างไร

  1. เปิดเทอร์มินัลในไดเรกทอรีโครงการของคุณ
  2. พิมพ์ 'ssh-keygen -o -t rsa -b 4096 -C "your gitlab email"' แล้วกด Enter
  3. พิมพ์ 'vim /home/mnbtech/.ssh/id_rsa.pub' แล้วกด Enter (หรือเปิด 'id_rsa.pub' ด้วยตนเองจากจุดที่คุณบันทึกไว้)
  4. คีย์ SSH จะปรากฏขึ้น คัดลอกสิ่งเหล่านั้นและ

  5. ไปที่บัญชี gitlab ของคุณ

  6. คลิกรูปโปรไฟล์แล้วคลิกการตั้งค่า
  7. ทางด้านซ้ายเลือก SSH-Keys
  8. จากนั้นวางคีย์เหล่านั้นคลิกเพิ่มคีย์

SSH-Key จะถูกเพิ่ม!

(หมายเหตุหากคุณมีคีย์ SSH สร้างการแสดงตัวอย่างและการขออนุญาตถูกปฏิเสธ (คีย์สาธารณะ) คุณลบคีย์ ssh ของการแสดงตัวอย่างและสร้างใหม่และเพิ่ม git user.name และอีเมลบนเทอร์มินัลของคุณ)


คำตอบนั้นแตกต่างจากคำแนะนำก่อนหน้าอย่างไร
RalfFriedl

1

ฉันแก้ไขgit@gitlab.com: Permission denied (publickey)ปัญหาโดยใช้คำแนะนำต่อไปนี้

  1. วิ่ง cat ~/.ssh/id_rsa.pub
  2. คัดลอกid_rsa.pub(คีย์สาธารณะ) ไปที่ getlab ของคุณ `การตั้งค่า -> คีย์ SSH
  3. วิ่ง cat ~/.ssh/id_rsa
  4. คัดลอกid_rsa(คีย์ส่วนตัว) ไปที่ `Code_repo-> git_auth-> id_rsa

หมายเหตุ:ดูแลผู้ใช้เครื่องหากคุณกำลังใช้rootผู้ใช้ใน DockerFile หรือที่อื่นจากนั้นใช้sudo suก่อนที่จะเรียกใช้คำสั่งข้างต้นเพื่อรับคีย์สาธารณะและคีย์ส่วนตัวของผู้ใช้รูท


1

ในกรณีของเราไม่ใช่ปัญหาในฝั่งผู้ใช้ / ไคลเอ็นต์ แต่เป็นที่ฝั่งเซิร์ฟเวอร์ Gitlab

เรากำลังเรียกใช้อินสแตนซ์ Gitlab CE 12.9 ในเครื่องบน CentOS 7.1

เราพบว่าบนเซิร์ฟเวอร์ไฟล์. ssh / Authorized_keysไม่ได้รับการอัปเดตอย่างถูกต้อง ผู้ใช้สร้างคีย์ SSH ของตน (ตามคู่มือ Gitlab) และเพิ่มลงในเซิร์ฟเวอร์ Gitlab แต่เซิร์ฟเวอร์ไม่อัปเดตคีย์ที่ได้รับอนุญาตดังนั้นจะส่งผลให้เกิดข้อผิดพลาดที่ปฏิเสธการอนุญาตเสมอ

วิธีแก้ปัญหาคือการสร้างไฟล์ Author_keys ใหม่โดยการรัน:

$ sudo gitlab-rake gitlab:shell:setup

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

วิธีการแก้ปัญหาอย่างถาวรมากขึ้นก็จะไม่ได้ใช้authorized_keysไฟล์และใช้แทนที่จะค้นหาการจัดทำดัชนีบนฐานข้อมูล Gitlab :

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

เพิ่มสิ่งต่อไปนี้ลงในsshd_configไฟล์ของคุณ โดยปกติจะอยู่ที่ /etc/ssh/sshd_configแต่/assets/sshd_configถ้าคุณใช้ Omnibus Docker:

Match User git    # Apply the AuthorizedKeysCommands to the git user only   
  AuthorizedKeysCommand /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell-authorized-keys-check git %u %k   
  AuthorizedKeysCommandUser git 
Match all    # End match, settings apply to all users again 

โหลด OpenSSH ใหม่:

# Debian or Ubuntu installations   
sudo service ssh reload

# CentOS installations   
sudo service sshd reload 

ยืนยันว่า SSH ใช้งานได้โดยลบคีย์ SSH ของผู้ใช้ใน UI เพิ่มคีย์ใหม่และพยายามดึง repo

ตามค่าเริ่มต้น (ซึ่งเป็นค่าเริ่มต้นในการติดตั้งของเรา) ไฟล์เขียนถึง Author_keys จะถูกตรวจสอบในพื้นที่ผู้ดูแลระบบ> การตั้งค่าการเพิ่มประสิทธิภาพประสิทธิภาพ ดังนั้นเราจึงยกเลิกการเลือกและใช้ฐานข้อมูล Gitlab แทน

ใส่คำอธิบายภาพที่นี่

หลังจากตั้งค่าการค้นหาที่จัดทำดัชนีและยกเลิกการเลือกไฟล์เขียนถึง Author_keys การเข้าถึง SSH ก็ตกลง


1

สำหรับใครก็ตามที่ใช้Windows 10และไม่มีสิ่งอื่นใดที่ใช้ได้ผลสำหรับเขา / เธอ:

ในกรณีของฉันฉันต้องโคลน repo ด้วยhttpsแทน ssh และหน้าต่างโผล่ขึ้นมาเพื่อขอข้อมูลรับรองของฉัน หลังจากนั้นทุกอย่างก็ใช้ได้ดี


1

ฉันรู้ว่าฉันตอบเรื่องนี้ช้ามากและแม้แต่ StackOverflow ก็ยืนยันว่าฉันต้องการตอบจริงๆ ฉันตอบเพราะไม่มีใครอธิบายถึงปัญหาที่เกิดขึ้นจริงจึงอยากแบ่งปันเหมือนกัน

พื้นฐาน

ก่อนอื่นต้องทำความเข้าใจก่อนว่ารีโมทที่นี่คืออะไร ระยะไกลคือ GitLab และระบบของคุณเป็นแบบโลคัลดังนั้นเมื่อเราพูดถึงรีโมตoriginURL ใดก็ตามที่ตั้งค่าไว้ในgit remote -vเอาต์พุตของคุณคือ URL ระยะไกลของคุณ

โปรโตคอล

โดยทั่วไป Git clone / push / pull จะทำงานบนโปรโตคอลสองโปรโตคอลที่แตกต่างกันโดยส่วนใหญ่ (มีอื่น ๆ ด้วย) -

  1. โปรโตคอล HTTP
  2. โปรโตคอล SSH

เมื่อคุณโคลน repo (หรือเปลี่ยน URL ระยะไกล) และใช้ HTTPs URL เช่นhttps://gitlab.com/wizpanda/backend-app.gitจะใช้โปรโตคอลแรกคือโปรโตคอล HTTP

แม้ว่าคุณจะโคลน repo (หรือเปลี่ยน URL ระยะไกล) และใช้ URL เช่นgit@gitlab.com:wizpanda/backend-app.gitนั้นก็จะใช้โปรโตคอล SSH

โปรโตคอล HTTP

ในโปรโตคอลนี้ทุกการดำเนินการระยะไกลเช่นโคลน push & pull ใช้การตรวจสอบความถูกต้องง่ายๆเช่นชื่อผู้ใช้และรหัสผ่านของรีโมตของคุณ (GitLab ในกรณีนี้) ซึ่งหมายความว่าสำหรับการดำเนินการทุกครั้งคุณต้องพิมพ์ชื่อผู้ใช้และรหัสผ่านซึ่งอาจยุ่งยาก .

ดังนั้นเมื่อคุณผลัก / ดึง / โคลน GitLab / GitHub จะตรวจสอบสิทธิ์คุณด้วยชื่อผู้ใช้และรหัสผ่านของคุณและจะช่วยให้คุณดำเนินการได้

หากคุณต้องการที่จะลองนี้คุณสามารถสลับไปใช้ HTTP URL git remote set-url origin <http-git-url>โดยใช้คำสั่ง

เพื่อหลีกเลี่ยงกรณีดังกล่าวคุณสามารถใช้โปรโตคอล SSH

SSH โปรโตคอล

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

ตอนนี้เมื่อคุณดัน / ดึง / โคลนด้วย GitLab GIT (SSH ภายใน) จะเสนอคีย์ส่วนตัวของคุณให้กับ GitLab ตามค่าเริ่มต้นและยืนยันตัวตนของคุณจากนั้น GitLab จะอนุญาตให้คุณดำเนินการได้

ดังนั้นฉันจะไม่ทำซ้ำขั้นตอนที่มูฮัมหมัดมอบให้แล้วฉันจะทำซ้ำตามทฤษฎี

  1. สร้างคู่คีย์ `ssh-keygen -t rsa -b 2048 -C" My Common SSH Key "
  2. คู่คีย์ที่สร้างขึ้นจะเป็นค่าเริ่มต้นใน~/.sshชื่อid_rsa.pub(คีย์สาธารณะ) & id_rsa(คีย์ส่วนตัว)
  3. คุณจะจัดเก็บคีย์สาธารณะไว้ในบัญชี GitLab ของคุณ (สามารถใช้คีย์เดียวกันในหลายเซิร์ฟเวอร์ / บัญชีใดก็ได้)
  4. เมื่อคุณโคลน / ดัน / ดึง GIT จะเสนอคีย์ส่วนตัวของคุณ
  5. GitLab จับคู่คีย์ส่วนตัวกับคีย์สาธารณะของคุณและช่วยให้คุณดำเนินการได้

เคล็ดลับ

คุณควรสร้างคีย์ rsa ที่แข็งแกร่งโดยมีอย่างน้อย 2048 ไบต์ ssh-keygen -t rsa -b 2048ดังนั้นคำสั่งที่สามารถ

https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair

ความคิดทั่วไป

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

ฉันพบเอกสารอย่างเป็นทางการนี้https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocolsซึ่งบอกข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ประเด็นของฉันคือเมื่ออ่านข้อผิดพลาดและให้ความคิดเกี่ยวกับข้อผิดพลาดคุณสามารถสร้างทฤษฎีหรือความเข้าใจของคุณเองจากนั้นสามารถจับคู่กับผลลัพธ์ของ Google เพื่อแก้ไขปัญหาได้ :)


0

ฉันเพิ่มฉัน~/.ssh/id_rsa.pubในรายชื่อของที่รู้จักกันคีย์ SSH ในการตั้งค่าของฉัน GitLab https://gitlab.com/profile/keys นั่นช่วยแก้ปัญหาให้ฉันได้ :-)


0

ฉันใช้ ubuntu 18.04 และเป็นปัญหาการอนุญาตในเครื่องของฉัน ปัญหานี้หมดไปเมื่อฉันตั้งค่าสิทธิ์ในการอ่าน / เขียนให้กับโฟลเดอร์. git ของฉัน


0

ฉันมีปัญหาเดียวกันนี้และหลังจากลองคำตอบที่ @Khan เสนอ อย่างไรก็ตามฉันสามารถทำให้มันใช้งานได้เพียงแค่เปลี่ยน url ต้นทางในไฟล์. git / config เป็นที่อยู่ https: https://gitlab.com/mygitlabusername/mygitproject.git

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


0

โปรดใช้git config credential.helper storeหากไซต์ของคุณใช้ TLS / SSL หวังว่าจะได้ผล


0

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

ปัญหาสามารถแก้ไขได้โดยคลิกปุ่มโคลนบนหน้า Landing Page ของโปรเจ็กต์ของคุณและคัดลอกลิงก์ HTTPS และแทนที่เป็นลิงก์ SSH ที่ปรากฏในรูปแบบ "git @ gitlab ... "


นั่นไม่ตอบคำถาม
RalfFriedl

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