Sebelumnya saya sudah menulis tentang bagaimana caranya untuk membuat/push local repositoryke Github (Baca : Membuat Github Repository dari Existing Local Repository). Pada tulisan tersebut saya membuat Github repository dan menggunakan remote URL HTTPS, yang sebenarnya bukan satu-satunya protokol untuk melakukan perubahan repository github. Protokol selain HTTPS yang bisa digunakan untuk hubungan komputer lokal dengan repository Github adalah protokol SSH. Ya, SSH yang biasanya teman-teman gunakan untuk remote komputer Linux.
Lalu lebih baik mana? HTTPS atau SSH? Sebenarnya lebih baik yang mana tergantung teman-teman, nyaman dan pas-nya menggunakan protokol yang mana. Kalo saya pribadi lebih nyaman menggunakan protokol SSH karena lebih fleksibel, tidak perlu memasukkan username & password berulang kali.
Berdasarkan pernyataan pada website panduan resmi (https://help.github.com), Github sendiri merekomendasikan menggunakan protokol HTTPS. Mengapa? Karena hampir semua provider internet atau bahkan semua, pasti membuka outgoing port default HTTPS (Port 443), berhubung port HTTPS ini sangat dibutuhkan untuk mengakses website-website berprotokol HTTPS. Jadi sudah bisa dipastikan 95% bahwa protokol ini bisa digunakan pada semua komputer dengan provider yang berbeda-beda. Sayangnya, protokol ini akan menanyakan username & password akun Github apabila ingin melakukan clone, pull, push dan lain-lain. Bahkan pada server yang sudah kita anggap trusted sekalipun.
Sedangkan protokol yang satu lagi yaitu SSH, secara prinsip merupakan protokol yang lebih aman dibandingkan dengan proktol HTTPS, tetapi ada beberapa provider yang menutup outgoing port default SSH (Port 22) sehingga beberapa komputer dengan provider tertentu tidak bisa menggunakan protokol ini. Itulah alasan mengapa protokol HTTPS lebih direkomendasikan oleh Github. Nah seperti yang saya sampaikan diatas, protokol ini lebih fleksibel karena tidak perlu memasukkan username & password saat ingin melakukan clone, pull, push dan lain-lain. Ya walaupun kita harus generate SSH key pada komputer lokal diawal.
Apabila teman-teman memiliki komputer trusted yang digunakan sebagai repository local dan dijamin keamanannya, maka saya rekomendasikan menggunaakn protokol SSH. Tapi jika teman-teman menggunakan komputer yang digunakan banyak orang, saya rekomendasikan untuk menggunakan protokol HTTPS. Karena saya menggunakan 1 komputer khusus sebagai server repository lokal, dan hanya saya yang memakai, makanya saya menggunakan proktol HTTPS. Lalu bagaimana jika komputer yang menggunakan protokol SSH tersebut hilang? Tidak perlu khawatir, cukup hapus saja SSH key komputer tersebut dari Github teman-teman.
Generate SSH Key dari Komputer Lokal
- Akses terminal komputer lokal
- Sebelum generate SSH key, pastikan outgoing port 22 open dengan perintah berikut
# telnet github.com 22 Trying 13.250.177.223... Connected to github.com. Escape character is '^]'. SSH-2.0-babeld-f24cc9ea ^]quit telnet> quit
- Cek apakah komputer bersangkutan sudah memiliki SSH key atau belum dengan perintah ls pada direktori .ssh. Jika di Linux ataupun Macos biasanya terletak di direktori /home/user/.ssh atau /root/.ssh (Jika menggunakan user root Linux) atau /Users/user/.ssh (Jika menggunakan mac) dengan nama id_rsa dan id_rsa.pub
# ls /home/raihan/.ssh authorized_keys id_rsa id_rsa.pub known_hosts atau # ls ~/.ssh authorized_keys id_rsa id_rsa.pub known_hosts
- Jika file id_rsa & id_rsa.pub belum ada, maka teman-teman perlu melakukan generate SSH key terlebih dahulu dengan perintah ssh-keygen langsung enter saja sampai selesai. Pada bagian passphrase bisa dikosongkan (langsung enter) atau memasukkan kode passphrase. Passphrase ini digunakan setiap teman-teman menggunakan SSH key, saya pribadi biasanya mengosongkan passphrase-nya supaya tidak perlu bolak-balik memasukkan kode tersebut, tapi jika teman-teman ingin menggunakan passphrase untuk menambah keamanan, tidak masalah.
# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/raihan/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/raihan/.ssh/id_rsa. Your public key has been saved in /home/raihan/.ssh/id_rsa.pub. The key fingerprint is: ...... The key's randomart image is: +---[RSA 2048]----+ ...... +----[SHA256]-----+ # ls ~/.ssh authorized_keys id_rsa id_rsa.pub known_host
- Membuat file config pada direktori ~/.ssh/ dengan isi sebagai berikut
Host * AddKeysToAgent yes IgnoreUnknown UseKeychain UseKeychain yes IdentityFile ~/.ssh/id_rsa
Menambahkan SSH Key ke Github
- Catat isi dari file id_rsa.pub, jalankan perintah cat untuk melihat isi file
# cat ~/.ssh/id_rsa.pub [isi file]
- Login ke akun Github teman-teman (https://github.com/login)
- Klik foto profile pada bagian pojok kanan atas dan pilih Settings
- Pilih menu SSH and GPG keys dan klik New SSH key
- Paste isi file id_rsa.pub ke dalam kolom Key, serta berikan nama sebagai identitas SSH key sehingga teman-teman tahu itu SSH key dari server mana, misalnya disini saya beri nama “Development Server (Singapore)”
- Setelah itu klik Add SSH key
Mengganti Remote URL dari HTTPS ke SSH
- Selanjutnya adalah mengganti remote URL yang ada pada repository lokal. Misalnya untuk uji coba kali ini saya menggunakan repository online-shop yang sudah saya buat sebelumnya (Baca : Membuat Github Repository dari Existing Local Repository)
- Buka Github repository yang sudah terhubung dengan repository lokal, klik Clone or download | Use SSH
- Salin URL SSH yang sudah tersedia
- Masuk ke direktori tempat repository lokal
$ ls -a . .. .git images index.html layout licence.txt pages README.md
- Cek remote URL pada repository lokal tersebut dengan perintah berikut
# git remote -v origin https://github.com/raihan/online-shop.git (fetch) origin https://github.com/raihan/online-shop.git (push)
- Ubah remote URL HTTPS menjadi SSH dengan perintah berikut. Sesuaikan URL dengan URL yang sudah teman-teman salin dan cek apakah remote URL sudah menjadi SSH atau belum
# git remote set-url origin git@github.com:raihan/online-shop.git # git remote -v origin git@github.com:raihan/online-shop.git (fetch) origin git@github.com:raihan/online-shop.git (push)
Uji Coba Update Repository
- Masuk ke direktori repository lokal
- Lakukan perubahan pada sebuah file di repository lokal
- Commit perubahan yang dilakukan
# git add . # git commit -m "Uji Coba SSH" [master e40dcd4] Uji Coba SSH 1 file changed, 1 insertion(+)
- Push perubahan yang sudah dilakukan ke repository github. Jika sudah tidak diminta username & password berarti protokol yang digunakan sudah SSH
# git push origin master Counting objects: 5, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 319 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To git@github.com:raihan/online-shop.git 8439b0c..e40dcd4 master -> master