איך להתחבר לשרת ב-SSH - מ-Windows, macOS ולינוקס

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

עודכן: · 6 דק׳ קריאה · מאת צוות CloudServer

בקצרה כדי להתחבר לשרת ב-SSH פותחים טרמינל (ב-Windows: PowerShell) ומקלידים ssh user@IP, למשל ssh root@203.0.113.10. בהתחברות הראשונה מאשרים את טביעת האצבע של השרת ומזינים סיסמה. מיד אחר כך כדאי ליצור מפתח עם ssh-keygen -t ed25519, להעתיק אותו לשרת עם ssh-copy-id ולבטל כניסה בסיסמה.

SSH (Secure Shell) הוא הדרך הסטנדרטית להתחבר לשרת לינוקס מרחוק: חיבור מוצפן לשורת הפקודה של השרת, כאילו אתם יושבים מולו. כל מה שצריך הוא שלושה פרטים שמקבלים עם הקמת שרת הענן: כתובת IP, שם משתמש (לרוב root או ubuntu) וסיסמה או מפתח. הלקוח (התוכנה שמתחברת) מובנה היום בכל מערכות ההפעלה הנפוצות.

איך מתחברים ב-SSH מ-Windows?

ב-Windows 10 ו-11 מתחברים ישירות מ-PowerShell או מ-Windows Terminal, כי לקוח OpenSSH מותקן כברירת מחדל. פותחים PowerShell ומקלידים:

ssh root@203.0.113.10

אם מתקבלת הודעה ש-ssh אינו מוכר, מתקינים את הרכיב (PowerShell כמנהל):

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

החלופה הוותיקה היא PuTTY: מזינים את כתובת ה-IP בשדה Host Name, פורט 22, ולוחצים Open. PuTTY משתמש בפורמט מפתח משלו (.ppk), וכלי PuTTYgen ממיר אליו מפתחות OpenSSH. למי שמתחיל היום, OpenSSH המובנה פשוט יותר כי הפקודות זהות בכל המערכות.

איך מתחברים ב-SSH ממק או מלינוקס?

במק ובלינוקס פותחים את אפליקציית Terminal ומריצים את אותה פקודה - הלקוח מותקן מראש:

ssh root@203.0.113.10
# פורט שאינו 22:
ssh -p 2222 dana@203.0.113.10

בהתחברות הראשונה תופיע שאלה כמו "Are you sure you want to continue connecting (yes/no)?" עם טביעת האצבע של השרת. כשמקלידים yes, הטביעה נשמרת בקובץ ~/.ssh/known_hosts, ומעכשיו הלקוח יתריע אם השרת שעונה בכתובת הזו השתנה. מי שרוצה לוודא שאין "איש באמצע" יכול להשוות את הטביעה למה שמוצג בקונסולת השרת.

איך יוצרים מפתח SSH מסוג ed25519?

יוצרים מפתח עם הפקודה ssh-keygen -t ed25519, שעובדת זהה ב-PowerShell, במק ובלינוקס. היא יוצרת זוג קבצים: מפתח פרטי שנשאר אצלכם ולא נשלח לאף אחד, ומפתח ציבורי (סיומת .pub) שמתקינים על השרת.

ssh-keygen -t ed25519 -C "dana@office-laptop"
# Enter file in which to save the key: (Enter לברירת המחדל)
# Enter passphrase: (מומלץ להגדיר)

הקבצים נוצרים ב-~/.ssh/id_ed25519 וב-~/.ssh/id_ed25519.pub (ב-Windows: C:\Users\<שם>\.ssh\). ה-passphrase מצפינה את המפתח הפרטי על הדיסק, כך שגניבת המחשב לא מספיקה כדי להיכנס לשרת. כדי לא להקליד אותה בכל חיבור, משתמשים ב-ssh-agent (במק - גם דרך ה-Keychain).

סוג מפתחהמלצההערות
ed25519ברירת המחדל המומלצתקצר, מהיר ונתמך בכל שרת מודרני
RSA 4096רק למערכות ישנותנתמך בכל מקום; מפתחות RSA קצרים מ-2048 ביט אינם מומלצים
ECDSAאפשריאין סיבה מיוחדת להעדיף על פני ed25519
ed25519-skלאבטחה מוגברתמפתח שקשור למפתח חומרה (FIDO2/YubiKey)

איך מעתיקים את המפתח לשרת?

במק ובלינוקס הדרך הקלה היא ssh-copy-id, שמתחברת פעם אחת עם סיסמה ומוסיפה את המפתח הציבורי לקובץ ~/.ssh/authorized_keys בשרת:

ssh-copy-id dana@203.0.113.10

ב-Windows אין ssh-copy-id, אבל שורה אחת ב-PowerShell עושה את אותו הדבר:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh dana@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

עכשיו ssh dana@203.0.113.10 אמור להתחבר בלי סיסמת שרת. רק אחרי שווידאתם זאת - בחלון נפרד - בטלו כניסה בסיסמה ובהתחברות root, כפי שמפורט בצ'קליסט אבטחת שרת לינוקס. אצל ספקי ענן רבים, כולל אצלנו, אפשר גם להזין את המפתח הציבורי כבר בזמן הקמת השרת, וכך הוא עולה בלי סיסמה בכלל.

איך משתמשים בקובץ ~/.ssh/config כדי לחסוך הקלדה?

הקובץ ~/.ssh/config מאפשר לתת לכל שרת כינוי קצר עם כל הפרמטרים שלו, כך שבמקום פקודה ארוכה מקלידים ssh web1. הוא עובד זהה ב-Windows, במק ובלינוקס.

Host web1
    HostName 203.0.113.10
    User dana
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
    ServerAliveInterval 60

Host db1
    HostName 10.0.0.5
    User dana
    ProxyJump web1

שתי הגדרות שכדאי להכיר: ServerAliveInterval שולח "פינג" כל דקה ומונע ניתוק של חיבור שקט ברשתות משרדיות, ו-ProxyJump מאפשר להגיע לשרת פנימי (למשל מסד נתונים ללא IP ציבורי) דרך שרת אחר, בלי לפתוח אותו לאינטרנט. הכינויים עובדים גם עם scp, rsync ו-VS Code Remote-SSH.

איך לא להקליד את ה-passphrase בכל חיבור?

משתמשים ב-ssh-agent, תהליך רקע שמחזיק את המפתח הפתוח בזיכרון לאורך הסשן, כך שמקלידים את ה-passphrase פעם אחת בלבד. בכל מערכת ההפעלה ההפעלה מעט שונה:

# Windows (PowerShell כמנהל, פעם אחת):
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519

# macOS - שמירה ב-Keychain:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

# Linux:
eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519

במק אפשר להוסיף ל-~/.ssh/config את השורות AddKeysToAgent yes ו-UseKeychain yes, והמפתח ייטען אוטומטית גם אחרי הפעלה מחדש.

איך ניגשים לשירות פנימי בשרת דרך מנהרת SSH?

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

ssh -L 3307:127.0.0.1:3306 web1
# עכשיו כלי ה-DB המקומי מתחבר ל-127.0.0.1:3307 ומגיע ל-MySQL שבשרת

זו דרך פשוטה ובטוחה יותר מחשיפת פורט 3306 או phpMyAdmin לכל העולם, והיא עובדת זהה ב-PowerShell, במק ובלינוקס.

למה החיבור ב-SSH נכשל? שגיאות נפוצות ופתרונות

רוב כשלי ה-SSH נופלים לחמש קטגוריות, וההודעה עצמה אומרת באיזו שכבה הבעיה. הכלי הראשון לאבחון הוא מצב מפורט: ssh -v dana@203.0.113.10, שמציג אילו מפתחות נוסו ואיפה החיבור נעצר.

הודעת שגיאהמה זה אומרמה לבדוק
Permission denied (publickey)השרת זמין, אבל דחה את האימותשם משתמש נכון? המפתח הנכון נשלח (-i או IdentityFile)? הרשאות בשרת: ~/.ssh ב-700 ו-authorized_keys ב-600, והבעלים הוא המשתמש
Connection refusedהכתובת הגיעה, אבל אין שירות שמאזין בפורטפורט שגוי? שירות ssh כבוי (systemctl status ssh דרך הקונסולה)?
Connection timed outאין תשובה בכלל - החבילות נחסמות או הולכות לאיבודכתובת IP נכונה? חומת אש (ufw או בפאנל) חוסמת את הפורט? השרת דלוק? רשת המשרד חוסמת פורט 22 יוצא?
REMOTE HOST IDENTIFICATION HAS CHANGEDמפתח השרת שונה ממה שנשמר ב-known_hostsאם התקנתם את השרת מחדש - זה צפוי: ssh-keygen -R 203.0.113.10. אם לא שיניתם כלום - עצרו ובררו לפני שממשיכים
Too many authentication failuresהלקוח ניסה יותר מדי מפתחות לפני הנכוןהוסיפו IdentitiesOnly yes ו-IdentityFile ספציפי ב-config
UNPROTECTED PRIVATE KEY FILEהרשאות המפתח הפרטי פתוחות מדיבמק/לינוקס: chmod 600 ~/.ssh/id_ed25519. ב-Windows: להסיר הרשאות של משתמשים אחרים מהקובץ
חסמתם את עצמכם? אם fail2ban חסם את ה-IP שלכם או ששינוי ב-ufw ניתק את הגישה, היכנסו דרך קונסולת הדפדפן בפאנל הניהול - היא אינה עוברת ב-SSH - ותקנו משם.

איך בודקים בצד השרת למה ההתחברות נדחתה?

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

sudo journalctl -u ssh -n 50 --no-pager
sudo sshd -T | grep -Ei 'passwordauth|permitroot|pubkey'

הודעה כמו "Authentication refused: bad ownership or modes" אומרת שההרשאות על ~/.ssh או על תיקיית הבית פתוחות מדי, ותיקונן פותר את הבעיה.

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

אחרי ההתחברות הראשונה עוברים על ארבעה צעדים בסיסיים: מעדכנים חבילות, יוצרים משתמש אישי עם sudo, מעבירים את הכניסה למפתחות בלבד ומפעילים חומת אש. ההסבר המלא עם הפקודות נמצא במדריך אבטחת שרת לינוקס. מי שמעדיף שצוות אחר ינהל את כל זה יכול לבחור שרת ענן מנוהל, ומי שעובד עם Windows ימצא את ההתחברות ב-RDP בעמוד שרת ענן Windows.

שאלות נפוצות

מה ההבדל בין SSH ל-RDP?
SSH הוא פרוטוקול לשורת פקודה מוצפנת, ומשמש בעיקר לניהול שרתי לינוקס. RDP הוא פרוטוקול לשולחן עבודה גרפי מרוחק של Windows. לשרת Windows מתחברים בדרך כלל ב-RDP, ולשרת לינוקס ב-SSH - אם כי Windows Server תומך היום גם ב-OpenSSH.
האם אפשר להשתמש באותו מפתח SSH לכמה שרתים?
כן. את המפתח הציבורי אפשר להתקין על כמה שרתים שרוצים, והמפתח הפרטי נשאר רק אצלכם. מקובל להחזיק מפתח נפרד לכל מחשב או אדם, כדי שאם מחשב נגנב אפשר לבטל רק את המפתח שלו.
שכחתי את ה-passphrase של המפתח. מה עושים?
אין דרך לשחזר passphrase. יוצרים זוג מפתחות חדש, מתחברים לשרת בדרך אחרת (מפתח אחר, סיסמה או קונסולת הפאנל) ומוסיפים את המפתח הציבורי החדש לקובץ authorized_keys. את המפתח הישן כדאי למחוק מהשרת.
האם PuTTY עדיין נחוץ ב-Windows?
ברוב המקרים לא. Windows 10 ו-11 כוללים לקוח OpenSSH מובנה שעובד מ-PowerShell ומ-Windows Terminal עם אותן פקודות כמו במק ובלינוקס. PuTTY עדיין שימושי למי שמעדיף ממשק גרפי לשמירת חיבורים, או כשעובדים עם מפתחות בפורמט ppk.
איך מעבירים קבצים לשרת דרך SSH?
עם scp לפקודה בודדת, למשל scp file.zip dana@server:/tmp/, או עם rsync לסנכרון תיקיות. בממשק גרפי אפשר להשתמש ב-WinSCP או FileZilla בפרוטוקול SFTP, שעובד מעל אותו חיבור SSH ואותו מפתח.