פורסם ב כלים לחיים קלים

Can we tunnel our way out of this? – part 2

זמן קריאה: 5 דקות

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

אז מה הן ssh tunnels?

כולנו מכירות את ssh, זה הפרוטוקול המאוד שימושי שמאפשר לנו להתחבר בצורה בטוחה למחשבים מרוחקים.
רוב הזמן אנחנו משתמשות בתוכנת shell על מנת לעבוד על מחשבים מרוחקים. הבעיה מתחילה כשלצרכים מסוימים, השיטה הזו לא מספיק טובה – למשל אם אנחנו רוצות להעתיק קבצים בין המחשב שלנו למחשב המרוחק, או להיפך, או כשאנחנו רוצות להשתמש בכלים ותוכנות שאינן shell על מידע ושירותים מרוחקים. אני יודעת שיש כאלה שלא יסכימו איתי, אבל ה-shell, על אף שהיא כלי עבודה נפלא ושימושי, לא עונה לנו על 100% מהצרכים.

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

אחד השימושים הנפוצים שלי ב – ssh tunnels הוא לחיפוש מידע במונגו. 
אני מאוד לא אוהבת לעבוד עם מונגו ב-shell. זה עוד סביר בשאילות קטנות עם מעט תשובות, אבל ברגע שהשאילתות מסתבכות אפילו טיפה, וברגע שאני רוצה לסרוק כמות קצת יותר גדולה של מידע ולהסיק מסקנות, הפורמט הטקסטואלי המבולגן של ה-shell נהיה מבלבל מדי.
כדי להקל על העבודה עם מונגו, אני משתמשת ב-Robo 3T זה כלי ממש חמוד שמספק ממשק נוח וקליל מאוד למונגו.

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

הפתרון הוא פשוט – ליצור ssh tunnel מהמחשב שלי לשרת המונגו שמעניין אותי, לקנפג את Robo 3T להתחבר לפורט המקומי המתאים, ולהשתמש בו באופן רגיל לחלוטין.

כך תצרו ssh tunnel לשירות האהוב עליכן

דבר ראשון, אתן צריכות לאסוף מספר פרטים חשובים –

  • השם או כתובת ה-IP של השרת המרוחק.
  • הפורט של השירות בו אתן רוצות להשתמש (לדוגמא, הפורט של מונגו הוא 27017).
  • פורט לוקאלי פנוי, אתן יכולות להשתמש באותו הפורט, אבל אתן יכולות להשתמש גם בכל פורט פנוי אחר.
  • שם היוזר איתו אתן מתחברות למחשב המרוחק.
  • הסיסמא שלכן למחשב המרוחק, או את הקובץ שמכיל את ה – private key שלכן.

אחרי שיש לכן את כל אלו, אתן יכולות להשתמש בפקודה – 

ssh -N -L <local_port>:127.0.0.1:<destination_port> -i <private_key_path> <user_name>@<host_ip>

ברגע שהפקודה תרוץ אתן מחוברות, ויכולות להתחיל לשלוח בקשות לפורט <local_port> במכונה הלוקאלית שלכן ולקבל תשובות מהשרת המרוחק.

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

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

ssh -N -L <local_port>:<host2_ip>:<destination_port> -i <private_key_path> <user_name>@<host1_ip>

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

5 תגובות בנושא “Can we tunnel our way out of this? – part 2

  1. ומכיוון שכולנו עצלנים ולא רוצים לזכור פקודות ארוכות בעל פה, הצעד המתבקש הבא הוא להוסיף את הקונפיגורציה המתאימה ב:
    ~/.ssh/config

    למשל

    Our Proxy Server

    Forward all local port 3128 traffic to port 3128 on the remote workproxy.work.net server

    Host workproxy
    HostName workproxy.work.net
    User MyUserName
    IdentityFile ~/.ssh/MyProduction.key
    LocalForward 3128 127.0.0.1:3128

    Host mongo
    HostName mongo.work.local
    ProxyJump MyUserName@workproxy:3128
    User MyUserName

  2. למשתמשי Robo3T, במקום להריץ ssh בשורת הפקודה (שאני רגיל לעשות כשאני משתמש ב-mongo משורת הפקודה), אפשר במסך עריכת פרטי החיבור לעבור ללשונית SSH ולהגדיר את פרטי החיבור בדיאלוג – ואז כשמנסים להתחבר למסד, Robo3T מפעיל את המנהרה באופן אוטומטי, וסוגר אותה לבד בסוף.

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

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

  3. למתקדמות, מציעה ללמוד על socks5 proxy רלבנטי בעיקר למקרים שצריך לגשת דרך שרת מתווך לכמה שרתים. כמו במקרה של מאיה עם מונגו אבל כשצריכים גישה לעוד שרתים בסביבה המבצעית.

    1. ממליץ גם בחום על SOCKS. לא כל התוכנות תומכות בזה – לדוגמה Robo T3 לא תומך אבל Studio T3, הגרסה המסחרית שלו – כן. כדי לפתוח SOCKS proxy מעל מנהרת SSH, פשוט להריץ ssh -D1080 remote-host – זה פותח SOCKS proxy בכניסה 1080 (הכניסה התקנית של SOCKS).

      לדוגמה, אם יש לכם גישה למחשב בארה”ב, אז אפשר להרים אליו מנהרת SSH עם SOCKS, לכוון את הדפדפן להשתמש ב-proxy המקומי, והופה – אתן גולשות כאילו בארה”ב.

השאר תגובה