“ สิทธิ์การเข้าถึง” ใดที่สามารถบล็อกการเข้าถึงที่เก็บ gitlab


14

ฉันพยายามติดตั้ง gitlab (6.5.1) บนเซิร์ฟเวอร์ใหม่ที่สะอาด ทุกอย่างดูเหมือนจะใช้งานได้ แต่คอมไพล์ไม่สามารถผลักดันไปยังโครงการใด ๆ ทำตามคำสั่งจากหน้าโครงการที่สร้างขึ้นใหม่และผลักดันไปยังระยะไกลผ่านทาง ssh ให้:

$ git push -u origin master
fatal: Could not read from remote repository.

Please make sure you have the correct access
rights and the repository exists.

นี่ดูเหมือนจะเป็นปัญหาที่พบบ่อยพอสมควร น่าเสียดายที่ดูเหมือนจะมีสาเหตุที่เป็นไปได้จำนวนมากและดูเหมือนว่าจะไม่มีสาเหตุใดที่ตรงกัน จากปัญหา 3424 กับรีลีสเก่าและแหล่งอื่น ๆ ออนไลน์ฉันได้เห็นและตรวจสอบคำแนะนำต่อไปนี้:

  • ปุ่ม ssh ที่เหลือ

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

  • การรัน ssh ด้วยการบันทึกการดีบักจะแสดงข้อผิดพลาดที่เกี่ยวข้องกับ vars environment ของ vars

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

    debug1: Sending command: git-receive-pack 'username/reponame.git'
    debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
    debug1: channel 0: free: client-session, nchannels 1
    debug1: fd 0 clearing O_NONBLOCK
    debug1: fd 1 clearing O_NONBLOCK
    
  • ปัญหากับสภาพแวดล้อม gitlab-shell

    ซึ่งแตกต่างจากคนอื่น ๆ ด้วยข้อผิดพลาดเดียวกันข้างต้นสคริปต์ตรวจสอบ gitlab-shell ของฉันคืนค่าสุขภาพที่สะอาด:

    % sudo -u gitlab -H ~gitlab/gitlab-shell/bin/check   
    Check GitLab API access: OK
    Check directories and files: 
            /var/lib/gitlab/repositories: OK
            /var/lib/gitlab/.ssh/authorized_keys: OK
    Test redis-cli executable: redis-cli 2.8.5
    Send ping to redis server: PONG
    
  • รีสตาร์ท {ยูนิคอร์น, sidekiq, redis}

    รายงานที่เริ่มต้นบริการใหม่ตั้งแต่หนึ่งบริการขึ้นไปจะเป็นการล้างสิ่งนี้ดูเหมือนจะไม่ใช้ที่นี่ นี่ไม่ใช่ปัญหาต่อเนื่องที่ปล่อย daemon แก้ไข

  • ธุรกรรมซื้อคืนไม่ได้รับการสร้างขึ้นจริง

    แต่มันคือ. ครั้งแรกทุกครั้งที่ repo คอมไพล์เปลือย~gitlab/repositories/username/reponame.gitจะถูกสร้างขึ้นทุกครั้งและดูเหมือนว่าจะมีสิทธิ์ที่ถูกต้อง

  • Gitlab-shell ไม่สามารถคุยกับเซิร์ฟเวอร์ API ได้เนื่องจาก A) ปัญหา DNS, B) การเชื่อมต่อ ip / พอร์ต / อินเตอร์เฟสผิด C) ผิด C) ไม่มี / มีเครื่องหมายสแลชต่อท้าย

    สคริปต์ตรวจสอบบอกว่าการเข้าถึง API นั้นใช้ได้

    ฉันไม่ได้ใช้งาน nginx ดังนั้นปัญหาการเชื่อมโยง IP เริ่มต้นที่เกี่ยวข้องกับสิ่งนั้นคือ n / a

    ฉันได้พยายามทั้งสอง*:8080และสำหรับฟังค่าใน127.0.0.1:8080unicorn.yml

    นอกเหนือจากนั้นฉันได้ลองทำซ้ำหลาย ๆ ครั้งของ localhost, 127.0.0.1 และชื่อโดเมนที่ผ่านการรับรองอย่างสมบูรณ์ (ซึ่งเป็น DNS ที่สามารถแก้ไขได้ดี) ด้วยและไม่มีเครื่องหมายทับท้ายshell.ymlเพื่อไม่เกิดประโยชน์ ฉันได้ลองเดินสายนี้โดยตรงไปยังเซิร์ฟเวอร์ยูนิคอร์นที่พอร์ต 8080 แทนที่จะเป็น Apache SSL / พร็อกซีโฮสต์ที่พอร์ต 80 ดูเหมือนจะไม่มีอะไรสร้างความแตกต่างได้เลย ใบรับรองของฉันไม่ได้ลงนามด้วยตนเองและทำงานได้ดีกับเบราว์เซอร์ แต่ฉันได้ลองตั้งค่าself_signed_cert: trueแล้ว ไม่มีอะไร

  • พา ธ git ที่รายงานผิดไปเพิ่มพา ธ ที่ผ่านการรับรองโดยสมบูรณ์จากบ้านผู้ใช้ gitlab

    ดูเหมือนว่านี่เป็นข้อเสนอแนะที่ถูกต้องถ้า gitlab-shell ไม่ได้ทำธุรกิจของลิงเพื่อแก้ไขสิ่งนี้ แต่ฉันลองเปลี่ยนgit remote add origin gitlab@server:username/reponame.gitเป็น `` git remote add กำเนิดกำเนิด gitlab @ server: repositories / ชื่อผู้ใช้ / reponame.git ' ข้อผิดพลาดเดียวกัน

สิ่งนี้ดูเหมือนจะเป็นแนวทางของการแก้ปัญหาที่เสนอ แต่ไม่มีใครเห็นว่าถูกต้อง หมายเหตุฉันสามารถกด http ได้ พรอมต์เข้าสู่ระบบยอมรับชื่อผู้ใช้และรหัสผ่าน ldap ของฉันและยอมรับการพุช นี่เป็นปัญหาที่พยายามใช้ SSH เท่านั้น ทดสอบเฉพาะส่วนการเข้าสู่ระบบ ssh ด้วยการssh -T gitlab@serverทำงานได้ดี

มีอะไรอีกที่ทำให้เกิดข้อผิดพลาดนี้?

เราจะแก้ไขข้อผิดพลาดใน gitlab ได้อย่างไร ดูเหมือนจะไม่มีอะไรเกี่ยวข้อง~gitlab/gitlab-shell/gitlab-shell.logเลย จะพบข้อความแสดงข้อผิดพลาดเพิ่มเติมได้ที่ไหน


ผลลัพธ์ของ: "ssh -vv gitlab @ server" ??
DrGkill

@DrGkill ไม่มีอะไรที่น่าสนใจ (ตาของฉัน) ดูตัวเอง
Caleb

ดูใน sshd_config ของคุณว่าอนุญาต gitlab ให้ลงชื่อเข้าใช้ภายนอกหรือไม่ ฉันจะบอกว่าผู้ร้าย 2 คนที่เป็นไปได้: SSH หรือ gitlab-shell auth.log พูดว่าอย่างไรเมื่อ gitlab เชื่อมต่ออยู่
DrGkill

@DrGkill ฉันได้ตรวจสอบแล้ว (และหากไม่อนุญาตให้ลงชื่อเข้าใช้ภายนอกโดย sshd หรือ pam บันทึกที่ฉันแสดงให้คุณเห็นด้านบนจะไม่แสดงการตรวจสอบสิทธิ์ที่ประสบความสำเร็จ) SSH กำลังเชื่อมต่อได้ดี ล็อกฝั่งเซิร์ฟเวอร์แสดงการรับรองความถูกต้องสำเร็จว่ามีการเปิดเซสชันสิ่ง systemd บางอย่างเกี่ยวกับการตั้งค่าผู้ใช้ env จากนั้น "ได้รับการยกเลิกการเชื่อมต่อจาก <remote ip>" และอีกหลายสิ่งที่เกี่ยวกับการล้างเซสชัน
Caleb

คำตอบ:


7

ฉันค่อนข้างมั่นใจว่าคุณมีปัญหาการกำหนดค่าระหว่าง SSH และระบบเนื่องจากข้อความดีบั๊ก SSH นี้:

client_input_channel_req: channel 0 rtype eow@openssh.com reply 0

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

ดูในไฟล์ passwd ของคุณหากคุณมีการตั้งค่าที่ถูกต้องสำหรับผู้ใช้ gitlab:

gitlab:x:1011:1012:GitLab,,,:/path/to/gitlab:/bin/bash

ตรวจสอบว่าทุบตีไม่มีสิ่งแปลกในไฟล์กำหนดค่าเช่น

  • bash.bashrc
  • .ข้อมูลส่วนตัว
  • .bashrc

แล้วขึ้นไปที่ระดับ uper นี้: Gitlab เปลือกตรวจสอบ/path/to/gitlab/.ssh/authorized_keysมีการกำหนดค่าดังต่อไปนี้:

command="/path/to/gitlab/gitlab-shell/bin/gitlab-shell key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa A...

ด้วย/ path / to / gitlab / gitlab-shell / bin / gitlab-shellซึ่งเป็นเจ้าของโดยผู้ใช้ gitlab และสามารถเรียกใช้งานได้

คุณสามารถมั่นใจได้ว่า gitlab-shell ทำงานได้อย่างสมบูรณ์โดยเรียกใช้คำสั่ง:

# /path/to/gitlab-shell/bin/gitlab-shell
Welcome to GitLab, Anonymous!

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

$ ssh gitlab@server
Welcome to GitLab, <your user's full name>!
Connection to <server> closed.

ไม่มีข้อความที่นี่อาจบ่งบอกถึง ssh ไม่ได้เชื่อมต่อคุณกับ gitlab เลย

สุดท้ายชำระเงินการกำหนดค่า gitlab-shell ของคุณ (config.yml) และตรวจสอบว่า:

http_settings:
    # trailing slash is important
    gitlab_url: "https://remote_server/"
    ca_file: /path/to/webserver/certificate.crt

และในที่สุด:

    self_signed_cert: false

Doh <head-desk>คุณอยู่ในเส้นทางที่ถูกต้องมาตลอด ผู้ใช้ gitlab /bin/falseที่ได้รับมอบหมาย อย่างใดอย่างหนึ่งแพคเกจ Arch ไม่ได้ตั้งค่าเปลือกที่ถูกต้องเมื่อเพิ่มผู้ใช้นั้นหรือฉันทำลายมันในกระบวนการของการใช้การตรวจสอบความถูกต้อง ldap ในระบบนี้ ขอบคุณสำหรับความพยายามทั้งหมด
Caleb

สำหรับคำตอบช่วยฉันแก้จุดบกพร่อง ปัญหาอีกประการหนึ่งคือเมื่อคุณเปิดใช้งานการส่งต่อคีย์ ssh คุณจะส่งคีย์ผิดไปยัง gitlab ซึ่งไม่สามารถระบุตัวคุณได้ เมื่อคุณเข้าสู่ gitlab คุณจะได้รับ Welcome Anonymous ด้วย เพียงปิดการใช้งานการส่งต่อคีย์บน jumpserver ของคุณด้วย ssh -a
tommics

ฉันมีปัญหาเช่นเดียวกับ Caleb และฉันก็พบว่าตัวเองต้องทำงานเพื่อตั้งค่าเชลล์แทน / bin / {false, true, nologin} แต่จริงๆแล้วผู้ใช้จะถูกสร้างขึ้นโดยไม่ต้องเปลือกกับวัตถุประสงค์ระหว่างการติดตั้ง (ดู: gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/...sudo adduser --disabled-login --gecos 'GitLab' git ) ดังนั้นจึงควรทำงานโดยไม่มีเปลือก ฉันยังคงมองหาวิธีอื่น
Huygens

0

ฉันมีปัญหาเดียวกันนี้และหลังจากผ่านไปหลายวันกับ Google และค้นหา Stack Overflow ในที่สุดฉันก็พบปัญหาของฉัน ฉันต้องการเชื่อมต่อกับ Gitlab เป็นลายลักษณ์อักษรในกรณีที่คนอื่นมีปัญหาเดียวกัน

ฉันพบวิธีแก้ไขปัญหาของฉันที่นี่: /programming/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

ฉันอยู่บน Windows และปัญหาคือ Git Bash คือพยายามรับตำแหน่งคีย์ SSH จาก plink.exe ซึ่งติดตั้งด้วย Putty

วิธีแก้ไขคือการลบตัวแปรสภาพแวดล้อม GIT_SSH จากนั้นทุกอย่างทำงาน

หวังว่านี่จะช่วยให้ใครบางคนที่นั่น

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