קביעת תצורה של מנהרת SSH (העברת יציאות) ב- Windows


באפשרותך להשתמש בשרת OpenSSH המובנה ב- Windows כדי להעביר יציאות דרך מנהרת SSH (תיעול SSH). העברת יציאות ב- SSH מאפשרת לך לתעל (להעביר) יציאות יישומים מהמחשב המקומי לשרת מרוחק ולהיפך. העברת פורטים דרך מנהרת SSH נמצאת בשימוש נרחב בסביבות לינוקס/יוניקס, וכעת תוכלו לנצל תכונה זו גם בווינדוס. בדוגמה זו, נראה כיצד לתעל תעבורת חיבור RDP דרך OpenSSH במחשב מארח של Windows Server.

מהו תיעול SSH?

מנהרת SSH מספקת חיבור TCP מאובטח ומוצפן בין מארח מקומי לשרת SSH מרוחק. העברת יציאות SSH מאפשרת לך לתעל חיבור מיציאה מקומית במחשב המקומי שלך לכל יציאת TCP בשרת מרוחק (או להיפך) באמצעות SSH.

העברת יציאות במנהרות SSH משמשת עבור:

  • עקוף חומות אש;

  • פתיחת דלתות אחוריות לרשתות פרטיות;

  • תרחישי VPN מחליפים לחיבור מאובטח מרחוק;

  • הגן על תעבורה של יישומים (פרוטוקולים) מדור קודם המשדרים נתונים בטקסט ברור (ללא הצפנה).

ניתן להעביר תעבורת/יציאת TCP רק למנהרת SSH (פרוטוקולי UDP ו-ICMP אינם נתמכים).

תיעול SSH משמש בעיקר בתרחישים שבהם עליך להתחבר למחשב מרוחק מאחורי חומת האש. לדוגמה, יש לך Windows Server עם יציאת SSH פתוחה בלבד (TCP 22). כל שאר היציאות חסומות על-ידי חומת אש של חומרה או חומת האש של Windows Defender. המשימה שלך היא להתחבר לשרת Windows באמצעות לקוח RDP. זה נראה משימה בלתי אפשרית מכיוון שיציאת שולחן העבודה המרוחק 3389 חסומה על-ידי חומת האש. עם זאת, ניתן לגשת לכל יציאה במארח מרוחק דרך מנהרת SSH.

להלן תרחישי השימוש האופייניים למנהור SSH:

  • העברת TCP מקומית היא העברת יציאה מקומית לשרת מרוחק;

  • העברת TCP מרחוק היא העברת יציאה מרוחקת למחשב מקומי;

  • מנהרת SSH כפולה - מאפשרת לחבר מחשבים ללא כתובות IP ערווה שהוקצו או מאחורי NAT/חומת אש דרך שרת SSH (אם פתרון שרת OpenVPN אינו ישים).

אבטחת RDP באמצעות מנהרת SSH (העברת TCP מקומית)

במצב זה, אתה יוצר יציאת TCP מקומית במחשב שלך. כל החיבורים ליציאה זו יועברו ליציאה שצוינה בשרת מרוחק דרך מנהרת SSH. בדוגמה זו, ניצור יציאה מקומית 8888, והחיבור אליה ינותב מחדש ליציאת RDP 3389 במחשב מארח מרוחק של Windows. דיאגרמת החיבור הכללית נראית כך:

אנו זקוקים ללקוח SSH להעברת יציאות. אתה יכול להשתמש בלקוח צד שלישי (כמו Putty), אבל אני אשתמש בלקוח SSH המובנה ב- Windows. הפעל את הפקודה הבאה במסוף PowerShell כדי להתקין את לקוח OpenSSH ב- Windows 10/11 או Windows Server 2022/2019:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'

כדי ליצור מנהרת SSH עם מארח מרוחק 192.168.1.90, הפעל את הפקודה:

ssh -L 8888:192.168.1.90:3389 root@192.168.1.90

מחרוזת החיבור הבאה משמשת בדוגמה זו:

LOCAL_PORT:DESTINATION_IP:DESTINATION_PORT

ו

USER@DESTINATION_IP

(שם המשתמש והכתובת של שרת SSH המרוחק)

כדי לגרום למנהרת SSH לפעול ברקע, הוסף את הפרמטר -f.

כדי להתחבר לשולחן עבודה מרוחק דרך מנהרת SSH, עליך להתחבר ליציאה המקומית 8888 של המחשב באמצעות לקוח RDP (mstsc.exe):

127.0.0.1:8888

היכנס למחשב המרוחק ועבוד בבטחה בהפעלת RDP. באפשרותך להשתמש ב- cmdlet Get-NetTCPConnection או בכלי TCPView כדי לוודא שחיבור RDP נוצר באופן מקומי (חיבור RDP הופעל על-ידי שרת SSH הפועל באופן מקומי):

Get-NetTCPConnection -State Established|where {$_.localport -eq "3389"}|fl

באפשרותך לבדוק שיציאת TCP/3389 בשרת אינה נגישה ישירות מהמחשב. באפשרותך לבדוק את הזמינות של יציאה באמצעות cmdlet Test-NetConnection:

Test-NetConnection 192.168.1.90 -port 3389
TcpTestSucceeded       : False

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

mstsc.exe /v 10.10.1.220:8888

אבטחת חיבור RDP עם מנהרת SSH יכולה להיות חלופת VPN טובה לגישה למארחי Windows ציבוריים. במקרה זה, אין צורך לפתוח ישירות את יציאת RDP/3389 במחשב המארח של Windows. זה מספיק כדי לפתוח רק את יציאת SSH/22, אשר יגן עליך מפני התקפות כוח גס RDP וניצול של פגיעויות RDP 0 ימים.

אתה יכול להשתמש בכלי sshpass כדי לספק אוטומציית סיסמאות להתחברות SSH. באפשרותך להפעיל כלי זה באמצעות מערכת המשנה WSL2 עבור Windows.

התקן sshpass ב- Ubuntu WSL:

sudo apt-get -y install ssphass

הפעל את לקוח חיבור לשולחן עבודה מרוחק (mstsc.exe) ושמור את הגדרות החיבור בקובץ localhost-3389.rdp:

Computer: localhost:8888
User name: remoteusername

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

start /min wsl sshpass -p "password" ssh -L 8888:192.168.31.90:3389 user@192.168.31.90
powershell sleep 5
start mstsc C:\script\localhost-3389.rdp

לחלופין, (רצוי) להגדיר אימות מפתח SSH.

כיצד ליצור מנהרת SSH ב- Windows עם מרק?

בואו נסתכל כיצד ליצור מנהרת SSH ב- Windows באמצעות הלקוח הפופולרי SSH Putty.

  1. הפעל את PuTTY ונווט אל חיבור -> מנהרות SSH ->;

  2. ציין את מספר היציאה המקומית ביציאת המקור (בדוגמה שלנו, הוא 8888);

  3. ציין את כתובת ה- IP של שרת SSH ואת היציאה במחשב המארח המרוחק כדי להעביר את החיבור:

    192.168.31.90:3389
  4. בחר יעד מקומי ולחץ על הוסף;

  5. כדי להימנע מפתיחת מעטפת מארח מרוחק בעת התחברות דרך מנהרה, הפעל את האפשרות אל תתחיל פגז או פקודה כלל במקטע SSH;

  6. חזור לכרטיסייה הפעלה, ציין את השם או כתובת ה- IP של מארח ה- SSH המרוחק ואת מספר יציאת החיבור (22 כברירת מחדל). ציין את שם המופע בשדה Saved Session ולחץ על Save;

  7. עכשיו אתה יכול להתחיל את מנהרת SSH שנשמר ב Putty ישירות משורת המשימות של Windows 10.

העברת TCP מרחוק (SSH הפוך) למחשב מקומי

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

ssh -R 8080:internalwww:80 user@200.168.1.90

עכשיו, כדי לגשת לאתר הפנימי משרת SSH מרוחק, פשוט הקלד את הכתובת

http://localhost:8080 

בדפדפן.

בכל הגירסאות של Windows, באפשרותך ליצור את כללי העברת היציאה באמצעות

netsh interface portproxy

פקודה.

עם מנהרות SSH, אתה יכול ליצור שרשראות העברת יציאות. באפשרותך להפעיל או להשבית תיעול SSH בקובץ התצורה של OpenSSH (sshd_config) באמצעות ההוראות הבאות:

AllowStreamLocalForwarding yes
AllowTcpForwarding remote
PermitTunnel no

הוראות תצורה אלה אינן זמינות בגירסה הנוכחית של OpenSSH עבור Windows.