למד להשתמש ב openssh ב- 10 דקות.

כתריאל טראום
katriel_AT_penguin.org.il

היסטוריית גירסאות
גירסה 1.0 04-07-2007 ליטל ברהום
הומר לפורמאט ויקי
גירסה 1.0 16-12-2002 כתריאל טראום
גירסא ראשונה

מבוא

למי מיועד המדריך

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

מה זה SSH

חבילת ה - SSH, וליתר דיוק היישום (Implementation) החופשי שלה OpenSSH, שעליו מדבר המדריך, היא בעצם מספר כלים לצד השרת והלקוח, שמספקים את התשתית לחיבור מאובטח.
ה- ssh, קיצור ל- Secure Shell, היא תוכנה שמטרתה להחליף קבוצה של כלים ותיקים במערכות Unix לניהול מרחוק, כלים כמו telnet, rsh, rlogin ו rexec. אלו כלי ניהול מרחוק, שעובדים בצורה לא מאובטחת, כלומר שליחת הסיסמא ויתר התעבורה העוקבת, נשלחים כולם בצורה לא מוצפנת, אשר ניתנת לקריאה ע”י מישהו שעלול להאזין לתעבורה.
לקוח ה- ssh יודע לתקשר עם שרת ה- ssh (שנקרא sshd) בצורה מוצפנת, מתחילת החיבור, דרך שלב הזנת הסיסמא, ועד סופו. קיימות 2 גירסאות לפרוטוקול ה-SSH, הגרסאות הן ssh1 ו ssh2. כאשר ל- ssh1, היו בעבר כמה בעיות אבטחה (חלקן די רציניות), והשימוש בו הולך ופוחת. הסבר על השוני ומה משמעות כל פרוטוקל ssh הוא מעבר למדריך זה.
כמו שכבר צויין חבילת OpenSSH, כוללת כמה כלים, עליהם ידובר בהמשך. OpenSSH הופך לסטנדרט בהפצות לינקוס וקוד פתוח אחרות (ואפילו יוניקסים כמו Solaris של Sun). החבילה מפותחת ומתוחזקת ע”י חברים בפרויקט OpenBSD, ואתר הבית שלה יושב בכתובת (איך לא) http://www.openssh.org בגלל הנפוצות שלה, המדריך לא יסביר כיצד להשיג את החבילה.
לקוח ה- ssh יודע להזדהות בכמה צורות מול השרת, הן ע”י שימוש בסיסמא והן ע”י שימוש במפתחות. בחלק הבא אסביר קצת על שיטת המפתח הציבורי/פרטי ואח”כ במשך המדריך יוסבר בדיוק כיצד משתמש בה ה- OpenSSH.

מפתחות ציבוריים ופרטיים

מערכת המפתח הציבורי והפרטי אינה יחודית לחבילת ה- OpenSSH, ונקראת בשפה מקצועית PKI, או
Public Key Interchange.
השיטה מתבססת על מספר אלגוריתמים להצפנה ופענוח של מידע, שמאפשרת למשתמש להשתמש בזוג מפתחות, פרטי וציבורי. כאשר המפתח הפרטי נשאר אצל המשתמש ואסור שיחשף, והמפתח הציבורי ניתן לכל מי שהמשתמש רוצה שיוכל לשלוח אליו (אל המשתמש שלנו) מידע מוצפן. בעזרת המפתח הציבורי, ניתן להצפין מידע בצורה שרק בעזרת המפתח הפרטי, שאותו מחזיק המשתמש, יהיה ניתן לפענח אותו.
דוגמא מופשטת: בוב יצר לעצמו זוג מפתחות, והוא רוצה שאליס תוכל לשלוח לו מידע מוצפן, לכן הוא שולח לה את המפתח הציבורי שלו. אליס, בעזרת תוכנת הצפנה כלשהיא, מצפינה את המידע בעזרת המפתח הציבורי שקיבלה, כעת, רק בוב, שלו המפתח הפרטי התואם למפתח הציבורי, יוכל לפענח את המידע המצופן, ויתרה מכך, בוב יוכל לדעת אם המידע שונה, מכיוון שאלגוריתם ההצפנה/פיענוח רגיש לשינויים במידע המוצפן.
זהו הסבר כללי על סכמת המפתחות הציבוריים/פרטיים, שמשמש אגב בעיקר להצפנת/חתימת דואר אלקטרוני בעזרת GnuPG או PGP, עליהם ניתן לקרוא עוד במבוא ל-GnuPG.
בהתייחסות פרטנית ל- ssh, ניתן ליצור זוג מפתחות, כאשר המפתח הציבורי ישלח אל המחשב שאליו נרצה להתחבר, וכל הזדהות עתידית מול השרת, תעשה ע”י שימוש במפתחות אלו, בתהליך שנקרא challenge-response authentication. בהמשך המדריך יוסבר כיצד ליישם זאת.

הערות המחבר

המדריך נכתב תוך שימוש ב- OpenSSH בגירסא 3.4 שבא עם גירסא 8.0 של RedHat. הפקודות עשויות להיות שונות בגירסאות חדשות או ישנות יותר של החבילה.

שימוש ב- OpenSSH וכליו

רשימת הכלים

להלן רשימת התוכנות החשובות בחבילת ה- OpenSSH, והסבר על מה הן עושות. על שימוש בהן יוסבר בהמשך:

  • sshd - תוכנת השרת, רצה כשרות ברקע ומאזינה ומשרתת בקשות התחברות מצד הלקוח. בד”כ אין הרבה מה לעשות איתה, שכן היא מורצת פעם אחת בעת עליית המחשב.
  • ssh - הלקוח העיקרי, משמש להתחברות לשרות מרוחק והרצת פקודות עליו, כאילו היה שורת פקודה מקומית. מאפשר הרצה חד פעמית של פקודות (ללא שימוש בשורת פקודה על המחשב המרוחק) ועוד.
  • scp - כלי המשמש להעתקת קבצים בין מחשבים בצורה מאובטחת. משתמש בתשתית של ssh, ובעל שיטות עבודה דומות (סיסמאות ומפתחות).
  • sftp - תחליף בטוח לתוכנת ה- ftp המסורתית. שוב, התעבורה מאובטחת בעזרת התשתית המאובטחת של ssh.
  • ssh-agent,ssh-adssh - שני כלים אשר עוזרים בניהול ושימוש של מפתחות הצפנה בזמן חיבור לשרתים.
  • ssh-keygen- כלי שמשמש ליצירת מפתחות הצפנה

הערה: כאשר החבילה מותקנת בעזרת rpm, היא מחולקת ל- 3 חבילות נפרדות:

  1. openssh
  2. openssh-clients
  3. openssh-server

החבילה openssh מכילה חלקים משותפים שצריכות שני החבילות האחרות, openssh-clients מכילה את תוכנות הלקוח ו- openssh-server מכילה את תוכנת השרת. לצורך המדריך נתעלם מזה, אבל דעו שאם רוצים להריץ שרת ssh, דרושות החבילת openssh ו openssh-server, ואם המחשב הוא רק לקוח, אז יספיק רק openssh ו openssh-clients

שימוש ב-ssh

פרק זה יסביר שימוש בכלי המרכזי (מצד הלקוח) של חבילת ה- OpenSSH. הפרק ידון בהתחברות למחשב מרוחק והתהליכים הכרוכים בכך (רובם מתבצעים מאחורי הקלעים) ועל כמה פרמטרים חשובים.
נתחיל בהתחברות פשוטה לשרת, ונתאר את התהליכים. כדי להתחבר לשרת, יש לדעת את כתובתו או שמו, ואת שם המשתמש שאיתו רוצים להתחבר. בהתחברות ראשונה (בעצם בכל התחברות, אבל רק בראשונה רואים את זה), שולח השרת את המפתח שלו, וה- ssh רושם אותו, כך שבהתחברויות הבאות, יוכל ה ssh לוודא שהוא אכן מתחבר לשרת הנכון ע”י השוואת המפתח שנשלח מהשרת למפתח שרשום מקומית. התחברות תראה ותתבצע כך:

[sshdemo@hostA sshdemo]$ ssh sshdemo@hostB.example.com
The authenticity of host 'hostB.home.net (192.168.1.1)' can't be established. 
RSA key fingerprint is 19:2f:0c:4b:fd:40:a8:0f:e4:6b:58:60:11:a8:3e:79. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added'hostB.example.com,192.168.1.1' (RSA) to the list of known hosts. 
sshdemo@hostB.example.com's password: 
sshdemo@hostB sshdemo$  

הכתובת שאליה מתחברים מתחלקת ל- 2, והיא מופרדת ע”י הסימן ”@”: שם המשתמש הוא sshdemo, ושם השרת הוא hostB.example.com. אם שם המשתמש במחשב המרוחק זהה לשם המשתמש המקומי, לא חייבים לציין אותו בשורת הפקודה, וניתן להכניס רק את שם השרת:

[sshdemo@hostA sshdemo]$ ssh hostB.example.com

ניתן לראות כי הלקוח(ssh) זיהה מפתח חדש, ושאל האם להוסיפו לרשימת ה- known hosts, רשימת השרתים הידועים. רשימת המפתחות הידועים מנוהלת ונשמרת בד”כ (אלא אם שונה, אבל ברירת המחדל היא) ב HOME/.ssh/known_hosts$ המשתנה HOME$ מייצג את ספריית הבית שלכם.
עוד ניתן לראות מהפלט כי אנו מתבקשים להזין את סיסמאת המשתמש במחשב אליו אנחנו מתחברים, ושבסופו של תהליך, אנו מקבלים שורת פקודה על המחשב המרוחק, שמאפשרת לנו לבצע פקודות ולהריץ תוכניות ותסריטים (Scripts) על המחשב המרוחק, כאילו היה מקומי. דרך נוספת לשימוש ב- ssh, היא הרצה של פקודה מרוחקת:

[sshdemo@hostA sshdemo]$ ssh sshdemo@hostB.example.com
sshdemo@hostB.example.com's password:
hostB
[sshdemo@hostA sshdemo]$

שוב, אנו רואים כי אנחנו מתבקשים להזין סיסמא כדי להתחבר למחשב המרוחק, אבל השוני לעומת הדוגמא הקודמת, הוא שבמקום לקבל שורת פקודה על המחשב המרוחק, הפקודה שהרצנו בפקודת ההתחברות - hostname (פקודה אשר מראה את שם המחשב), בוצעה על המחשב המרוחק (לראיה, שם המחשב המרוחק הודפס), הפלט שלה הודפס למסך, וקיבלנו שוב את שורת הפקודה של המחשב המקומי.
קצת על מה שהולך מאחורי הקלעים בזמן התחברות. קודם אסייג ואומר שיש הבדל בין התחברות בעזרת ssh1 ל- ssh2, אבל לצורך המדריך, אני אאחד ואפשט אותן, ואתן הסבר כללי שאני מקווה שיקלע לשתי השיטות: כאשר לקוח מתחבר לשרת, קודם כל משווה הלקוח את חתימת השרת לחתימה ששמורה אצלו ברשימת החתימות הידועות (known_hosts), כדי להיות בטוח שאכן מדובר באותו השרת (ייתכן מצב שמישהו ינסה לעמוד בתווך בינכם לבין השרת, במקרה כזה, לא תתקבל חתימת השרת, אלא חתימתו של העומד באמצע, בדיקה זו תזהה התקפה מסוג זה). שלב הבא הוא הסכמה על מפתח משותף, שישמש להצפנת המידע בהמשך החיבור (session key), הסכמה זו מתבצעת בשיטות שונות בכל פרוטוקול SSH, אך בסופה, מתקבל מפתח משותף שיצפין את התעבורה בעזרת פרוטוקול הצפנה סימטרי כדוגמאת 3DES או blowfish (שלא נרחיב עליהם כאן).
אוקי אחרי הסבר זה, נעבור על כמה אופציות שמישות בעת שימוש ב ssh. התחברות לשרת דרך פורט אחר מפורט 22 (פורט ברירת המחדל של ( :ssh

ssh -p 1234 hostB.example.comm 

דרך נוספת לציין את שם המשתמש במחשב המרוחק שאליו נתחבר:

ssh -l sshdemo hostB.example.com

התחבר, ואל תציג הודעות שגיאה או מידע. טוב במיוחד בשביל שימוש בתסריטים (scripts):

ssh -q hostB.example.com

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

ssh -v hostB.example.com

כפה התחברות בעזרת פרוטוקול ssh1 או ssh2:

ssh [-1|-2] hostB.example.com

רשימה מלאה ניתן כמובן למצוא בדף ה-man של ssh:

  • man ssh
  • man sshd

יצירה ושימוש במפתחות

כמו שכבר צויין, ישנן 2 שיטות עיקריות להזדהות מול שרת, בעזרת סיסמאות, או בעזרת זוג מפתחות. בפרק זה נסקור כיצד ליצור מפתח, כיצד להעביר אותו לשרת ולהשתמש בו לזיהוי. כדי ליצור מפתח, נשתמש בתוכנה מתוך החבילת תוכנות, שנקראת ssh-keygen, קיצור ל- ssh key generation. התוכנה מאפשר ליצור כמה סוגי מפתחות, באורכים וסוגים שונים. ישנם 2 סוגי מפתחות, מפתחות RSA ו DSA. הסבר על ההבדלים המדוייקים הוא מחוץ לתחום מדריך זה, לכן נסתפק בהקבלה הכללית כי במפתחות RSA משמשים בעיקר ב- ssh1. ואילו מפתחות DSA, משמשים לפרוטוקול ssh2 (למרות שניתן גם ב RSA, אבל כמו שאמרתי, מפתחות DSA נחשבים פגיעים פחות).\\מדריך זה יראה שימוש במפתחות DSA ו ssh2, מכיוון שבפרוטוקול ssh1 כבר נמצאו בעיות אבטחה, והוא לאט לאט עובר משימוש. לכן, ניצור מפתחות DSA, באורך של 1024bit (המינימום הוא 512, וכל דבר מעל 1024 בד”כ לא משפר את האבטחה ורק מאט ביצועים). כדי ליצור מפתח DSA, באורך 1024bit, נריץ את הפקודה:

[sshdemo@hostA sshdemo]$ ssh-keygen -b 1024 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/sshdemo/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sshdemo/.ssh/id_dsa.
Your public key has been saved in /home/sshdemo/.ssh/id_dsa.pub.
The key fingerprint is:
f4:10:e4:68:f6:a8:f4:3c:74:31:51:50:c6:34:87:dd sshdemo@hostA
[sshdemo@hostA sshdemo]$

הסבר: ssh-keygen יוצר את המפתח, פעולה שעשויה לקחת כמה שניות ומעלה, בתלוי בחוזק המעבד, ושואל אותנו איפה לשמור אותו, בררת המחדל כמו שאפשר לראות היא /home/sshdemo/.ssh/id_dsa המפתח הפרטי ישמר כ id_dsa, והציבורי כ id_dsa.pub. בזמן היצירה אנו מתבקשים גם להכניס סיסמא (Passphrase) למפתח. סיסמא זו תתבקש בכל שימוש במפתח, והיא עוד שיכבת אבטחה (תארו לכם שמישהו משיג את המפתח הפרטי שלכם, ומנסה להתחבר לשרת שבניהולכם, ללא הסיסמא על המפתח, לא תהיה לו בעיה).
לבסוף, אנו מקבלים את טביעת האצבע (Fingerprint) של המפתח.\\כעת שיש לנו זוג מפתחות, נעביר את המפתח הציבורי לשרת שאליו נרצה להתחבר בעזרת המפתח. נשתמש בתוכנה שהשימוש המלא שלא יודגם בפרק הבא, אז רק עיקבו אחרי הפקודה, והיא תוסבר אח”כ. בצד השרת, על המפתחות הציבוריים המאושרים לשימוש ( כלומר המפתחות שבעל המפתח הפרטי שלהם יורשה להתחבר לשרת זה) להימצא בקובץ home/sshdemo/.ssh/authorized_keys/ שוב, מדובר על הצד המרוחק, שאליו אתם רוצים להתחבר בעזרת המפתח. נעתיק את המפתח הציבורי למחשב המרוחק:

[sshdemo@hostA sshdemo]$ cd .ssh
[sshdemo@hostA .ssh]$ ls
id_dsa id_dsa.pub known_hosts
[sshdemo@hostA .ssh]$ scp id_dsa.pub hostB.example.com:~/
sshdemo@hostB.example.com's password:
id_dsa.pub 100% |********************************************************| 603 00:00
[sshdemo@hostA .ssh]$

השתמשנו בפקודה scp (או Secure CoPy) כדי להעתיק את המפתח הציבורי למחשב המרוחק. שלב שני הוא התחברות למחשב המרוחק, והעתקת id_dsa.pub לתוך :authorized_keys

[sshdemo@hostA .ssh]$ ssh sshdemo@hostB.example.com's password:
Last login: Sat Dec 14 16:51:46 2002 from hostA.example.come.com
sshdemo@hostB sshdemo$ mkdir .ssh
sshdemo@hostB sshdemo$ cat id_dsa.pub >> .ssh/authorized_keys
sshdemo@hostB sshdemo$ rm id_dsa.pub
sshdemo@hostB sshdemo$ chmod 644 .ssh/authorized_keys
sshdemo@hostB sshdemo$ chmod 700 .ssh/ 

מה עשינו כאן: התחברנו למחשב המרוחק, hostB, יצרנו את ספריית ה- .ssh (שימו לב ל ”.”', זוהי ספריה מוחבאת). ייתכן והסיפריה כבר קיימת, אם כבר שמתם שם מפתח (אולי משרת אחר), או שכבר התחברת משרת זה, ויש known_hosts). אח”כ השתמשנו בפקודה cat ע”מ להעתיק את התוכן של המפתח הציבורי לתוך קובץ המפתחות המורשים. שימו לב שהשתמשי בהפניית פלט ”«”, שאומר שהתוכן של id_dsa.pub יהיה בהמשך לקובץ authorized_keys, ולא יכתוב עליו, וזאת בגלל שיתכן כי כבר יש מפתחות בקובץ, ולכן לא נרצה להשתמש בהפניית פלט ”<”, שיכתוב על תוכן הקובץ.
מחקנו את הקובץ המקורי, שאין לנו שימוש בו יותר. ולבסוף, ssh דורש שיהיו הרשאות מגבילות על קובץ המפתחות ועל סיפריית ה .ssh, שבלעדיהם, הוא לא ישתמש במפתח, ויבקש סיסמא רגילה מהשתמש.
עכשיו שיש לנו מפתח על השרת, נתחבר שוב, ונראה כי הסיסמא שמתבקשת אינה לשם המשתמש, אלא הסיסמא שבה השתמשנו לחתום את המפתח (שאגב מומלץ כי תהיה שונה מסיסמאת המשתמש שלכם):

[sshdemo@hostA .ssh]$ ssh hostB.example.com
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa':
Last login: Sat Dec 14 21:31:16 2002 from hostA.example.come.com
sshdemo@hostB sshdemo$

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

שימוש ב- scp ו sftp

שני הכלים, scp ו sftp הם כלים להעברת קבצים בין מחשבים בצורה מאובטחת. כאשר scp מחליף בפונקציונאליות אלו את rcp הותיק (והלא מאובטח), ו- sftp בא להחליף את ftp (שגם הוא אינו מאובטח, סיסמא אינה מוצפנת). שני כלים אלו משתמשים בתשתית של ssh, וב- sshd כתוכנה מצד שרת (מבטל את הצורך בעוד שרת ftp על המחשב המרוחק). שימוש בתשתית אומר שכל מה שהוסבר בפרקים קודמים, על מפתחות, סימאות ודרך איבטוח השיחה, תופס. תחביר (כללי) של הפקודה :

scp some_file user@host:other_file
scp user@host:some_file other_file

שימו לב: כתובת המחשב המרוחק שאליו מעתיקים היא user@host, ושo הקובץ (או הסיפריה) המרוחק, מופרד ב- ”:” משם המחשב. נדגים כמה שימושים שימושיים ב- scp. העתקת קובץ לספריית הבית במחשב מרוחק (שימו לב שבגלל שכבר העתקנו את המפתח שלנו, הוא מבקש את סיסמאת המפתח, ולא סיסמאת המשתמש):

[sshdemo@hostA sshdemo]$ ls -lh
total 588K
-rw-rw-r-- 1 sshdemo sshdemo 582K Dec 15 09:55 demo_file ie 
[sshdemo@hostA sshdemo]$ scp demo_file sshdemo@hostB.example.com:~/
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa':
demo_file 100% |********************************************************| 582 KB 00:00

[sshdemo@hostA sshdemo]$ ssh hostB.example.com
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa': 
Last login: Sat Dec 14 21:35:13 2002 from hostA.example.com 
sshdemo@hostB sshdemo$ ls -l
total 588
-rw-rw-r-- 1 sshdemo sshdemo 595968 Dec 15 09:56 demo_file
sshdemo@hostB sshdemo_file$

עוד דוגמא, היא העתקת סיפריה שלמה תחת סיפריית /tmp של המחשב המרוחק (שוב, שימו לב שאני לא משתמש בשם המשתמש במחשב המרוחק, כי אם זה אותו שם המשתמש בשני המחשבים, אין צורך):

[sshdemo@hostA sshdemo]$ ls ~/demo_dir/
demo_file

[sshdemo@hostA sshdemo]$ scp -r demo_dir/ hostB.example.com:/tmp/
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa':
demo_file 100% |********************************************************| 582 KB 00:00

[sshdemo@hostA sshdemo]$ ssh hostB.example.com
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa':
Last login: Sun Dec 15 10:01:38 2002 from hostA.example.com
sshdemo@hostB sshdemo$ ls -l /tmp/demo_dir/
total 588
-rw-rw-r-- 1 sshdemo sshdemo 595968 Dec 15 10:06 demo_file

השוני היחיד מהדוגמא הקודמת, הוא כמובן השימוש ב ”-r”, שאומר ל- scp להעתיק את הספריה, על תוכנה. זהו, התוכנה די פשוטה, ושימושים להעתקת קבצים או ספריות שלמות בצורה מאובטחת, ממחשב למחשב. דוגמא אחרונה, היא העתקה של קובץ ממחשב מרוחק, למחשב המקומי:

[sshdemo@hostA sshdemo]$ ssh hostB.example.com "ls"
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa':
demo_file
[sshdemo@hostA sshdemo]$ scp hostB.example.com:~/demo_file .
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa':
demo_file 100% |********************************************************| 582 KB 00:00
[sshdemo@hostA sshdemo]$

כל מה שרציתם לדעת על scp ועוד, ניתן להשלים מדף ה- man של scp, ע”י הפקודה man scp. התוכנה הבאה היא sftp, תחליף מאובטח ל- ftp. כמובן שהוא מצריך שרות ssh שירוץ על המחשב המרוחק, ולא יעבוד מול שרת ה- ftp הרגיל. היתרון של sftp על scp (שהרי שניהם מבצעים את אותה הפעולה) הוא ש- sftp היא איטראקטיבית, בדומה ל- ftp, ומאפשר העתקת קובץ יחיד מתוך ספריה וכדומה. דוגמא להתחברות לשרת מרוחק:

[sshdemo@hostA sshdemo]$ sftp hostB.example.com
Connecting to hostB.example.com...
Enter passphrase for key '/home/sshdemo/.ssh/id_dsa':
sftp> ls
drwx------ 3 sshdemo sshdemo 4096 Dec 15 09:56 .
drwxr-xr-x 11 root root 4096 Dec 13 00:10 ..
-rw-r--r-- 1 sshdemo sshdemo 24 Dec 13 00:10 .bash_logout
-rw-r--r-- 1 sshdemo sshdemo 191 Dec 13 00:10 .bash_profile
-rw-r--r-- 1 sshdemo sshdemo 124 Dec 13 00:10 .bashrc
-rw------- 1 sshdemo sshdemo 469 Dec 15 10:34 .bash_history
-rw-rw-r-- 1 sshdemo sshdemo 595968 Dec 15 09:56 demo_file
drwx------ 2 sshdemo sshdemo 4096 Dec 14 21:31 .ssh
sftp>

אחרי שהתחברנו, ניתן להוריד קבצים אל המחשב המקומי:

sftp> get demo_file
Fetching /home/sshdemo/demo_file to demo_file

זהו, הקובץ הועתק למחשב המקומי. לכל מי שמכיר את השימוש ב- ftp, השימוש ב- sftp יהיה נוח (ומאובטח).
עוד עזרה ומידע אפשר לקבל ע”י הקשת הפקודה “help” בשורת הפקודה של sftp, או ע”י דף ה- man שלה (man sftp)

שימוש ב- ssh-agent

2 הכלים האחרונים שנסקור, עובדים ביחד, ובאים לפשט את השימוש במפתחות וב- ssh בכלל. הכלים הם ssh-agent ו ssh-add. התוכנה ssh-agent, היא כשמה, סוכן שרץ ברקע ותפקידו לנהל את המפתחות ואת ההזדהות בשבילך, בזמן התחברות מכל אחד מהכלים בחבילה (ssh, scp, sftp). הרעיון הוא פשוט, אותו סוכן רץ ברקע, לאחר שאמרנו איזה מפתחות לנהל, והקלדנו את הסיסמא שלהם (של המפתחות), הוא יענה אוטומאטית על כל בקשת סיסמא מאחד מכלי ה ssh, אפקטיבית, זה אומר שתצטרכו להכניס את סיסמאת המפתח רק פעם אחת, ואח”כ, כל ההתחברויות יהיו כאילו ללא סיסמא (למרות שהמפתח עדיין מוגן בסיסמא). השלבים לביצוע הם די פשוטים. קודם נשים את התסריט (script) הבא, שיריץ את ssh-agent בזמן הכניסה למערכת:

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

את הסקריפט מומלץ לשים בסוף הקובץ שמורץ ע”י המעטפת (shell) שלכם. במדריך זה נסתמך על כך שהמעטפת שלכם היא Bash, מכיוון שהיא המעטפת הנפוצה ברוב ההפצות החדשות כיום. במעטפת זו, קובץ ההרצה הוא: $HOME/.bash_profile ערכו אותו בעזרת העורך המועדף עליכם, ושימו את התסריט בסוף הקובץ. שימו לב: התסיט המסופק הוא לשם הנוחות בלבד, ניתן להריץ את הפקודה

$ eval `ssh-agent`

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

$ kill $SSH_AGENT_PID

בסוף הקובץ: HOME/.bash_logout$

אחרי שהכנסנו את שני התסריטים לקבצים המצויינים, כאשר נעשה login למערכת, נראה את השורה הבאה בד”כ:

Agent pid 4906

פלט זה אומר לנו כי הסוכן הורץ, ואת מספר התהליך שלו (pid), ניתן להריץ את הפקודה הבאה כדי לברר שהוא באמת רץ:

[sshdemo@crypt sshdemo]$ ps -ax | grep ssh-agent 
4906 ? S 0:00 /usr/bin/ssh-agent- s -s 

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

[sshdemo@hostA sshdemo]$ ssh-add ~/.ssh/id_dsa
Enter passphrase for /home/sshdemo/.ssh/id_dsa:
Identity added: /home/sshdemo/.ssh/id_dsa (/home/sshdemo/.ssh/id_dsa)

אבל במקרה שלנו, מכיוון שיש רק מפתח אחד, אפשר להשמיט את קובץ המפתח הספציפי, ורק להריץ:

[sshdemo@hostA sshdemo]$ ssh-add
Enter passphrase for /home/sshdemo/.ssh/id_dsa:
Identity added: /home/sshdemo/.ssh/id_dsa (/home/sshdemo/.ssh/id_dsa)

כמו שאתם רואים, התוצאות זהות. עכשיו שיש לנן את הסוכן רץ ברקע, ומנהל את המפתח שלנו, התחברות בעזרת שרותי ssh, תהיה חלקה יותר:

[sshdemo@crypt sshdemo]$ ssh hostB.example.com
Last login: Sun Dec 15 11:28:28 2002 from hostA.example.com
sshdemo@hostB sshdemo$

[sshdemo@hostA sshdemo]$ scp demo_file hostB.example.com:~/
demo_file 100% |*******************************************************| 582 KB 00:00
[sshdemo@hostA sshdemo]$

[katriel@hostA katriel]$ sftp hostB.example.com
Connecting to hostB.example.com...
sftp>

אפשר לראות, כי לא נתבקשנו להזין סיסמא כלל באף אחד מהמקרים. כמה הערות: ssh-agent עובד בכל login בנפרד, כלומר אם עשיתם login 5 פעמים למערכת המקומית, ואתם עובדים על 5 חלונות במקביל, כל ssh-agent יעבוד רק על המופע של המעטפת שממנו הוא הורץ (לכן יכול לעזור להכניס אותו ל .bash_profile)

קצת על sshd

sshd היא תוכנת צד השרת של חבילת OpenSSH. זהו כלי מורכב, שמשרת חיבורים מ ssh, scp ו sftp. השרת צריך סט מפתחות משלו, שאותם הוא שולח ללקוח שמתחבר (החתימה שנרשמת ב known_hosts). את המפתח הזה (לרוב) אין צורך ליצור ידנית, הוא נוצר בזמן ריצה ראשונה של השרות, ברוב ההפצות כיום. קובץ הקונפיגורציה שלו יושב בד”כ ב /etc/ssh/sshd_config או /etc/sshd/sshd_config

כמה אופציות מעניינות מהקובץ. חיבורים באיזה פרוטוקול לאפשר. אם לא עובדים עם לקוח מחלונות (שלרוב אינם תומכים ב ssh2 משום מה), עדיף להוריד את ssh1) Protocol 2, האם לאפשר ל- root גישה מרוחקת

PermitRootLogin [yes|no

האם לאפשר הזדהות בעזרת סיסמא (או רק מפתחות), והאם לאפשר סיסמאות ריקות

PasswordAuthentication [yes|no]
PermitEmptyPasswords [yes|no]

אלו רק כמה דברים שאפשר לשנות ע”מ להתאים את השרת לצרכיכם. בד”כ אין צורך לשנות כלום, ורצוי לדעת מה עושים לפני שמשנים. כדי להפעיל/לכבות/לראות מצב קיים של השרות, נשתמש בפקודות האלו:

/etc/init.d/sshd start
/etc/init.d/sshd stop
/etc/init.d/sshd status 

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

סיכום

לקוחות ssh למע' הפעלה אחרות

לקוחות ssh, scp, sftp ואחרים למערכות הפעלה אחרות, ניתן למצוא דרך האתר http://www.freessh.org/ שמרכז בתוכו קישורים רבים, גם בנושא ssh וגם בנושא לקוחות ssh.

סוף דבר

ובכן, כמו שראינו, חבילת ה- OpenSSH והכלים שבה, מאפשרים ניהול מרוחק של מחשבים בצורה מאובטחת וקלה.

עוד חומר על OpenSSH ניתן לקרוא באתר הבית http://www.openssh.org אני מקווה שהמדריך אינו מתקדם מידי, ולא יסבך אנשים. הערות הארות ודיברי השמצה, שילחו ל katriel_AT_penguin.org.il

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

מדריכים/למד_להשתמש_ב_openssh_ב-_10_דקות.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0