גישה מאובטחת לתחנות לינוקס מרוחקות

לכל מערכת הפעלה יש את הכלים שלה לגישה מרחוק. בחלונות יש את ה־WMI שנגיש דרך כלי ה־Computer Management למשל, את rconsole (זמין ב־Windows Resource Kits) שמספק שרותי מסוף מרוחק, את SMB שמאפשר גישה לתיקיות משותפות מרוחקות, ובלינוקס יש את SSH.

SSH, או ליתר דיוק OpenSSH הוא כלי פשוט שמספק שרותי מסוף בדומה ל־telnet שהיה בשימוש בעבר, אך בצורה מאובטחת. השימוש העיקרי של התוכנה הוא לניהול תחנות מרוחקות באמצעות שורת הפקודה, אך התוכנה חזקה ומאפשרת מספר דברים נוספים.

התקנה

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

$ whereis sshd
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz

התחברות לתחנה מרוחקת

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

במידה ונרצה להתחבר עם שם המשתמש הנוכחי, יש צורך לציין רק את שם השרת או כתובתו, ובמידה ונרצה להתחבר בשם משתמש אחר נציין את שמו בתבנית של username@servername.example.net.

$ ssh tomer.example.net
The authenticity of host 'tomer.example.net (192.168.1.1)' can't be established.
RSA key fingerprint is 1f:b9:83:2c:12:bf:98:0d:aa:5c:0f:a8:bb:29:70:d8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'tomer.example.net' (RSA) to the list of known hosts.
tomer@tomer.example.net's password:
tomer@tomer.example.net$

העברת קבצים

SSH אמנם מיועד לספק שרותי מסוף, אך התוכנה מאפשרת הרבה יותר מכך. scp ו־sftp אלו הן שתי תוכנות שמתלבשות על חיבור ה־ssh ומאפשרות העברת קבצים בין המחשב המקומי לשרת המרוחק.

scp

scp היא פקודה בתצורה דומה לשל פקודת העתקת הקבצים cp, עם הבדל פעוט – היא יכולה להעביר את הקבצים מהמחשב המקומי לשרת.

שליחת קובץ לשרת המרוחק:
$ scp dummyfile.txt tomer@tomer.example.net:/home/tomer/temp/
tomer@tomer.example.net's password:
dummyfile.txt 100% 0 0.0KB/s 00:00

משיכת קובץ למחשב המקומי ושינוי שמו:
$ scp tomer.example.net:~/temp/dummyfile.txt new.txt
tomer@tomer.example.net's password:
dummyfile.txt 100% 0 0.0KB/s 00:00

sftp

sftp היא תוכנה דומה לתוכנת לקוח ftp רגילה, שלמעשה רוכבת על־גבי התשתית המאובטחת של ssh. הפקודות דומות לאלו המשמשות לעבודה מול שרתי ftp, ולהבדיל מ־scp כאן ערוץ התקשורת נשאר פתוח לאחר ביצוע הפקודה ומתאים יותר להעברת מספר קבצים ללא הרמת תקשורת נפרדת לכל פעולה.

$ sftp tomer.example.net
Connecting to tomer.example.net...
tomer@tomer.example.net's password:
sftp> cd temp
sftp> put dummyfile.txt
Uploading dummyfile.txt to /home/tomer/temp/dummyfile.txt
dummyfile.txt 100% 0 0.0KB/s 00:00
sftp> put dummyfile.txt anotherfile.txt
Uploading dummyfile.txt to /home/tomer/temp/anotherfile.txt
dummyfile.txt 100% 0 0.0KB/s 00:00
sftp> get anotherfile.txt yetanotherfile.txt
Fetching /home/tomer/temp/anotherfile.txt to yetanotherfile.txt
sftp> exit
$

הפעלת פקודות מרחוק

לעיתים אנו מעוניינים להריץ פקודות באופן אוטומטי מרחוק, לצרכי תחזוקה או שימוש שוטף. ssh יכול לעשות זאת בקלות:
$ ssh tomer@tomer.example.net fortune
tomer@tomer.example.net's password:
Your present plans will be successful.

(fortune היא תוכנה שמציגה טקסט אקראי בכל הרצה)

הזדהות באמצעות מפתח ציבורי

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

יצירת מפתחות אישיים חדשים

כדי להשתמש בתעודות דיגיטליות של SSH יש צורך ליצור קובץ מפתחות. ניתן לעשות זאת באמצעות הפקודה ssh-keygen. חשוב מאד לעשות זאת רק בפעם הראשונה, מאחר ואחרת התוכנה תמחק את קובץ המפתחות הקיים ובכך נאבד את יכולת ההתקשרות מול שרתים אחרים.
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tomer/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tomer/.ssh/id_rsa.
Your public key has been saved in /home/tomer/.ssh/id_rsa.pub.
The key fingerprint is:
d2:b8:0f:7d:c2:f7:53:85:21:c0:4b:00:70:75:ef:fa tomer@home.example.net

שימוש במפתחות

הפקודה ssh-keygen יוצרת שני קבצים, id_rsa ו־id_rsa.pub (או id_dsa/id_dsa.pub במידה והשתמשנו באלגוריתם dsa). יש לשמור על קבצים אלו במקום בטוח, שכן הם יכולים לאפשר לאחרים לגשת לשרתים אליהם יש לנו גישה, ומחיקתם תגרום לאיבוד יכולת הגישה לשרתים.

כדי להוסיף אישור הזדהות לשרת, יש צורך להעתיק את קובץ המפתחות הציבורי לשרת לתוך הקובץ ~/.ssh/authorized_keys בשרת.
$ scp id_rsa.pub tomer.example.net:/home/tomer/.ssh/authorized_keys
tomer@tomer.example.net's password:
id_rsa.pub 100% 404 0.4KB/s 00:00

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

tomer@tomer:~/.ssh$ ssh tomer@tomer.example.net
Linux tomer.example.net 2.6.17-11-386 #2 Thu Feb 1 19:50:13 UTC 2007 i686
tomer@tomer.example.net:~$

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

שימוש ב־SSH לקבלת שירותים מרשת מאובטחת

SSH יכול לשמש גם כפתרון גישה לשרתים שאינם מאובטחים. נניח כי במקום העבודה קיים שרת דוא"ל מסוג POP3 שאיננו נגיש מהרשת החצונית, ושרת נפרד עם שירות SSH שניתן לניהול מרחוק. ניתן באמצעות SSH להקים ערוץ תקשורת מאובטח בין המחשב שלנו לשרת ה־SSH, ודרכו לעבור לשרת הדואר הפנימי.

$ ssh -L 1234:mail.example.net tomer@shell.example.net
בצורה כזו, נוכל להתחבר באמצעות לקוח דוא"ל סטנדרטי לשרת דוא"ל על־גבי ערוץ תקשורת מאובטח בנינו לבין הרשת הארגונית, כאשר פורט 1234 במחשב שלנו (localhost:1234) למעשה מקושר לשרת הדואר המרוחק. גישה לפורט המקושר (1234 במקרה שלנו) תהיה זמינה רק למחשב המקומי כל עוד לא צויין הפרמטר ‎-g‏.

שימוש שכיח לקישורי SSH מאובטחים הוא להשתמש בתוכנת vnc לצורך קבלת שרותי עבודה מרחוק, והצפנת התעבורה באמצעות ssh.

לקוחות ssh נוספים

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

  • PuTTY היא תוכנה חלונאית שיכולה להתחבר לשרתי ssh (וגם כוללת תוכנת telnet אם מישהו באמת צריך), וכוללת גם מספר תוכנות מבוססות שורת הפקודה נוספות. לתוכנה קיים היסב גם ללינוקס, אך אין יתרון ממשי ללקוח זה בלינוקס.
  • WinSCP היא תוכנה גרפית לגישה לקבצים מרוחקים באמצעות scp/sftp. חלונות בלבד.
  • במערכת לינוקס כמעט לכל סביבת עבודה קיימות יכולות גישה לשרתי SSH ללא התקנת תוספות מיוחדות. למשל, לפתיחת קובץ לעריכה עם gedit כל שנתבקש לעשות הוא לציין את מיקום הקובץ המרוחק בפרוטוקול ssh.$ gedit ssh://tomer:/tmp/dummyfile.txt

3 תגובות בנושא “גישה מאובטחת לתחנות לינוקס מרוחקות”

  1. פינגבאק: שווה קריאה
  2. מאמר נאה, שפה שווה לכל נפש ולא רק לכל גיק.
    מאחר ולאחרונה אני קצת משחק עם vnc אשמח למאמר המשך על תיעול vnc דרך ssh בין מחשבים עם מערכות הפעלה שונות (unix מול win32).

השאר תגובה