अधिकांश लोग फ़ाइलज़िला, विनएससीपी या अन्य FTP प्रोग्राम जैसे उपयोगिताओं को पसंद करते हैं जब उन्हें लिनक्स सर्वर से फ़ाइलें ट्रांसफर करने की आवश्यकता होती है। SFTP मूल FTP प्रोटोकॉल का एक सुरक्षित विकल्प है। यह अपने असुरक्षित संस्करण के समान कार्य करता है, लेकिन एन्क्रिप्शन की एक अतिरिक्त परत के साथ। इसे पूरा करने के लिए, यह SSH प्रोटोकॉल का उपयोग करता है जो इसे एन्क्रिप्शन क्षमताएं प्रदान करता है। अपने लिनक्स सिस्टम पर SFTP सर्वर सेट करना कई चरणों को शामिल करता है, जिन्हें हम यहां प्रदर्शित करते हैं।
SFTP क्या है?
SFTP (सिक्योर फ़ाइल ट्रांसफर प्रोटोकॉल) क्लाइंट से सर्वर पर फ़ाइलें ट्रांसफर करने के लिए एक नेटवर्क प्रोटोकॉल है। FTP (फ़ाइल ट्रांसफर प्रोटोकॉल) के विपरीत, SFTP डेटा को एन्क्रिप्ट करने के लिए SSH (सिक्योर शेल) प्रोटोकॉल का उपयोग करता है। इसे कंप्यूटर वैज्ञानिकों, तातु यलोनेन और सामी लेहटिनन द्वारा विकसित किया गया था, जो 1990 के दशक में SSH प्रोटोकॉल के विकास के लिए भी जिम्मेदार हैं। हालांकि, आधुनिक संस्करण IETF (इंटरनेट इंजीनियरिंग टास्क फोर्स) द्वारा विकसित किया गया है।
इसे एक रिमोट फ़ाइल सिस्टम प्रोटोकॉल के रूप में वर्णित किया जा सकता है, भले ही इसका नाम सुझाव देता है कि यह केवल फ़ाइल ट्रांसफर ऑपरेशन करता है। क्लाइंट से रिसीविंग सर्वर पर SFTP का उपयोग करके फ़ाइल भेजते समय, डेटा गंतव्य पर भेजे जाने से पहले एन्क्रिप्ट किया जाता है। यदि भेजा जा रहा डेटा "मैन-इन-द-मिडल" द्वारा इंटरसेप्ट किया जाता है, तो इसे इस थर्ड पार्टी द्वारा आसानी से डिक्रिप्ट नहीं किया जा सकता।
SSH और OpenSSH सर्वर इंस्टॉल करना
हम SSH और OpenSSH सर्वर इंस्टॉल करके SFTP सर्वर सेट करने की प्रक्रिया शुरू कर रहे हैं।
अधिकांश लिनक्स इंस्टॉलेशन में डिफ़ॉल्ट रूप से SSH पहले से इंस्टॉल होता है, लेकिन यदि आपके सिस्टम में यह नहीं है, तो आप एडवांस्ड पैकेजिंग टूल के apt कमांड का उपयोग करके इसे इंस्टॉल कर सकते हैं:
sudo apt install ssh
SSH इंस्टॉल करने के बाद, आप ssh कमांड को -V फ्लैग के साथ चलाकर इसका संस्करण देख सकते हैं:
ssh -V
आप डेबियन और उबंटू सिस्टम पर, उदाहरण के लिए, apt कमांड का उपयोग करके OpenSSH सर्वर इंस्टॉल कर सकते हैं:
sudo apt install openssh-server
आप आर्क लिनक्स पर pacman कमांड का उपयोग करके भी ऐसा ही कर सकते हैं:
sudo pacman -S openssh
SFTP के लिए उपयोगकर्ता, समूह और डायरेक्टरी बनाना
यह एक सामान्य सिफारिश है कि लिनक्स पर विभिन्न सेवाओं को अपने स्वयं के उपयोगकर्ताओं, समूहों और डायरेक्टरी का उपयोग करना चाहिए।
groupadd कमांड का उपयोग करके SFTP के उपयोगकर्ताओं के लिए एक समूह बनाकर शुरू करें:
sudo groupadd sftp_group
useradd कमांड और इसके -g फ्लैग का उपयोग करके एक उपयोगकर्ता बनाएं और इसे बनाए गए समूह में जोड़ें, जिसका उपयोग उपयोगकर्ता के हिस्से वाले समूह को निर्दिष्ट करने के लिए किया जाता है:
sudo useradd -g sftp_group sftp_user
उपयोगकर्ता बनाने के बाद, passwd कमांड का उपयोग करके इसे एक पासवर्ड असाइन करें:
sudo passwd sftp_user
नव निर्मित उपयोगकर्ता के लिए डिफ़ॉल्ट डायरेक्टरी बनाएं:
sudo mkdir -p /data/sftp_user/uploaded_files
chown कमांड का उपयोग करके डायरेक्टरी को आवश्यक अनुमतियां दें:
sudo chown -R root:sftp_group /data/sftp_user sudo chown -R sftp_user:sftp_group /data/sftp_user/uploaded_files
SSH सर्वर कॉन्फ़िगर करना
SFTP सर्वर सेट करने के लिए अगला चरण उस SSH सर्वर को कॉन्फ़िगर करना है जिसका यह उपयोग करेगा।
/etc/ssh/ में पाई जाने वाली "sshd_config" फ़ाइल को संपादित करें ताकि उपयोगकर्ता सर्वर से कनेक्ट करते समय SSH के शेल के बजाय SFTP शेल का उपयोग करे।
आप कई लिनक्स इंस्टॉलेशन पर डिफ़ॉल्ट रूप से पाए जाने वाले आमतौर पर उपयोग किए जाने वाले नैनो एडिटर का उपयोग करके फ़ाइल को आसानी से संपादित कर सकते हैं:
sudo nano /etc/ssh/sshd_config
फ़ाइल के निचले भाग को ढूंढें और निम्न जोड़ें:
Match Group sftp_group ChrootDirectory /data/%u ForceCommand internal-sftp
SSH सेवा को पुनरारंभ करें:
sudo systemctl restart sshd
(वैकल्पिक) SFTP पोर्ट बदलना
यदि आप SFTP सर्वर द्वारा उपयोग किए जा रहे पोर्ट को 22 के डिफ़ॉल्ट मान से अपने चुने हुए विकल्प में बदलना चाहते हैं, तो आपको एक बार फिर "sshd_config" फ़ाइल को संपादित करना होगा।
नैनो एडिटर का उपयोग करके फ़ाइल को फिर से संपादित करें:
sudo nano /etc/ssh/sshd_config
फ़ाइल में डिफ़ॉल्ट पोर्ट मान 22 के साथ कमेंट की गई एक लाइन ढूंढें:
#Port 22
आप लाइन को कमेंट करने के लिए उपयोग किए गए हैश (#) चिह्न को हटा सकते हैं और अपने पोर्ट मान की पसंद जोड़ सकते हैं। मेरे मामले में, मैं मान को 1111 में बदल रहा हूं:
Port 1111
अब बस फ़ाइल सेव करें
और सर्वर को पुनरारंभ करें:
sudo systemctl restart sshd
सर्वर में लॉग इन करना और उपयोग करना
सर्वर इंस्टॉल और कॉन्फ़िगर होने के साथ, यह उपयोग के लिए तैयार है। आप SSH द्वारा प्रदान किए गए एन्क्रिप्टेड सत्र के साथ आसानी से फ़ाइलें अपलोड और डाउनलोड कर सकते हैं।
लॉग इन करने से पहले, प्रदान किए गए मैनुअल को देखना कोई बुरी बात नहीं होगी:
sftp -h
निम्न प्रारूप में उपयोगकर्ता नाम और सर्वर IP या होस्टनाम प्रदान करके सर्वर में लॉग इन करें:
sftp USER@HOST
इसके अलावा, -P फ्लैग का उपयोग करके अपने SFTP सर्वर द्वारा उपयोग किए जा रहे पोर्ट (डिफ़ॉल्ट 22 है) को निर्दिष्ट करें:
sftp USER@HOST -P <PORT>
जब आप लॉग इन करते हैं, तो आपका स्वागत SFTP शेल से किया जाता है।
help टाइप करके मैनुअल देखें।
फ़ाइलें डाउनलोड करना
फ़ाइल डाउनलोड करने के लिए:
get /path/to/file/on/server
उदाहरण:
get /bin/ls
यह आपकी वर्तमान डायरेक्टरी में डाउनलोड होगा - वह जिसे आप स्थानीय रूप से सर्वर में लॉग इन करने से पहले थे। किसी विशिष्ट स्थानीय डायरेक्टरी में डाउनलोड करने के लिए:
get /path/to/file/on/server /path/to/local/folder
डायरेक्टरी कॉपी करने के लिए, आपको कमांड में -r पैरामीटर जोड़ना होगा, जो रिकर्सिव के लिए खड़ा है।
get -r /bin /home/username/Desktop/bin
स्थानीय रूप से आपके द्वारा बनाई जाने वाली नई डायरेक्टरी के लिए एक नाम जोड़ना याद रखें, जैसे इस मामले में "/home/username/Desktop/bin"। यदि आप get -r /bin /home/username/Desktop का उपयोग करते हैं, तो फ़ाइलें सीधे डेस्कटॉप पर कॉपी हो जाएंगी। ध्यान दें कि यह फ़ाइलें हैं जो कॉपी की जाती हैं न कि डायरेक्टरी itself।
फ़ाइलें अपलोड करना
फ़ाइलों या डायरेक्टरी को अपलोड करना उन्हीं सिद्धांतों का पालन करता है। एकमात्र अपवाद यह है कि पथ उलटे हैं, अर्थात आप पहले स्थानीय फ़ाइल/डायरेक्टरी निर्दिष्ट करते हैं, फिर रिमोट पथ।
शुरू करने के लिए, put कमांड का उपयोग करके सर्वर पर फ़ाइलें अपलोड करें:
put /path/to/local/content /path/to/remote/location
डायरेक्टरी अपलोड करते समय (रिकर्सिव), याद रखें कि पिछले अनुभाग का वही नियम लागू होता है: यह वास्तव में डायरेक्टरी में फ़ाइलें हैं जो कॉपी की जाती हैं न कि डायरेक्टरी itself। उन फ़ाइलों को कॉपी करने के लिए आपके द्वारा बनाई जाने वाली डायरेक्टरी के लिए एक नया नाम निर्दिष्ट करें।
put -r /home/username/Desktop/bin bin
यह रिमोट साइड पर "bin" नामक एक नई डायरेक्टरी बनाता है।
ट्रांसफर रिज्यूम करें और स्पेस वाले पथ का उपयोग करें
जब आप एक बड़ी फ़ाइल ट्रांसफर करते हैं जो बाधित हो जाती है, तो आप पिछले कमांड को reput और reget से बदलकर रिज्यूम कर सकते हैं। बस सुनिश्चित करें कि आप वही पथ उपयोग करते हैं जो आपने पिछली बार उपयोग किए थे ताकि स्रोत और गंतव्य बिल्कुल मेल खाएं।
reget /path/to/file/on/server /path/to/local/file reput /path/to/local/file /path/to/file/on/server
डायरेक्टरी ट्रांसफर रिज्यूम करने के लिए, बस -r पैरामीटर जोड़ें:
reput -r /home/username/Desktop/bin bin
यदि फ़ाइल का पथ स्पेस रखता है, तो इसे उद्धरण चिह्नों के भीतर रखें:
put "/home/username/My Documents/Files"
अन्य उपयोग
आप ls कमांड का उपयोग करके फ़ाइलों और डायरेक्टरी को सूचीबद्ध कर सकते हैं:
ls -l
फ़ाइलों की अनुमतियां chmod कमांड का उपयोग करके भी बदली जा सकती हैं:
chmod <PERMISSION> <FILE>
इसके अलावा, आप mkdir कमांड का उपयोग करके एक नई डायरेक्टरी बना सकते हैं:
mkdir <DIRECTORY_NAME>
अक्सर पूछे जाने वाले प्रश्न
1. क्या मुझे SFTP क्लाइंट इंस्टॉल करने की आवश्यकता है?
अधिकांश मामलों में नहीं, क्योंकि अधिकांश लिनक्स सिस्टम डिफ़ॉल्ट रूप से टर्मिनल-आधारित SFTP क्लाइंट के साथ आते हैं।
2. क्या मैं पब्लिक-की प्रमाणीकरण का उपयोग कर सकता हूं?
हां, आप पासवर्ड के बजाय प्रमाणीकरण विधि के रूप में पब्लिक-की प्रमाणीकरण का उपयोग कर सकते हैं। इसे सेट करना काफी सरल है, और यह आपके सर्वर के लिए अतिरिक्त सुरक्षा प्रदान करता है।
3. क्या मैं एक साथ SSH सर्वर होस्ट कर सकता हूं?
हां। हालांकि, आपको यह सुनिश्चित करना होगा कि आपका SFTP सर्वर SSH सर्वर के समान पोर्ट का उपयोग नहीं कर रहा है।