מעטפת מאובטחת (SSH)
SSH הוא הפרוטוקול שמריץ את החצי הבלתי נראה של האינטרנט: כל קונסולה מרחוק של מנהל מערכת, כל שלב פריסה של מפתח, כל דחיפה של Git למאגר פרטי. זה החליף את telnet בסוף שנות ה-90 ומאז הוא פרוטוקול ה-Secure-Shell ברירת המחדל. לדעת מה זה באמת עושה עושה הרבה עבודה של פעולות הגיוני.
גוף המאמר המלא מסופק באנגלית להלן.
SSH (Secure Shell) הוא פרוטוקול רשת קריפטוגרפי להפעלת שירותי רשת בצורה מאובטחת על גבי רשת לא מאובטחת. משמש לרוב לכניסה מרחוק לשורת פקודה (ה"קליפה" בשם) ולהעברת קבצים, אך הפרוטוקול הבסיסי הוא כללי מספיק כדי לבצע מנהור של כל יישום TCP. SSH נוצר על ידי Tatu Ylönen בשנת 1995 לאחר התקפת הרחת סיסמאות באוניברסיטה שלו; יישום OpenSSH (החל ב-1999) הוא הגרסה הנפרסת ביותר כיום.
מה SSH מספק
T שלושה מאפיינים:
- Confidentiality — מוצפן במעבר. משקפי רשת רואים בתים מוצפנים, לא פקודות או סיסמאות.
- Integrity — מנות שהשתנו מזוהות ונדחות.
- אימות של שני הקצוות — הלקוח מאמת את המפתח והשרת הציבורי, (מאמת את השרת או את השרת האחר) ללקוח (באמצעות מפתח מארח).
השילוב מחליף את החבילה הישנה יותר של telnet, rlogin, rsh ו-rcp - כולם שידרו אישורים בטקסט רגיל.
איך עובדים חיבורי SSH
The handshake, מפושט:
- Client פותח חיבור TCP לשרת ביציאה 22 (ניתן להגדרה).
- שני הצדדים מחליפים מחרוזות גרסת.
- שני הצדדים מחליפים אלגוריתמים נתמכים; בחר את הצופן ההדדי החזק ביותר, KEX, MAC.
- החלפת מפתחות - בדרך כלל עקומות X25519 או NIST בימינו. שני הצדדים גוזרים סוד משותף מבלי שהוא יעבור את החוט בטקסט פשוט.
- השרת שולח את מפתח המארח שלו, חתום בסוד המשותף. הלקוח בודק מול ~/.ssh/known_hosts.
- מנקודה זו והלאה, הכל מוצפן במפתחות שמקורם בסוד המשותף.
- הלקוח מאמת - באמצעות סיסמה, מפתח ציבורי או מנגנון אחר.
- ההפעלה המוצפנת פתוחה. הלקוח מבקש מעטפת, העברת קבצים, יציאה קדימה או מה שהוא בעצם רוצה.
שיטות אימות
- Password. המשתמש מקליד סיסמה; זה נשלח מוצפן בתוך ההפעלה. פשוט, אך פגיע להתקפות של מילוי אישורים נגד שרתי SSH חשופים.
- מפתח ציבורי. ללקוח יש מפתח פרטי (ב-
~/.ssh/id_ed25519בדרך כלל); לשרת יש את המפתח הציבורי התואם ב-~/.ssh/authorized_keys. הלקוח מוכיח את החזקת המפתח הפרטי על ידי חתימה על אתגר מהשרת. שום סיסמה לא חוצה את הרשת. ברירת המחדל המומלצת עבור כמעט כל מקרי השימוש. - Certifikat-based. CA חותם על אישור עבור מפתח המשתמש, כולל תפוגה ואילוצים. שרתים סומכים על ה-CA, סומכים אוטומטית על אישורים חתומים. המודל הנכון לארגונים עם משתמשים רבים; מחליף את סיוט ההפצה של מפתח ssh.
- FIDO2 / מפתח חומרה SSH. OpenSSH לאחרונה תומך במפתחות מגובים באסימון אבטחה של חומרה. הוכחת פישינג, דורשת החזקה פיזית.
- Multi-factor — שלבו את האמור לעיל. סיסמה + מפתח, או סיסמה + אסימון חומרה.
מעבר לגישה למעטפת: העברת יציאות
SSH יכולה להעביר תעבורת TCP שרירותית דרך ההפעלה המוצפנת:
- LZ81 העברת יציאות XXXLZ81XXLZ81 (XXLZ81)
ssh -L 9000:internal:3306 user@bastionפותח את היציאה המקומית 9000, אשר עוברת ל-internal:3306דרך מארח הבסטיון. שימושי להגעה לשירותים פנימיים דרך מארח קפיצה. - העברת יציאה מרחוק (
-R): הכיוון ההפוך. המארח המרוחק מקבל יציאה המפנה חזרה לשירות במחשב שלך. - העברת יציאות דינמית (
-D): SSH יוצר פרוקסי SOCKS5 במחשב המקומי שלך. לכל יישום שמצביע עליו תעבורת ה-TCP שלו מועברת דרך הפעלת SSH. למעשה, VPN למשתמש יחיד על פני SSH.
SSH שילוח דינמי הוא ה-VPN היחיד והשימושי ביותר של אדם עניים; לכל מי שיש לו שרת איפשהו יש גישה אליו.
המערכת האקולוגית של OpenSSH
- ssh - הלקוח
- sshd - הדמון השרת
- scp - העותק המאובטח ביותר ב- מורשה, כעת תחת העותק השמור ביותר. hood)
- sftp — FTP מאובטח, פרוטוקול נפרד שפועל בתוך SSH
- ssh-agent — מאחסן מפתחות מפוענחים בזיכרון, כך שלא תזין ביטוי סיסמה לכל חיבור
- XZPLXPLXPL
- ZPLXZPLXPL
- ZPLX4 — מייצר צמדי מפתחות
- ssh-copy-id — מעתיק את המפתח הציבורי שלך לקובץ מפתחות מרוחק
הגנה על שרת SSH
שרת SSH באינטרנט הציבורי רואה באופן תמידי אמין. ההגנות:
- השבת את אימות הסיסמה. מפתחות ציבוריים בלבד. מסיר את כל וקטור ההתקפה של מילוי האישורים.
- השתמש במפתחות Ed25519. מודרני, מהיר, קטן.
ssh-keygen -t ed25519היא הפקודה הנכונה עבור מפתחות חדשים. - השתמש ביציאה שאינה ברירת מחדל. Marginal; מפחית בעיקר את רעש יומן הסורק.
- fail2ban או sshguard — חסימת כתובות IP לאחר ניסיונות כושלים חוזרים ונשנים.
- Lהגבלת חשבונות משתמש שיכולים SSH.
Z58XXUsers sshd_config. - השתמש ב-VPN או Tailscale — אל תחשוף את SSH לאינטרנט הציבורי כלל אם אתה יכול להימנע מכך. בדוק אם יש ערכים בלתי צפויים.
שאלות נפוצות
- באיזה יציאה משתמש SSH?
- 22 כברירת מחדל. היציאה ניתנת להגדרה; מפעילים מסוימים מעבירים את SSH ליציאה לא סטנדרטית כדי להפחית את תעבורת הסריקה ביומנים. זהו אבטחה דרך ערפול - שימושי להיגיינה, לא לאבטחה בפועל. האבטחה האמיתית היא אימות חזק.
- האם SSH בטוח יותר מ-HTTPS?
- מודלים שונים של איומים. שניהם משתמשים בקריפטוגרפיה מודרנית ובעצם מאובטחים באותה מידה ברמת הפרוטוקול. SSH משמש בדרך כלל עם אימות מפתח ציבורי (ללא סיסמאות, חזקות מאוד) בעוד שאתרי HTTPS רבים עדיין משתמשים באימות סיסמה (חלש יותר כברירת מחדל). הפרוטוקולים הם עמיתים; שיטות הפריסה משתנות.
- האם אוכל להשתמש ב-SSH להעברת קבצים?
- כֵּן. <code>scp</code> ו-<code>sftp</code> פועלים שניהם על SSH. SFTP היא הבחירה המודרנית המסוגלת יותר - העברות מתחדשות, פעולות רקורסיביות, כתיבה אטומית. <code>rsync</code> יכול גם להשתמש ב-SSH בתור התחבורה שלו, והוא הכלי הנכון לכל העברה לא טריוויאלית.
- מהו מפתח SSH?
- זוג מפתחות ציבורי/פרטי המשמש לאימות. המפתח הפרטי נמצא ב-<code>~/.ssh/id_*</code> במחשב שלך; המפתח הציבורי מותקן ב-<code>~/.ssh/authorized_keys</code> בשרתים שאליהם אתה מתחבר. אובדן המפתח הפרטי ללא ביטוי סיסמה הוא בעיה רצינית - כל מי שיש לו יכול להיכנס כמוך. הגן תמיד על מפתחות SSH באמצעות ביטוי סיסמה.
- מדוע אומר SSH 'מפתח המארח השתנה'?
- מפתח הזהות של השרת השתנה מאז החיבור האחרון שלך - או שהשרת נבנה מחדש, המפתח הסתובב או שמשהו לא בסדר (המקרה המדאיג ביותר: מישהו מתחזה לשרת). אל תקבל באופן עיוור את המפתח החדש; לאמת מחוץ לפס עם מפעיל השרת. אם זה היה סיבוב לגיטימי, הסר את המפתח הישן מ-known_hosts וקבל את החדש.