“Hak akses” apa yang dapat memblokir akses ke repositori gitlab?

14

Saya mencoba men-setup gitlab (6.5.1) pada server bersih yang baru. Semuanya tampak berfungsi, tetapi git tidak dapat mendorong ke proyek apa pun. Mengikuti perintah dari halaman proyek yang baru dibuat dan mendorong ke remote melalui ssh memberi:

$ 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.

Ini tampaknya menjadi masalah yang cukup umum. Sayangnya itu tampaknya memiliki sejumlah penyebab potensial dan tidak satupun dari mereka yang cocok. Dari terbitan 3424 tentang rilis lama dan berbagai sumber online lainnya, saya telah melihat dan memeriksa saran-saran berikut:

  • Tombol sisa ssh

    Ini adalah pengaturan yang bersih tanpa sisa. Kunci saya ditambahkan ke file kunci yang diotorisasi dengan benar dan merupakan satu-satunya yang terdaftar.

  • Menjalankan ssh dengan debug logging menunjukkan kesalahan yang terkait dengan vars lingkungan Ruby.

    Milik saya muncul bersih. Debug SSH menunjukkan koneksi yang berhasil. Segala sesuatu tentang handshaking otentikasi adalah normal, maka ini adalah akhir dari output:

    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 [email protected] reply 0
    debug1: channel 0: free: client-session, nchannels 1
    debug1: fd 0 clearing O_NONBLOCK
    debug1: fd 1 clearing O_NONBLOCK
    
  • Masalah dengan lingkungan gitlab-shell.

    Tidak seperti banyak orang lain dengan pesan kesalahan yang sama di atas, skrip cek gitlab-shell saya mengembalikan tagihan kesehatan yang bersih:

    % 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
    
  • Mulai ulang {unicorn, sidekiq, redis}

    Laporan yang memulai kembali satu atau lebih layanan membersihkannya sepertinya tidak berlaku di sini. Ini bukan masalah yang terputus-putus yang merilis perbaikan daemon.

  • Repo itu tidak dibuat secara fisik

    Tapi itu benar. Pertama kali setiap kali, repo telanjang ~gitlab/repositories/username/reponame.gititu dibuat setiap kali dan tampaknya memiliki izin yang benar.

  • Gitlab-shell tidak dapat berbicara dengan server API karena A) masalah DNS, B) salah ip / port / antarmuka mengikat C) tidak memiliki / memiliki garis miring.

    Skrip cek mengatakan akses API baik-baik saja.

    Saya tidak menjalankan nginx, jadi masalah pengikatan ip default yang terkait adalah n / a.

    Saya sudah mencoba keduanya *:8080dan 127.0.0.1:8080untuk nilai mendengarkan di unicorn.yml.

    Selain itu, saya telah mencoba berbagai iterasi localhost, 127.0.0.1 dan nama domain yang sepenuhnya memenuhi syarat (yang merupakan DNS resolving fine) dengan dan tanpa membuntuti garis miring shell.ymltanpa hasil. Saya juga telah mencoba menghubungkan kabel ini langsung ke server unicorn pada port 8080 alih-alih Apache SSL / host proxy pada port 80. Sepertinya tidak ada bedanya. Sertifikat saya tidak ditandatangani sendiri dan berfungsi dengan baik untuk browser, tetapi saya self_signed_cert: truetetap mencoba pengaturannya . Tidak ada.

  • Jalur git yang dilaporkan salah, tambahkan jalur yang sepenuhnya memenuhi syarat dari rumah pengguna gitlab.

    Ini sepertinya saran sah jika gitlab-shell tidak melakukan beberapa bisnis monyet untuk memperbaikinya, tetapi saya mencoba mengubah git remote add origin gitlab@server:username/reponame.gitke `` git remote add origin gitlab @ server: repositori / nama pengguna / reponame.git` tetapi tidak berhasil. Kesalahan yang sama.

Ini tampaknya merupakan solusi yang disarankan, tetapi tidak ada yang tampak benar. Catatan saya dapat mendorong http. Permintaan login menerima nama pengguna dan kata sandi ldap saya dan menerima dorongan. Ini hanya masalah saat mencoba menggunakan SSH. Menguji hanya bagian login ssh dengan ssh -T gitlab@serverberfungsi dengan baik.

Apa lagi yang bisa menyebabkan kesalahan ini?

Bagaimana cara men-debug masalah seperti itu di gitlab? Sepertinya tidak ada yang relevan sama sekali di ~gitlab/gitlab-shell/gitlab-shell.log. Di mana pesan kesalahan yang lebih informatif ditemukan?

Caleb
sumber
Apa output dari: "ssh -vv gitlab @ server" ??
DrGkill
@DrGkill Tidak ada yang menarik (di mataku), lihat sendiri .
Caleb
Lihat di sshd_config Anda jika gitlab diizinkan untuk masuk eksternal. Saya akan mengatakan 2 kemungkinan penyebabnya: SSH atau gitlab-shell. Apa kata auth.log ketika gitlab terhubung?
DrGkill
@DrGkill Saya sudah memeriksa itu (dan jika itu tidak diizinkan masuk eksternal dengan sshd atau pam log yang saya tunjukkan di atas tidak akan menunjukkan pemberitahuan otentikasi yang berhasil). SSH terhubung dengan baik. Log sisi server menunjukkan otentikasi yang berhasil, bahwa sesi dibuka, beberapa hal sistemd tentang pengaturan pengguna env, kemudian "menerima putuskan sambungan dari <remote ip>" dan beberapa hal lagi tentang membersihkan sesi.
Caleb

Jawaban:

7

Saya cukup yakin Anda memiliki masalah konfigurasi antara SSH dan sistem karena pesan debug SSH ini:

client_input_channel_req: channel 0 rtype [email protected] reply 0

Anda menerima pesan ini segera setelah otentikasi berhasil dan tidak ada pesan dari bash yang berarti tidak ada program yang diluncurkan setelah login.

Tonton file passwd Anda jika Anda memiliki pengaturan yang tepat untuk pengguna gitlab:

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

Verifikasi bash tidak memiliki hal aneh di file konfigurasi seperti

  • bash.bashrc
  • .Profil
  • .bashrc

Kemudian naik ke tingkat atas: Gitlab-shell Verifikasi /path/to/gitlab/.ssh/authorized_keys memiliki konfigurasi di bawah ini:

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...

dengan / path / ke / gitlab / gitlab-shell / bin / gitlab-shell yang dimiliki oleh pengguna gitlab dan dapat dieksekusi.

Anda dapat memastikan gitlab-shell beroperasi penuh dengan meluncurkan perintah:

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

Jika login jarak jauh benar-benar berfungsi dan terhubung dengan benar ke gitlab-shell, Anda harus mendapatkan pesan sambutan yang sama (tetapi cocok dengan pengguna yang memiliki kunci ssh yang Anda gunakan untuk masuk) sebelum ia membuang Anda jika Anda mencoba masuk dari jarak jauh.

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

Tidak ada pesan di sini yang mungkin menunjukkan ssh sama sekali tidak menghubungkan Anda ke gitlab.

Terakhir, checkout konfigurasi gitlab-shell Anda (config.yml) dan verifikasi jika:

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

dan akhirnya :

    self_signed_cert: false
DrGkill
sumber
Doh. <head-desk> Anda berada di jalur yang benar selama ini. Pengguna gitlab sedang ditugaskan /bin/false. Baik paket Arch tidak mengatur shell saat menambahkan pengguna itu atau saya memecahkannya di suatu tempat dalam proses menerapkan otentikasi ldap pada sistem ini. Terima kasih untuk semua usahanya.
Caleb
ty untuk jawaban, membantu saya men-debug. Masalah lainnya adalah ketika Anda mengaktifkan penerusan kunci ssh, Anda mengirim kunci yang salah ke gitlab yang tidak dapat mengidentifikasi Anda. Saat Anda masuk ke gitlab, Anda juga akan mendapatkan Welcome Anonymous. Cukup nonaktifkan penerusan kunci pada server lompat Anda dengan ssh-a
tommics
Saya memiliki masalah yang sama dengan Caleb, dan saya juga menemukan sendiri bahwa untuk membuatnya berfungsi seseorang perlu mengatur shell daripada / bin / {false, true, nologin}. Tetapi sebenarnya pengguna dibuat tanpa shell dengan sengaja selama instalasi (lihat: gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/… ) sudo adduser --disabled-login --gecos 'GitLab' git. Jadi itu harus bekerja tanpa cangkang. Saya masih mencari solusi lain.
Huygens
0

Saya memiliki masalah yang sama dan setelah beberapa hari Googling dan mencari Stack Overflow akhirnya saya menemukan masalah saya. Saya ingin menghubungkan ini secara tertulis ke Gitlab kalau-kalau ada orang lain yang memiliki masalah yang sama.

Saya menemukan solusi saya di sini: /programming/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

Saya di Windows dan masalahnya adalah Git Bash sedang mencoba untuk mendapatkan lokasi kunci SSH dari plink.exe, yang diinstal dengan Putty.

Solusinya adalah menghapus variabel lingkungan GIT_SSH. Kemudian semuanya bekerja.

Semoga ini bisa membantu seseorang di luar sana.

AllanT
sumber