רוב ה-git reposittory מוגנים. אנחנו לא יכולים להתחבר אליהם באופן אנונימי אלא צריכים שם משתמש וסיסמה. מה הבעיה? הבעיה היא שזה מאוד מציק וגם לא מאובטח לעבוד עם שם משתמש וסיסמה. קודם כל, צריך לזכור את שם המשתמש והסיסמה כל הזמן. שנית, בגלל שאנחנו מעבירים את שם המשתמש והסיסמה], כל קילוגר מסכן יכול להאזין להקלדה ולקחת את שם המשתמש והסיסמה. הדרך הטובה ביותר היא לעבוד עם SSH keys.
מה זה? מדובר במנגנון שיוצר שני מפתחות – מפתח פרטי ומפתח פומבי ששניהם מתואמים ותלויים זה בזה. את המפתח הפומבי אתה נותן לאתר כלשהו והוא ישמור אותו במסד הנתונים שלו. כשאתה מעוניין להזדהות מולו, הוא יקח את המפתח הציבורי שלך ששמור אצלו וישתמש בו על מנת להצפין מילה מסוימת. את הגיבוב הוא שולח לך. עם המפתח הפרטי אתה יכול לפענח את הגיבוב ולשלוח את המילה המפוענח. במידה והמילה הזו זהה למילה שהוא שלח אליך – הוא יודע שיש לך מפתח פרטי שתואם למפתח הציבורי והאותנטיקציה עברה בהצלחה.
זה הסבר מעט צולע וחוטא לאמת כמו האינטגריטי של אייל גולן, אבל אני מקווה שתבינו את העניין המרכזי – כשאני יוצר SSH Keys אני יוצר שני מפתחות – אחד ציבורי ואחד פרטי.
עבודה עם SSH Keys היא מאוד חשובה כאשר אנחנו עובדים מול שרתים ובמיוחד כאשר אנחנו עובדים מול שרתי גיט – כמו גיטהאב, ביטבאקט או סטאש. הרבה אנשים נרתעים מיצירת המפתחות כי הם עובדים עם חלונות והם חושבים שזה מסובך ליצור את המפתחות האלו על חלונות. אבל האמת היא שזה ממש פשוט לעשות את זה בחלונות (גם בלינוקס/מק כמובן). על מנת להראות כמה זה פשוט אני אחרוג ממנהגי ואדגים על מערכת הפעלה חלונאית.
המצרכים הם:
גיט שמותקן על המחשב. את גיט קל להתקין על חלונות או על לינוקס/מק. אם קראתם את סדרת המאמרים על גיט שמאמר זה הוא חלק ממנה, אז במאמר הראשון יש הוראות התקנה שבגדול הן להוריד את קובץ ה-exe ולהריץ אותו. בהפצת הגיט לחלונות יש כלי שדומה ל-cmd והוא נקרא git bash.
הכלי הזה נראה ומתנהג בדיוק כמו CMD, אבל הוא מקבל גם פקודות של לינוקס. בכל מקרה, אני מעדיף לעבוד איתו. על מנת ליצור את המפתח, אנחנו צריכים להכניס את הטקסט הבא:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
אנחנו יוצרים כאן SSH key בשיטת RSA שהיא שיטת הצפנה (אחד ממפתחיה, אגב, הוא מדען ישראלי בשם עדי שמיר שאף זכה בפרס טיורינג!) בגודל של 4096 ביטים. צריך להכניס את המייל שלכם והוא נכנס כהערה.
ככה זה נראה:
במהלך ההתקנה תתבקשו להכניס passphrase שהוא סיסמה. לא חייבים להכניס אותה אבל זה נחשב כמשהו שמאוד כדאי לעשות. אם לא תכניסו סיסמה, לכל מי שיהיה את המפתח הפרטי תהיה גישה לשירותים שלכם. לצורך הדוגמה לא הכנסתי passphrase, זה לא אומר שאין לי passphrase בחיים האמיתיים.
אחרי היצירה, תוכלו להכנס לתיקיה שציינתם בתהליך היצירה ולראות שיש שם תיקיה ששמה הוא ssh. (שימו לב לנקודה בהתחלה). בתיקיה יש שני קבצים:
id_rsa.pub
id_rsa
המפתח הפומבי הוא זה שנגמר ב-pub. הוא קובץ טקסט שאפשר ורצוי לפתוח בעורך טקסט נורמלי. זה המפתח שאנחנו צריכים להכניס לשירות שאנחנו רוצים להתחבר אליו. אנחנו נכנס לשירות – בין אם מדובר בגיטהאב או בין אם מדובר ב-stash. בגיטהאב למשל, צריך להכנס לקישור הזה. פותחים את המפתח הפומבי באמצעות עורך הטקסט, מסמנים ומעתיקים ומדביקים בממשק הוובי. הנה הדוגמה ב-stash:
עכשיו אנחנו צריכים להורות ל-git שלנו להשתמש במפתח הפומבי להצפנה. זה קל מאוד. פותחים את git bash ומקלידים:
eval "$(ssh-agent -s)"
ואז
ssh-add ~/.ssh/id_rsa
פה בעצם אנחנו אומרים ל-ssh agent להשתמש במפתח הפרטי להצפנה.
צריך לזכור שאנחנו משתמשים ב-ssh links ולא ב-https. כל מה שנותר לעשות זה להתחיל לעבוד. בהתחברות הראשונה, נשאל אם אנחנו רוצים להוסיף את השרת שמולו אנחנו עובדים לרשימת השרתים הבטוחים:
אחרי זה, הכל זורם. אם השתמשתם ב-passphrase לא תצטרכו להקליד שוב ושוב את הסיסמה שלכם כמובן. אפשר להשתמש בשירות קטן וחמוד שנקרא ssh-agent שיזכור עבורכם את הסיסמה.
9 תגובות
מאוד נהנה מהפוסטים האחרונים,
אתה מביא פה את הנייעס שה-Git מאפשר.
תודה רבה.
תודה רבה! 🙂
אחלה פוסט! אני מאוד אוהב את PuTTYgen:
https://winscp.net/eng/docs/ui_puttygen
כמה הוא עדיף אל מול ה-GIT?
מצויין שהבאת את הקישור הזה, אולי הייתי צריך להוסיף אותו בפוסט עצמו. אין הבדל בינו לבין ה-git BASH חוץ מאופן ההפעלה (עד כמה שאני יודע). שניהם יוצרים את המפתח הציבורי והפרטי. אני באופן אישי עובד על לינוקס, אז אני משתמש בקונסולה ומה שטוב ב-Git BASH שהוא מאפשר את העבודה מול הקונסולה כמו בלינוקס גם בחלונות 🙂
כל הכבוד, מאמר מדוייק, git הוא כלי חובה למפתחים
אבל בכל פעם אני צריך לטעון את המפתח מחדש:
"`
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
"`
מה אפשר לעשות כדי שישמור את זה?
תודה על הפוסטים
אחרי שיש לי פרויקט ומפתח SSH, איך מעלים לgitlab?
המאמר היה טוב, תודה.
זה מעולה, אפילו ביחס למדריכים באנגלית