Skip to content Skip to footer

כיצד להשתמש במפתח ה-GPG שלכם כמפתח SSH (מדריך שלב אחר שלב)

how to use gpg key

מפתח אחד לחתום בכולם, מפתח אחד לשלוט בהם, מפתח אחד להתחבר – ואם נגנב – לחסום במהירות.

בעידן של דליפות אינסופיות של פרטי גישה והתרעות יומיות כמו "החליפו מיד את הסיסמאות שלכם!", מפתחים רוצים פחות מפתחות לנהל ופחות הזדמנויות לטעות. שימוש במפתח GPG שמוגן היטב כתחליף למפתח SSH הוא טריק חכם ומוכר בעולם האבטחה – אבל עדיין לא מספיק נפוץ. המדריך הזה יסביר לכם צעד-אחר-צעד איך לעשות זאת בבטחה, מדוע השיטה עדיפה על ניהול של מפתחות פרטיים נפרדים, ואילו טעויות נפוצות כדאי לכם להימנע מהן. בסוף התהליך, יהיה לכם מפתח יחיד שמוגן בחומרה, שבעזרתו תוכלו להצפין אימיילים ולהתחבר לכל השרתים שלכם.

למה בשנת 2025 כבר לא ננהל עשרה מפתחות שונים?

בשנת 2015 רוב המפתחים החזיקו מספר מפתחות פרטיים על המחשב, עם סיסמאות שכבר בקושי זכרו. זה היה סביר – עד שהגיע עידן ה-DevOps. היום אתם מתחברים ל:

  • שרתי Git (כמו GitHub, GitLab או Bitbucket)

  • מספר רב של שרתים בענן

  • מערכות Kubernetes

  • תהליכי CI/CD

  • מעבדות ביתיות עם Raspberry Pi

כל מערכת דורשת מפתח ציבורי נפרד. מבקרים פנימיים רוצים תיעוד של כל החלפת מפתח, וצוותי האבטחה מתעקשים על שימוש במפתחות חומרה. התוצאה היא "כאוס מפתחות": עשרה מפתחות שונים, עשר סיסמאות, ועשר הזדמנויות להקליד אותן לא נכון.

איחוד של מפתחי GPG ו-SSH פותר את הבעיה בשלושה יתרונות מרכזיים:

  • שורש אמון יחיד: המפתח הראשי שלכם (OpenPGP) כבר משמש לחתימה על אימיילים, חבילות תוכנה, או Git commits. הרחבת השימוש בו גם ל-SSH הופכת את הביקורות לפשוטות וברורות.

  • הגנה ברמת חומרה: מפתחות מודרניים כמו YubiKey, Nitrokey ו-SoloKey תומכים ב-OpenPGP וגם ב-FIDO2. לחיצה אחת מאפשרת לכם לגשת לאימייל ולשרתים, והמפתח הפרטי אף פעם לא עוזב את הרכיב החומרתי.

  • ביטול פשוט ומהיר: איבדתם את המפתח הפיזי? מבטלים במהירות את תת-המפתח הבעייתי, מנפיקים תת-מפתח חדש, ומעדכנים את שרתי ה-SSH באופן אוטומטי.

בקיצור: פחות סודות, הגנה חזקה יותר, ופחות עומס מנטלי. עכשיו בואו נראה איך עושים זאת בפועל.

מה זה בכלל GPG?

שאלתם את עצמכם פעם מה זה GPG ולמה מומחי אבטחה מתלהבים ממנו כל כך? GPG (ראשי תיבות של GNU Privacy Guard) הוא הכלי החופשי והפתוח שהחליף את PGP הוותיק, והוא מאפשר לכם להצפין, לחתום ולאמת כמעט כל דבר – החל מאימיילים ועד התחברות מאובטחת לשרתים.

חשבו על GPG כמנעול דיגיטלי בעל שני חלקים: מפתח ציבורי אחד שאתם משתפים באופן חופשי, ומפתח פרטי שאתם שומרים בסודיות מוחלטת. התוצאה? פריצות הופכות להרבה פחות מפחידות, וביקורות תאימות הופכות לפשוטות ולנעימות בהרבה.

מבוא מהיר: מונחים חשובים – GPG, תת-מפתחות ו-SSH

מונח

הסבר קצר וברור

GPG (GNU Privacy Guard)

כלי חופשי למימוש תקן ההצפנה והחתימה הדיגיטלית OpenPGP.

SSH (Secure Shell)

פרוטוקול מוצפן להתחברות מרחוק, העברת מידע מאובטח וחיבור מאובטח ל-Git.

זוג מפתחות א-סימטריים

מפתח ציבורי (המנעול) + מפתח פרטי (המפתח) = מאפשרים תקשורת מוצפנת והתחברות מאובטחת ללא סיסמה.

מפתח ראשי (Master Key)

המפתח הראשי מסוג OpenPGP שמאמת ומנהל את כל תת-המפתחות; יש להגן עליו בצורה מוחלטת.

תת-מפתח (Sub-key)

מפתח משני היורש את האמון מהמפתח הראשי אך ניתן להחליף או לבטל אותו בנפרד ובמהירות.

למה ההתלהבות מתת-מפתחות? כי הם מאפשרים לכם ליצור הפרדה ברורה בתוך המפתחות שלכם. המפתח הראשי נשמר בצורה בטוחה מאוד (במחשב ללא גישה לאינטרנט או כהעתק מודפס בכספת), ומתחתיו אפשר ליצור שלושה תת-מפתחות:

  • הצפנה (Encryption) – עבור הודעות וקבצים.

  • חתימה (Signing) – עבור חתימת אימיילים או גרסאות קוד (Git tags).

  • אימות (Authentication) – עבור התחברות לשרתים (SSH).

אם תת-המפתח שמשמש להתחברות לשרתים דולף או נגנב, אפשר לבטל רק אותו, להוציא מפתח חדש, ולהמשיך להשתמש ללא הפרעה בתת-המפתח שמשמש לחתימה. פשוט, אלגנטי, מוכח בשטח וקל מאוד לביקורת.

רשימת דרישות סביבת העבודה שלכם:

מערכת הפעלה מומלצת:

  • Linux (Debian, Ubuntu, Fedora, Arch)

  • macOS (Intel או Apple Silicon)

  • Windows 11 עם WSL 2 (מומלץ) או התקנה של Gpg4win באופן טבעי

חבילות תוכנה להתקנה:

עבור Debian/Ubuntu:

sudo apt install gnupg2 openssh-client pinentry-gtk2 scdaemon

 

עבור macOS:

brew install gnupg pinentry-mac yubikey-personalization

 

רכיב חומרה (מומלץ מאוד אך לא חובה):

  • YubiKey 5C / 5Ci / 5NFC

  • Nitrokey Start/3A, SoloKey v2

למה כדאי להשתמש ברכיב חומרה?
כי המפתחות ששמורים בחומרה ייעודית לא ניתנים להעתקה. אפילו אם מחשבכם נפגע, התוקף לא יכול לגנוב את המפתח החומרתי עצמו.

יצירת או הרחבת מפתח ה-OpenPGP שלכם:

תרחיש א': יצירת מפתח חדש לחלוטין:

gpg –full-generate-key

 

בחרו באפשרויות הבאות:

  • אפשרות (9): ECC and ECC (עקום ed25519 מומלץ – מהיר ועמיד יחסית למחשוב קוונטי).

  • שימושים: חתימה, הצפנה, אישור (Sign, Encrypt, Certify).

  • תוקף: 3 שנים (את תת-המפתחות כדאי לחדש מדי שנה).

תרחיש ב': הרחבת מפתח קיים לשימוש גם עבור SSH:

הציגו את המפתחות הקיימים שלכם:

gpg –list-secret-keys –keyid-format LONG

gpg –edit-key ABCD1234EFGH5678

 

בתוך הכלי האינטראקטיבי:

gpg> addkey

 

בחרו את סוג המפתח המתאים:

  • (1) RSA (חתימה בלבד)

  • (8) ECC (חתימה בלבד)

  • (9) ECC and ECC

בחרו באפשרות ECC והגדירו את השימוש בו לאימות (Authenticate). הגדירו תוקף קצר יחסית (מומלץ שנה אחת). סיימו עם הפקודה save.

אחרי היציאה, הריצו:

gpg -K –with-subkey-fingerprint

 

תראו שורה חדשה עם האות A (Authenticate) ליד המפתח – זהו תת-המפתח החדש שלכם לשימוש SSH, מוגן ומוכן לעבודה.

איך הופכים את סוכן ה-GPG שלכם לסוכן SSH?

מערכת OpenSSH מגיעה עם סוכן משלה (ssh-agent) שמנהל את המפתחות שלכם. במקביל, ל-GPG יש סוכן מתחרה משלו (gpg-agent), שיכול להתחזות לסוכן SSH אם תבקשו יפה.

עריכת הקובץ ~/.gnupg/gpg-agent.conf

הוסיפו את השורות הבאות לקובץ:

enable-ssh-support

 

pinentry-program /usr/bin/pinentry-gtk-2   # ב-macOS החליפו ל-pinentry-mac

 

default-cache-ttl 900       # 15 דקות

 

max-cache-ttl 7200          # שעתיים

 

הפעלת הסוכן מחדש

gpgconf –kill gpg-agent

 

eval "$(gpg-agent –daemon –enable-ssh-support)"

 

הפקודה האחרונה תייצא את משתנה הסביבה SSH_AUTH_SOCK שיפנה לסוכן GPG. מומלץ להוסיף את הפקודה לקובץ ה-.bashrc או .zshrc שלכם.

בדיקת הצלחת ההתקנה:

ssh-add -l

 

אם מופיע משהו כמו:

4096 ED25519 SHA256:abcd… cardno:FFFE12345678 (GPG: authentication)

 

הכול תקין. אם מופיעה ההודעה:

agent has no identities

 

זה אומר שתת-המפתח עדיין לא נטען. הריצו את הפקודה ssh-add -L לאחר נגיעה פיזית במפתח החומרה.

ייצוא תת-המפתח לפורמט OpenSSH:

gpg –export-ssh-key ABCD1234EFGH5678

 

תקבלו פלט דומה ל:

ssh-ed25519 AAAAC3Nz… [email protected]

 

העתיקו את השורה במלואה לשרת שלכם:

ssh user@server 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'

 

לסיום הגדירו הרשאות נכונות:

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

 

טיפ: שמרו את המפתח הציבורי במנהל הסיסמאות שלכם תחת השם "GPG-SSH public" כך שתוכלו להדביק אותו במהירות לכל שרת חדש.

התחברות ראשונה ובדיקת עומק

כדי להתחבר בפעם הראשונה עם פירוט מלא:

ssh -o LogLevel=DEBUG3 user@server

 

שימו לב לשורות האלה בפלט:

Offering public key: cardno:FFFE12345678

sign_and_send_pubkey: signing using cardno:FFFE12345678

Authentication succeeded (publickey).

 

פתרון בעיות נפוצות:

  • אם החיבור נתקע עם ההודעה agent refused operation:
    הריצו gpg –card-status. אם נדרש PIN, הקישו אותו ואז נסו שוב את החיבור.

  • אם מופיעה השגיאה no such identity:
    בדקו את משתנה הסביבה SSH_AUTH_SOCK:

echo $SSH_AUTH_SOCK

 

ודאו שהוא מצביע למקום הנכון (~/.gnupg/S.gpg-agent.ssh) ולא לתיקיית /tmp.

  • אם מופיעה השגיאה PubkeyAlgorithms mismatch:
    זה אומר שהשרת מחייב סוג מסוים של אלגוריתם. צרו תת-מפתח חדש מסוג cv25519 (X25519) או RSA 4096 לאימות.

הקשחת האבטחה באמצעות חומרה – החיים עם YubiKey

התקן חומרה קטן מוסיף עוד שכבת הגנה משמעותית:

תכונה (Feature)

תועלת (Benefit)

פקודה לדוגמה

אישור בנגיעה (Touch-to-sign)

הגנה מפני תוכנות זדוניות ופריצות שרשרת אספקה

ykman openpgp set-touch aut on

הגנה מפני ניסיונות פריצה (PIN & PUK)

חסימת brute-force: אחרי 3 טעויות צריך קוד PUK

ykman openpgp set-pin-retries 3 10

תמיכה בפרוטוקולים מרובים (PIV + OpenPGP)

המפתח החומרתי תומך ב-FIDO2, TOTP, ED25519, PIV ועוד

ykman piv info

סיפור מהשטח:
סטארטאפ בתחום הפינטק מתל אביב העביר 40 מהנדסים משימוש במפתחות SSH מבוססי קובץ לשימוש בתת-מפתחות מבוססי YubiKey.
תוך חודש אחד בלבד הם קיצצו בחצי את הפניות לתמיכה בנוסח "איבדתי את הלפטופ", כי מחשב שנגנב כבר לא חייב "להרוג את כל מפתחות הייצור".
זמן הביקורות ירד מחמישה ימים לשעתיים בלבד: צוות האבטחה פשוט השווה את המספרים הסידוריים של ה-YubiKey מול רשימת העובדים מה-HR.

אוטומציה לסיבוב תת-מפתחות (Sub-key Rotation)

מבקרי אבטחת מידע אוהבים מאוד את המושג "גמישות קריפטוגרפית".
הנה שילוב של Bash ו-Ansible שמאפשר לבצע החלפה אוטומטית של תת-מפתח מסוג Authentication כל רבעון:

קובץ סקריפט Bash לדוגמה:

#!/bin/bash

 

MASTER=$1  # מזהה המפתח הראשי שלכם (16 תווים)

 

# 1. יצירת תת-מפתח חדש מסוג Authentication, תקף לשנה אחת:

echo -e "addkey\n8\nA\n1y\nsave\n" | gpg –command-fd 0 –edit-key $MASTER

 

# שמירת ה-KeyID החדש:

NEW=$(gpg –list-keys –with-colons $MASTER | grep '^sub:' | tail -1 | cut -d: -f5)

 

# 2. יצוא המפתח בפורמט SSH:

gpg –export-ssh-key $MASTER | tail -n 1 > /tmp/$NEW.pub

 

ולאחר מכן, קובץ Ansible Playbook לדוגמה:

– hosts: all

  tasks:

    – name: "דחיפת מפתח SSH-GPG חדש לכל השרתים"

      authorized_key:

        user: "{{ ansible_user }}"

        key: "{{ lookup('file', '/tmp/' + newkey + '.pub') }}"

 

לבסוף, לאחר שכל המערכות מאשרות את המפתח החדש, תוכלו להסיר את המפתח הקודם בצורה אוטומטית באמצעות:

state: absent

 

כך תבטיחו שכל המפתחות מעודכנים באופן רציף ואוטומטי.

שימוש ב-Git באמצעות SSH המגובה ב-GPG

הוספת המפתח ל-GitHub:

נכנסים ל־GitHub:

  • הגדרות → SSH & GPG Keys → New SSH Key → מדביקים את המפתח הציבורי.

חתימה על Commit באמצעות אותו המפתח:

הגדרת המפתח לחתימה:

git config –global user.signingkey ABCD1234EFGH5678

 

ביצוע Commit חתום:

git commit -S -m "One token to push and sign"

לחיצה אחת במפתח החומרתי שלכם, שתי פעולות מתבצעות:

  • פעולת git push מאומתת על ידי תת-המפתח של SSH.

  • החתימה על ה־Commit מתבססת על ה־PIN השמור במפתח שלכם.

כך מתקבל תהליך פשוט וחלק מאוד למפתחים.

טיפ מבפנים:
GitHub מזהה באופן אוטומטי את תת-המפתח שמשמש לחתימות Commits ואת תת-המפתח לאימות SSH בנפרד. בדרך זו, המפתח הפרטי המשמש להצפנה (Encryption) לעולם אינו חשוף על שרתים, ושומר על התקשורת הסודית שלכם מאובטחת תמיד באופן ישיר בין משתמשים בלבד.

שימוש מתקדם: הצפנה כפולה של קבצים רגישים

עבור דוחות מסווגים או מאגרי נתונים של לקוחות בזמן העברה:

# הצפנת הקובץ לנמען ספציפי

gpg –recipient 0xBEEFCAFE –encrypt payroll.csv

 

# העברת הקובץ המוצפן דרך SSH

scp payroll.csv.gpg finance@vault:/incoming/

 

למה לטרוח אם SSH כבר מוצפן? הגנה שכבתית. אם השרת שאליו התחברתם ייפרץ אי פעם (למשל דרך חולשת זיכרון כמו Heartbleed), הקובץ עצמו עדיין יהיה מוגן לחלוטין ללא המפתח הפרטי של הנמען.

אפשר גם לשלב זאת עם פלטפורמת העברת קבצים מאובטחת (MFT): הגדירו פעולה אוטומטית להצפנת הקבצים לפני שליחתם, ופעולה מקבילה לפענוח אוטומטי כשהקובץ מגיע ליעדו. כך תוכלו להוכיח למבקרי אבטחה שכל המידע מוגן – גם בזמן העברה וגם כשהוא מאוחסן.

מדריך פתרון תקלות נפוצות

שגיאה נפוצה

סיבת השורש

פתרון מהיר

sign_and_send_pubkey: agent refused operation

תת-המפתח בחומרה, אך לא אושר במגע

געו במפתח החומרה ווידאו שנורת הלד מהבהבת.

gpg: decryption failed: No secret key

כרטיס חומרה לא נכון מוכנס

הריצו gpg –card-status, וודאו את המספר הסידורי, והחליפו מפתח חומרה.

Bad ownership or modes for directory ~/.gnupg

הרשאות פתוחות מדי לתיקיית המפתח

תקנו הרשאות: chmod 700 ~/.gnupg && chmod 600 ~/.gnupg/*

gpg-agent: starting in ssh mode failed: Address already in use

סוכן SSH מתחרה עדיין פועל

עצרו את הסוכן הקיים והפעילו מחדש: pkill ssh-agent && eval "$(gpg-agent –daemon –enable-ssh-support)"

שמרו טבלה זו לידכם, רוב בעיות התמיכה מסתכמות בארבעת המקרים האלה.

צ'קליסט אבטחה (להעתיק ולהשתמש)

  • מפתח OpenPGP ראשי מאוחסן ללא גישה לרשת, מוצפן, ועם גיבוי מודפס

  • תת-המפתח Authentication נמצא על מפתח חומרה בלבד; אין מפתחות פרטיים בדיסק המחשב

  • סיסמת ה-PIN שונתה מסיסמת ברירת המחדל, ואימות במגע מופעל

  • סוכן gpg-agent מופעל כתחליף ל־ssh-agent הרגיל

  • זמן שמירת סיסמאות מוגדר לפחות מ-900 שניות (15 דקות)

  • סקריפט אוטומטי מחליף תת-מפתח כל רבעון

  • תעודת ביטול (revocation certificate) מודפסת ושמורה פיזית במקום אחר

  • תהליכי CI/CD משתמשים במפתח החומרה במצב קריאה בלבד

  • שרתי הייצור מקבלים אך ורק מפתחות ed25519-sk או rsa-sha2-512

הוסיפו את הרשימה הזאת לתיעוד הצוות שלכם ובדקו אותה מחדש בכל סבב ביקורת אבטחה.

סיכום – איך הכול משתלב ביחד?

עד עכשיו כבר:

  • יצרתם (או שדרגתם) מפתח GPG עם תת-מפתח Authentication.

  • הגדרתם את gpg-agent לשמש כסוכן SSH.

  • התחברתם לשרת עם מפתח חומרה אחד בלבד.

  • יצרתם אוטומציה להחלפת תת-מפתחות, דחיפת קוד והעברת קבצים מוצפנת כפולה.

זהו מימוש מוחלט של הגנת עומק מתקדמת עם מפתח חומרה זעיר אחד. בלי תוכנות מיותרות, בלי תלות ביצרנים ובלי בעיות תאימות – רק סטנדרטים מוכחים וחופשיים.

התוצאה? שקט נפשי מוחלט. איבדתם לפטופ? בטלו מיד את תת-המפתח האחד. שלחתם קוד מבית הקפה? מי שעומד מאחוריכם לא יוכל לשכפל את טביעת האצבע שלכם. מבקרים רוצים לראות תיעוד? תנו להם רשימה ברורה של מספרים סידוריים של YubiKeys וטביעות אצבע של תת-מפתחות – והכול מאושר ומסודר בקלות.

Welcome! Let's start the journey

AI Personal Consultant

Chat: AI Chat is not available - token for access to the API for text generation is not specified