מחולל SSH config ועוזר מפתחות
מתארים כל שרת פעם אחת, ומתחברים עם ssh ושם קצר: המשתמש, הפורט והמפתח הנכונים, קפיצה דרך bastion ומנהרות SSH לשירותים שמאזינים רק על השרת. את המפתח יוצרים עם ssh-keygen במחשב שלכם, או, אם תבחרו, בדפדפן הזה. שום דבר לא יוצא מהעמוד.
המפתח
יוצרים את המפתח במחשב שלכם עם ssh-keygen: כך המפתח הפרטי לא קיים בשום מקום אחר, ו-ssh-keygen מבקש passphrase שמגנה עליו. מפתחות Ed25519 קצרים, מהירים ונתמכים בכל OpenSSH עדכני.
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
- מריצים את הפקודות בטרמינל במחשב שלכם (macOS, Linux, או Windows עם OpenSSH). ssh-keygen מבקש passphrase: כדאי להגדיר.
- ssh-copy-id מוסיף את
~/.ssh/id_ed25519.pubל-~/.ssh/authorized_keys בשרת הראשון שלמעלה, עם הסיסמה או הגישה שיש לכם עכשיו. בלעדיו מדביקים את שורת ה-.pub שם בעצמכם, או מעבירים אותה למחולל ה-cloud-init. - המפתח הפרטי
~/.ssh/id_ed25519נשאר במחשב שלכם. לא שולחים אותו ולא מדביקים אותו בשום מקום.
או יצירת המפתח בדפדפן הזה (לא חובה)
למקרה ש-ssh-keygen לא זמין. ה-WebCrypto של הדפדפן יוצר את המפתח במכשיר הזה: הוא לא נשלח לשום מקום, לא נשמר, לא נכנס לקישור ולא נמדד.
מה הכלי עושה
הכלי כותב בלוקי Host לקובץ תצורת ה-SSH במחשב שלכם, כך ש-ssh עם שם קצר מתחבר עם הכתובת, המשתמש, הפורט והמפתח הנכונים, דרך bastion כשצריך, עם keep-alive, ועם מנהרות SSH לשירותים שלא פתוחים לאינטרנט. הוא גם נותן את פקודת ssh-keygen למפתח Ed25519, ורק אם מבקשים, יוצר את המפתח בדפדפן הזה.
איך זה עובד
- כל שרת הופך לבלוק Host אחד, שנכתב באותו מנוע כמו שאר כלי ה-Linux שלנו. הערכים נבדקים לצורתם: כינוי עם רווח או תו כללי, שם host שאינו שם host, או נתיב מפתח עם .. נדחים, כך ששדה לא יכול להוסיף אפשרויות משלו.
- הבדיקות שלנו קוראות כל קובץ לדוגמה בחזרה עם ssh -G ומשוות כל אפשרות, וטוענות עם ssh-keygen -y מפתחות שנוצרו בקוד של העמוד הזה.
- שום דבר לא נשלח לשום מקום, ושום דבר לא נשמר בקישור או באחסון הדפדפן.
מה כל אפשרות עושה
- HostName
- הכתובת האמיתית. הכינוי הוא רק שם במחשב שלכם.
- IdentityFile ו-IdentitiesOnly
- המפתח הפרטי שמוצע לשרת. IdentitiesOnly מונע מ-ssh לנסות קודם כל מפתח שב-agent, מה שנגמר ב-'Too many authentication failures' בשרתים עם MaxAuthTries נמוך.
- ProxyJump
- מגיע לשרת דרך שרת אחר (bastion), בהצפנה מקצה לקצה: ה-bastion לא רואה את המפתח שלכם. דורש OpenSSH 7.3 ומעלה.
- LocalForward
- כל עוד החיבור פתוח, פורט במחשב שלכם (רק על localhost) מוביל לכתובת ולפורט כפי שהשרת רואה אותם.
- ServerAliveInterval ו-ServerAliveCountMax
- הודעה כל 60 שניות בתוך הערוץ המוצפן שומרת חיבור שקט פתוח דרך NAT, ו-ssh מתנתק אחרי 3 הודעות בלי תשובה במקום להיתקע.
דוגמה
bastion בכתובת 203.0.113.10 ושרת אפליקציה בכתובת 10.0.0.5 מאחוריו, עם מנהרה ל-n8n בפורט 5678:
# SSH client configuration (ssh_config(5)). ssh keeps the first value it finds for each
# option, so put these blocks above any "Host *" block. Keep this file mode 0600.
# Generated by @anaroq/linux 1.0.0 (ANAROQ). Check with: ssh -G <alias>
# Bastion
Host bastion
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ServerAliveInterval 60
ServerAliveCountMax 3
# App server, through the bastion
Host app
HostName 10.0.0.5
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ProxyJump bastion
LocalForward 5678 127.0.0.1:5678
ServerAliveInterval 60
ServerAliveCountMax 3
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C you@laptop
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
מגבלות
- תצורת לקוח בלבד: הכלי לא משנה את השרת או את הגדרות ה-sshd שלו.
- Ed25519 בלבד. מפתחות RSA לא נוצרים בדפדפן; אם שרת ישן דורש RSA, השתמשו ב-ssh-keygen -t rsa -b 4096.
- למפתח שנוצר בדפדפן אין passphrase עד שמוסיפים אחת עם ssh-keygen -p.
- תבניות Host (* ו-?), בלוקי Match ואפשרויות מלבד אלה שלמעלה לא נכתבים; מוסיפים אותם ידנית מתחת לבלוקים האלה.
- הכלי לא יכול לבדוק שהשרת זמין או שמפתח ה-host שלו הוא המפתח שאתם מצפים לו: משווים את טביעת האצבע בחיבור הראשון.
מתודולוגיה: איך מחושבים המספרים
מקורות
קשורים
הצעד הבא
כלי ציבורי חינמי של אנרוק, חברה שבונה תשתיות מחשוב. מה אנרוק בונה