Saya tahu, saya menjawab ini sangat terlambat dan bahkan StackOverflow mengonfirmasi jika saya benar-benar ingin menjawab. Saya menjawab karena tidak ada yang benar-benar menggambarkan masalah yang sebenarnya sehingga ingin berbagi hal yang sama.
Dasar
Pertama, pahami apa itu remote disini. Remote adalah GitLab dan sistem Anda adalah lokal, jadi ketika kita berbicara tentang remote origin
, URL apa pun yang disetel dalam git remote -v
output Anda adalah URL jarak jauh Anda.
Protokol
Pada dasarnya, Git clone / push / pull bekerja pada dua protokol yang berbeda (ada juga yang lain) -
- Protokol HTTP
- Protokol SSH
Ketika Anda mengkloning repo (atau mengubah URL jarak jauh) dan menggunakan URL HTTPs seperti https://gitlab.com/wizpanda/backend-app.git maka itu menggunakan protokol pertama yaitu protokol HTTP.
Sedangkan jika Anda mengkloning repo (atau mengubah remote URL) dan menggunakan URL like git@gitlab.com:wizpanda/backend-app.git
maka menggunakan protokol SSH.
Protokol HTTP
Dalam protokol ini, setiap operasi jarak jauh yaitu clone, push & pull menggunakan otentikasi sederhana yaitu nama pengguna & kata sandi dari remote Anda (GitLab dalam hal ini) yang berarti untuk setiap operasi, Anda harus mengetikkan nama pengguna & kata sandi Anda yang mungkin merepotkan .
Jadi ketika Anda push / pull / clone, GitLab / GitHub mengotentikasi Anda dengan nama pengguna & kata sandi Anda dan memungkinkan Anda untuk melakukan operasi.
Jika Anda ingin mencoba ini, Anda dapat beralih ke HTTP URL dengan menjalankan perintah git remote set-url origin <http-git-url>
.
Untuk menghindari kasus tersebut, Anda dapat menggunakan protokol SSH.
Protokol SSH
Koneksi SSH sederhana berfungsi pada pasangan kunci publik-pribadi. Jadi dalam kasus Anda, GitLab tidak dapat mengautentikasi Anda karena Anda menggunakan URL SSH untuk berkomunikasi. Sekarang, GitLab harus mengenal Anda dengan cara tertentu. Untuk itu, Anda harus membuat pasangan kunci publik-pribadi dan memberikan kunci publik ke GitLab.
Sekarang ketika Anda mendorong / menarik / mengkloning dengan GitLab, GIT (SSH secara internal) akan secara default menawarkan kunci pribadi Anda ke GitLab dan mengkonfirmasi identitas Anda dan kemudian GitLab akan memungkinkan Anda untuk melakukan operasi.
Jadi saya tidak akan mengulangi langkah-langkah yang telah diberikan oleh Muhammad, saya akan mengulanginya secara teoritis.
- Buat pasangan kunci `ssh-keygen -t rsa -b 2048 -C" My Common SSH Key "
- Pasangan kunci yang dihasilkan akan secara default
~/.ssh
bernama id_rsa.pub
(kunci publik) & id_rsa
(kunci pribadi).
- Anda akan menyimpan kunci publik ke akun GitLab Anda (kunci yang sama dapat digunakan di banyak atau server / akun apa pun).
- Saat Anda mengkloning / mendorong / menarik, GIT menawarkan kunci pribadi Anda.
- GitLab mencocokkan kunci pribadi dengan kunci publik Anda dan memungkinkan Anda untuk melakukannya.
Tips
Anda harus selalu membuat kunci rsa yang kuat dengan setidaknya 2048 byte. Jadi perintahnya bisa ssh-keygen -t rsa -b 2048
.
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
Pikiran umum
Kedua pendekatan tersebut memiliki pro & kontra. Setelah saya mengetik teks di atas, saya mencari lebih banyak tentang ini karena saya tidak pernah membaca sesuatu tentang ini.
Saya menemukan dokumen resmi ini https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols yang menceritakan lebih banyak tentang ini. Maksud saya di sini adalah, dengan membaca kesalahan dan memikirkan kesalahan tersebut, Anda dapat membuat teori atau pemahaman Anda sendiri dan kemudian dapat mencocokkan dengan beberapa hasil Google untuk memperbaiki masalah tersebut :)
ssh -vvvv git@gitlab.com
untuk melihat apakah ia mengambil kunci SSH