כיצד להשתמש ב-SFTP כדי להעביר קבצים בצורה מאובטחת עם שרת רחוק

הקדמה

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

SFTP, המורכב מהקיצור של Secure File Transfer Protocol, הוא פרוטוקול נפרד המובנה בתוך SSH שיכול ליישם פקודות FTP דרך חיבור מאובטח. בדרך כלל, הוא יכול לשמש כהחלפה ישירה בכל מקום שבו עדיין נדרש שרת FTP.

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

אף על פי ש-SFTP מוטמע בכלים גרפיים רבים, מדריך זה ידגים איך להשתמש בו דרך ממשק השורת פקודה האינטרקטיבי שלו.

איך להתחבר ב-SFTP

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

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

אנא ראה מדריך זה להגדרת מפתחות SSH כדי לגשת לשרת שלך אם עדיין לא עשית זאת.

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

  1. ssh sammy@your_server_ip_or_remote_hostname

אם זה עובד, צא באמצעות הקלדת:

  1. exit

כעת נוכל להקים ישיבת SFTP על ידי הנפקת הפקודה הבאה:

  1. sftp sammy@your_server_ip_or_remote_hostname

תתחבר למערכת המרוחקת והמזמינה שלך והקריאה שלך תשתנה למזהה SFTP.

אם אתה עובד על פורט SSH מותאם אישית (לא פורט ברירת המחדל 22), אז תוכל לפתוח ישיבת SFTP כך:

  1. sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

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

קבלת עזרה ב-SFTP

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

  1. help

או

  1. ?

זה יציג רשימה של הפקודות הזמינות:

Output
Available commands: bye Quit sftp cd path Change remote directory to 'path' chgrp grp path Change group of file 'path' to 'grp' chmod mode path Change permissions of file 'path' to 'mode' chown own path Change owner of file 'path' to 'own' df [-hi] [path] Display statistics for current directory or filesystem containing 'path' exit Quit sftp get [-Ppr] remote [local] Download file help Display this help text lcd path Change local directory to 'path' . . .

נבחן חלק מהפקודות שתראו בסעיפים הבאים.

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

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

  1. pwd
Output
Remote working directory: /home/demouser

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

  1. ls
Output
Summary.txt info.html temp.txt testDirectory

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

  1. ls -la
Output
drwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 . drwxr-xr-x 3 root root 4096 Aug 13 15:02 .. -rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history -rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout -rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache -rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile . . .

כדי להגיע לתיקיה אחרת, ניתן להוציא את הפקודה הבאה:

  1. cd testDirectory

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

כל הפקודות שדוברו עד כה יש להן מקבילות מקומיות. אנו יכולים להדפיס את תיקית העבודה המקומית:

  1. lpwd
Output
Local working directory: /Users/demouser

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

  1. lls
Output
Desktop local.txt test.html Documents analysis.rtf zebra.html

אנו יכולים גם לשנות את התיקיה שברצוננו לפעול איתה במערכת המקומית:

  1. lcd Desktop

העברת קבצים באמצעות SFTP

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

  1. get remoteFile
Output
Fetching /home/demouser/remoteFile to remoteFile /home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01

כפי שניתן לראות, בברירת מחדל, פקודת ה- get מורידה קובץ מרוחק לקובץ באותו השם במערכת הקבצים המקומית.

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

  1. get remoteFile localFile

פקודת ה- get מקבלת גם דגלי אפשרויות. לדוגמה, נוכל להעתיק ספרייה וכל התוכן שלה על ידי ציון האפשרות לרקורסיה:

  1. get -r someDirectory

נוכל להודיע ל-SFTP לשמור על הרשאות המתאימות ועל זמני גישה על ידי שימוש בדגל -P או -p:

  1. get -Pr someDirectory

העברת קבצים מקומיים למערכת המרוחקת

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

  1. put localFile
Output
Uploading localFile to /home/demouser/localFile localFile 100% 7607 7.4KB/s 00:00

אותם דגלים שעובדים עם get מתייחסים גם ל- put. לכן כדי להעתיק כל הספרייה המקומית, תוכל להריץ put -r:

  1. put -r localDirectory

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

  1. df -h
Output
Size Used Avail (root) %Capacity 19.9GB 1016MB 17.9GB 18.9GB 4%

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

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

  1. !

ואז

  1. df -h
Output
Filesystem Size Used Avail Capacity Mounted on /dev/disk0s2 595Gi 52Gi 544Gi 9% / devfs 181Ki 181Ki 0Bi 100% /dev map -hosts 0Bi 0Bi 0Bi 100% /net map auto_home 0Bi 0Bi 0Bi 100% /home

כל פקודה מקומית נוספת תעבוד כצפוי. כדי לחזור להפעלת ה-SFTP שלך, הקלד:

  1. exit

כעת אתה אמור לראות את הפרומט SFTP חוזר.

פעולות פשוטות עם קבצים באמצעות SFTP

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

  1. chown userID file

שים לב שבניגוד לפקודת המערכת chmod, הפקודה של SFTP לא מקבלת שמות משתמשים, אלא במקום זאת משתמשת במזהים משתמש (UIDs). למרבה המזל, אין דרך מובנית לידע את ה-UID המתאים מתוך ממשק ה-SFTP.

כפתרון מצומצם, ניתן לקרוא מקובץ /etc/passwd, שמשווה בין שמות משתמשים ו-UIDs ברוב הסביבות של Linux:

  1. get /etc/passwd
  2. !less passwd
Output
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh . . .

שימו לב כיצד במקום לתת את הפקודה ! לבד, השתמשנו בה כקידומת לפקודת מעטפת מקומית. זה עובד כדי להריץ כל פקודה זמינה במכונה המקומית שלנו ויכול להיות בשימוש עם הפקודה המקומית df שלפני כן.

הUID יהיה בעמודה השלישית של הקובץ, כפי שמופרד על ידי תווי נקודתיים.

באופן דומה, אנו יכולים לשנות את בעל הקבוצה של קובץ עם:

  1. chgrp groupID file

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

  1. get /etc/group
  2. !less group
Output
root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: . . .

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

הפקודת SFTP chmod עובדת כרגיל על מערכת הקבצים המרוחקת:

  1. chmod 777 publicFile
Output
Changing mode on /home/demouser/publicFile

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

ניתן לעשות זאת עם הפקודה lumask:

  1. lumask 022
Output
Local umask: 022

כעת כל הקבצים הרגילים שיורדים (כל עוד אין שימוש בדגל -p) יקבלו הרשאות של 644.

SFTP מאפשר גם ליצור ספריות במערכות המקומיות והמרוחקות עם lmkdir וmkdir בהתאמה.

שאר פקודות הקובץ מיועדות רק למערכת הקבצים המרוחקת:

  1. ln
  2. rm
  3. rmdir

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

  1. !

או להפעיל פקודה יחידה במערכת המקומית על ידי קידוד הפקודה ב־! כך:

  1. !chmod 644 somefile

כאשר תסיימו את ההפעלה של הסשן SFTP, השתמשו ב־exit או ב־bye כדי לסגור את החיבור.

  1. bye

מסקנה

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

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

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server