הפקודות המרוחקות של Fabric עוברות דרך SSH. כדי להעביר את חיבור ה-SSH הזה דרך שרת SOCKS, תנו ל-Fabric מחבר שמדבר SOCKS ומחזיר את זרם הבתים של היעד.

ה-API Connection שהוצג ב-Fabric 2 מקבל מחרוזת פקודה בתור ה-gateway שלו. Fabric משתמש במחרוזת הזו כ-ProxyCommand. עם nc קיים שתואם ל-OpenBSD ותומך באפשרויות הפרוקסי שלו, התצורה יכולה להיות:

from fabric import Connection

connection = Connection(
    "app.example.net",
    user="deploy",
    gateway="nc -X 5 -x proxy.example.net:1080 %h %p",
)

הדוגמה הזו משתמשת בפורט ה-SSH הרגיל, 22. ה--X 5 של המחבר בוחר SOCKS5, ואילו -x מזהה את נקודת הקצה של הפרוקסי. מצייני המקום של המארח והפורט מספקים את יעד ה-SSH. עבור יעד SSH ציבורי, נקודת קצה ללא אימות מתוך רשימת פרוקסי SOCKS5 יכולה למלא את כתובת הפרוקסי אם היא מתירה את היעד והפורט האלה. הגדירו את הפקודה לפי האפשרויות של המחבר המותקן בפועל במכונה; תוכניות בשם nc לא כולן חושפות את אותו ממשק.

המחבר פועל מקומית, במקום שבו Fabric פועל. שרת האפליקציה אינו זקוק לעוזר הזה רק משום שהוא יעד ה-SSH. לאחר שהזרם נוצר, Fabric עדיין מבצע משא ומתן SSH ומאמת את חשבון deploy ב-app.example.net. כל אימות שהשרת SOCKS דורש שייך למחבר וחייב להיות נתמך על ידו.

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

כאשר המתווך הוא שרת SSH

אובייקט Connection של Fabric שמועבר בתור gateway משמעו משהו אחר: Fabric מתחבר לשער ה-SSH הזה ומבקש ערוץ אל המארח הסופי. השתמשו בצורה הזו עבור מארח קפיצה של SSH. מאזין SOCKS אינו שרת SSH, ולכן הוא זקוק למחבר בסגנון פקודה שלמעלה.

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

מאמרים קשורים