অधিকাংশ মানুষ FileZilla, WinSCP বা অন্য FTP প্রোগ্রাম পছন্দ করেন যখন তাদের লিনাক্স সার্ভারের সাথে ফাইল ট্রান্সফার করার প্রয়োজন হয়। SFTP হল মূল FTP প্রোটোকলের একটি সিকিউর অ্যাল্টার্নেটিভ। এটি অধিকাংশ একই ফাংশন পেরফর্ম করে এর আনসিকিউর ভার্সনের মত, কিন্তু এনক্রিপশনের একটি অ্যাডেড লেয়ার দিয়ে। এটিকে সম্পন্ন করতে, এটি SSH প্রোটোকল ব্যবহার করে যা এটিকে এনক্রিপশন ক্যাপাবিলিটি প্রদান করে। আপনার লিনাক্স সিস্টেমে একটি SFTP সার্ভার সেট আপ করা একাধিক ধাপ জড়িত, যা এখানে শোকেস করা হল।
SFTP কী?
SFTP (Secure File Transfer Protocol) হল একটি নেটওয়ার্ক প্রোটোকল ক্লায়েন্ট থেকে সার্ভার ফাইল ট্রান্সফার করার জন্য। FTP (File Transfer Protocol)-এর বিপরীতে, SFTP SSH (Secure Shell) প্রোটোকল ব্যবহার করে পাঠানো ডেটা এনক্রিপ্ট করে। এটি কম্পিউটার সায়েন্টিস্ট তাতু ইলোনেন এবং সামি লেহ্টিনেন দ্বারা ডেভেলপ করা হয়েছিল, যারা ১৯৯০-এর দশকে SSH প্রোটোকল ডেভেলপ করার জন্যও দায়ী। তবে, মডার্ন ভার্সন IETF (Internet Engineering Task Force) দ্বারা ডেভেলপ করা হয়।
এটিকে একটি রিমোট ফাইল সিস্টেম প্রোটোকল হিসেবে বর্ণনা করা যায়, যদিও এর নাম দেখাতে শুধু ফাইল ট্রান্সফার অপারেশন পেরফর্ম করে। একটি ক্লায়েন্ট থেকে রিসিভিং সার্ভারে SFTP ব্যবহার করে ফাইল পাঠালে, ডেটা পাঠানোর আগে এনক্রিপ্ট হয়। যদি পাঠানো ডেটা একটি "ম্যান-ইন-দ-মিডল" দ্বারা ইন্টারসেপ্ট করা হয়, তবে এই থার্ড পার্টি দ্বারা সহজে ডিক্রিপ্ট করা যাবে না।
SSH এবং OpenSSH সার্ভার ইনস্টল করা
আমরা SFTP সার্ভার সেট আপ করার প্রক্রিয়া SSH এবং OpenSSH সার্ভার ইনস্টল করে শুরু করছি।
অধিকাংশ লিনাক্স ইনস্টলেশন SSH ডিফল্টভাবে ইনস্টলড রেখে দেয়, কিন্তু আপনার সিস্টেমে না থাকলে, আপনি এডভান্সড প্যাকেজিং টুলের apt কমান্ড ব্যবহার করে ইনস্টল করতে পারেন:
sudo apt install ssh
SSH ইনস্টল করার পর, ssh কমান্ড -V ফ্ল্যাগ দিয়ে চালিয়ে এর ভার্সন চেক করতে পারেন:
ssh -V
OpenSSH সার্ভার ডেবিয়ান এবং উবুন্টু সিস্টেমে, উদাহরণস্বরূপ, apt কমান্ড ব্যবহার করে ইনস্টল করতে পারেন:
sudo apt install openssh-server
আর্চ লিনাক্সে একই কাজ pacman কমান্ড ব্যবহার করে করতে পারেন:
sudo pacman -S openssh
SFTP-এর জন্য ইউজার, গ্রুপ এবং ডিরেক্টরি তৈরি করা
এটি একটি কমন রিকমেন্ডেশন যে লিনাক্সে বিভিন্ন সার্ভিস তাদের নিজস্ব ইউজার, গ্রুপ, এবং ডিরেক্টরি ব্যবহার করা উচিত।
SFTP ইউজারদের জন্য একটি গ্রুপ তৈরি করে শুরু করুন। এটি groupadd কমান্ড ব্যবহার করে সম্পন্ন করা যায়:
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 শেল ব্যবহার করে সার্ভারের সাথে কানেক্ট করে।
আপনি সহজে ফাইলটি এডিট করতে পারেন Nano এডিটর ব্যবহার করে যা অনেক লিনাক্স ইনস্টলেশনে ডিফল্টভাবে থাকে:
sudo nano /etc/ssh/sshd_config
ফাইলের নিচে যান এবং নিচের কন্টেন্ট যোগ করুন:
Match Group sftp_group ChrootDirectory /data/%u ForceCommand internal-sftp
SSH সার্ভিস রিস্টার্ট করুন:
sudo systemtl restart sshd
(অপশনাল) SFTP পোর্ট পরিবর্তন করা
আপনি যদি SFTP সার্ভারের পোর্ট ডিফল্ট ভ্যালু ২২ থেকে আপনার পছন্দের অপশনে পরিবর্তন করতে চান, তবে আপনাকে একবার আবার "sshd_config" ফাইলটি এডিট করতে হবে।
একবার আবার Nano এডিটর ব্যবহার করে ফাইলটি এডিট করুন:
sudo nano /etc/ssh/sshd_config
ফাইলে ডিফল্ট পোর্ট ভ্যালু ২২ কমেন্ট আউট করা একটি লাইন খুঁজুন:
#Port 22
আপনি হ্যাশ (#) চিহ্নটি রিমুভ করুন যা লাইনটি কমেন্ট আউট করে রাখে এবং আপনার পছন্দের পোর্ট ভ্যালু যোগ করুন। আমার কেসে, আমি ভ্যালুটিকে ১১১১ এ পরিবর্তন করছি:
Port 1111
এখন সাদěřে ফাইলটি সংরক্ষণ করুন
এবং সার্ভার রিস্টার্ট করুন:
sudo systemctl restart sshd
সার্ভারে লগইন এবং ব্যবহার করা
সার্ভার ইনস্টল এবং কনফিগার হলে, এটি ব্যবহার করার জন্য রেডি। আপনি সহজে ফাইল আপলোড এবং ডাউনলোড করতে পারেন, সব SSH দ্বারা প্রদত্ত একটি এনক্রিপ্টেড সেশন দিয়ে।
লগইন করার আগে, প্রদত্ত ম্যানুয়াল একবার দেখে নেওয়া যাবে:
sftp -h
সার্ভারে লগইন করুন ইউজারনেম এবং সার্ভার IP বা হোস্টনেম নিচের ফরম্যাটে দিয়ে:
sftp USER@HOST
অতিরিক্তভাবে, আপনি আপনার SFTP সার্ভার যে পোর্ট ব্যবহার করছে (ডিফল্ট ২২) সেটি -P ফ্ল্যাগ ব্যবহার করে স্পেসিফাই করতে পারেন:
sftp USER@HOST -P
আপনি লগইন করলে, আপনাকে একটি 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 ব্যবহার করেন, ফাইলগুলো সরাসরি ডেস্কটপে কপি হবে। নোট করুন যে কপি হচ্ছে ফাইলগুলো, ডিরেক্টরি নিজে নয়।
ফাইল আপলোড করা
ফাইল বা ডিরেক্টরি আপলোড করা একই প্রিন্সিপল ফলো করে। একমাত্র এক্সসেপশন হল পাথগুলো রিভার্সড, মানে আপনি প্রথমে লোকাল ফাইল/ডিরেক্টরি স্পেসিফাই করুন, তারপর রিমোট পাথ।
শুরু করতে, সার্ভারে ফাইল আপলোড করুন put কমান্ড ব্যবহার করে:
put /path/to/local/content /path/to/remote/location
ডিরেক্টরি আপলোড করার সময় (রিকার্সিভ), মনে রাখুন আগের সেকশনের একই রুলটি প্রয়োগ: আসলে ডিরেক্টরির ফাইলগুলো কপি হচ্ছে, ডিরেক্টরি নিজে নয়। আপনি যে ডিরেক্টরিতে সেসব ফাইল কপি করতে চান তার একটি নতুন নাম স্পেসিফাই করুন।
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
আরও, আপনি mkdir কমান্ড ব্যবহার করে একটি নতুন ডিরেক্টরি তৈরি করতে পারেন:
mkdir
ফ্রিকোয়েন্টলি আস্কড কুয়েশচনস
১. কি আমাকে SFTP ক্লায়েন্ট ইনস্টল করতে হবে?
বেশিরভাগ কেসে না, যেহেতু অধিকাংশ লিনাক্স সিস্টেম টার্মিনাল-ভিত্তিক SFTP ক্লায়েন্ট ডিফল্টভাবে ইনস্টলড রেখে দেয়।
২. কি আমি পাবলিক-কী অথেনটিকেশন ব্যবহার করতে পারি?
হ্যাঁ, আপনি পাসওয়ার্ডের বদলে পাবলিক-কী অথেনটিকেশন ব্যবহার করতে পারেন অথেনটিকেশন মেথড হিসেবে। এটিকে সেট আপ করা ফেয়ারলি সিম্পল, এবং এটি আপনার সার্ভারের জন্য অডিশনাল সিকিউরিটি প্রদান করে।
৩. কি আমি একই সাথে SSH সার্ভার হোস্ট করতে পারি?
হ্যাঁ। তবে আপনাকে নিশ্চিত করতে হবে আপনার SFTP সার্ভার SSH সার্ভারের মতো একই পোর্ট ব্যবহার করছে না।