روشهای مختلفی برای انتقال فایل بین دو سرور مجازی لینوکس وجود دارد که شامل دستورات خط فرمان مانند SCP و Rsync تا پروتکلهای اشتراکگذاری شبکه میشوند. انتخاب روش مناسب، نیاز به درک نیازهای شبکه و حجم دادهها دارد. در این راهنما، تمامی روشهای استاندارد و فنی برای انتقال فایل بین دو سرور مجازی لینوکس را مرور خواهیم کرد تا بهترین گزینه را متناسب با نیاز خود به کار بگیرید.
پیشنیازهای انتقال فایل بین دو سرور مجازی لینوکس
برای انتقال فایل بین دو سرور مجازی لینوکس، باید موارد زیر را آماده کنید:
- دو سرور مجازی که سیستمعامل لینوکس روی آنها اجرا شود.
- دسترسی به خط فرمان در هر دو سیستم
- یک حساب کاربری با سطح دسترسی sudo یا روت در هر دو سیستم
- برقراری ارتباط شبکهای بین دو سرور (در بیشتر روشها، سرویس SSH باید فعال باشد)
نکات مهم پیش از انتقال فایل بین دو سیستم لینوکس
پیش از اقدام برای انتقال فایل بین دو سرور مجازی لینوکس، لازم است از پیکربندی صحیح محیط عملیاتی سرور مجازی مطمئن شوید. انتقال موفقیتآمیز فایل، به عواملی همچون دسترسیپذیری شبکه، تنظیمات احراز هویت و روشی که انتخاب میکنید، بستگی دارد.
- بررسی آدرسهای IP در هر دو سیستم: با استفاده از دستورات ip و hostname وضعیت را بررسی کنید. برای شناسایی آدرسهای IP و اطمینان از دسترسی شبکه، میتوانید از دستور ip a یا hostname -I استفاده نمایید.
- بررسی و تایید اتصال شبکه: از دستور ping استفاده کنید تا مطمئن شوید که سیستمها قادر به برقراری ارتباط با یکدیگر هستند. برای مثال:
ping [remote_ip_address]
- تایید دسترسی SSH (در صورت نیاز): ابزارهایی مانند scp، sftp و rsync برای اتصال به سیستم ریموت از پروتکل SSH استفاده میکنند. این دسترسی را با دستور زیر تست کنید:
ssh [username]@[remote_ip_address]
- بررسی سرویسها یا Daemonهای مورد نیاز: برخی روشهای انتقال فایل بین دو سرور مجازی لینوکس نیازمند اجرای نرمافزارهای سرور روی دستگاه مقصد هستند. برای مثال:
- FTP: نیازمند یک سرور FTP است.
- Samba: نیازمند سرویس Samba است.
- اشتراکگذاری تحت وب: نیازمند پایتون یا ابزارهای شخص ثالث است.
- باز کردن پورتهای ضروری فایروال: مطمئن شوید که UFW یا firewalld اجازه عبور ترافیک مربوط به پروتکل انتخابی را میدهند. به عنوان مثال، پورت ۲۲ برای SSH، پورت ۲۱ برای FTP و یا پورت ۴۴۵ برای Samba باید باز باشند.
- اطمینان از مجوزهای صحیح در مسیرهای مبدا و مقصد: حساب کاربری که فرآیند انتقال را اجرا میکند، باید دسترسی خواندن برای فایل مبدا و دسترسی نوشتن برای دایرکتوری مقصد را داشته باشد.
- انتخاب بهترین روش انتقال: روش مناسب را بر اساس فاکتورهایی نظیر امنیت، سرعت، سهولت استفاده و در دسترس بودن ابزار انتخاب کنید. برای مثال، ابزارهای مبتنی بر SSH اغلب برای انتقالهای ایمن و رمزگذاری شده ترجیح داده میشوند.
نحوه انتقال فایل بین دو سیستم لینوکس
برای انتقال فایل بین دو سرور مجازی لینوکس، روشهای متعددی وجود دارد که انتخاب آنها به راحتی شما با خط فرمان یا محیط گرافیکی بستگی دارد. برخی از روشهای محبوب، شامل استفاده از ابزارهای خط فرمان مانند scp و rsync هستند که سرعت و امنیت بالایی دارند. همچنین، برای کسانی که محیطهای بصری را ترجیح میدهند، استفاده از کلاینتهای FTP یا اشتراکگذاری تحت وب گزینههای مناسبی محسوب میشوند. در ادامه، تمام این روشها را به صورت گامبهگام بررسی میکنیم.
انتقال فایل با دستور scp
دستور scp (مخفف Secure Copy) برای انتقال فایل بین دو سرور مجازی لینوکس بر بستر پروتکل SSH استفاده میشود. عملکرد این دستور بسیار شبیه به دستور cp است؛ با این تفاوت که به جای کپی کردن فایلها در همان سیستم، آنها را به صورت ایمن در شبکه منتقل کرده و هم محتوای فایل و هم پروسه احراز هویت را رمزگذاری میکند.
این دستور برای انتقالهای ساده و یکباره بسیار مناسب است؛ بهویژه زمانی که نیازی به راهاندازی ابزارهای همگامسازی دائمی مثل rsync نیست.
نکته: قبل از استفاده از scp نیازی به اتصال دستی SSH به سیستم ریموت ندارید. دستور scp هنگام انتقال فایلها، اتصال SSH را به طور خودکار برقرار میکند. با این حال، اطمینان از فعال بودن و دسترسی به سرویس SSH در دستگاه ریموت ضروری است.
مرحله ۱: ایجاد یک فایل نمونه برای انتقال
در سیستم مبدا، از دستور echo یک فایل نمونه میسازیم تا در فرآیند انتقال از آن استفاده کنیم:
echo "Test file for scp transfer" > /home/sara-pnap/Documents/sample.txt
این دستور خروجی خاصی در ترمینال ندارد اما یک فایل متنی با نام sample.txt در دایرکتوری Documents ایجاد میکند.
قدم ۲: بررسی وجود فایل نمونه
با دستور ls بررسی کنید که فایل با موفقیت ایجاد شده باشد:
ls -l /home/sara-pnap/Documents/sample.txt
نکته: برای بررسی وجود فایل یا دایرکتوری ایجاد شده یا منتقل شده، از دستور ls -l استفاده کنید.
قدم ۳: اطمینان از فعال بودن SSH در هر دو سیستم
سرویس SSH باید روی سیستم گیرنده در حال اجرا باشد. وضعیت آن را با دستور زیر میتوانید بررسی کنید:
sudo systemctl status ssh
این دستور تایید میکند که سرویس SSH در حال اجراست. اگر سرویس فعال نبود، با دستور زیر آن را اجرا و فعال کنید:
sudo systemctl enable --now ssh
قدم ۴: انتقال فایل از سیستم محلی به سرور ریموت
برای ارسال فایل از سیستم مبدا به سیستم مقصد، از دستور scp استفاده کنید:
scp /home/sara-pnap/Documents/sample.txt pnap-test@192.168.56.104:/home/pnap-test/
زمانی که از شما خواسته شد، رمز عبور را وارد کنید. پس از انجام این کار، فایل در دایرکتوری Home کاربرِ سیستم ریموت ظاهر میشود.
قدم ۵: انتقال فایل از سرور ریموت به سیستم محلی
برای اینکه همان فایل را از سیستم مقصد (ریموت) برگردانید و روی سیستم مبدا کپی کنید، دستور زیر را اجرا کنید:
scp pnap-test@192.168.56.104:/home/pnap-test/sample.txt /home/sara-pnap/Desktop/
این دستور فایل را در دایرکتوری Desktop سیستم محلی شما قرار میدهد.
قدم ۶: انتقال یک دایرکتوری
ابتدا با دستور mkdir یک دایرکتوری تست همراه با محتوای نمونه ایجاد کنید:
mkdir /home/sara-pnap/Projects echo "Test project file" > /home/sara-pnap/Projects/test.txt
سپس با استفاده از آپشن -r، دایرکتوری را به دسنگاه ریموت انتقال دهید:
scp -r /home/sara-pnap/Projects pnap-test@192.168.56.104:/home/pnap-test/
این دستور کل دایرکتوری Projects و تمام محتویات داخل آن را به دایرکتوری Home در سرور ریموت کپی میکند.
انتقال فایل با دستور rsync
دستور rsync ابزاری قدرتمند برای همگامسازی فایلها و دایرکتوریها بین سیستمها بر بستر SSH است. علاوه بر این، این ابزار انعطافپذیری بیشتری نسبت به scp دارد و قابلیتهایی مثل انتقال افزایشی (فقط بخشهای تغییر کرده)، فشردهسازی و گزینههایی برای حفظ متادیتا ارائه میدهد.
در نتیجه، این روش برای انتقالهای تکرار شونده یا مجموعه دادههای حجیم مناسب است، بهویژه زمانی که تغییرات فایلها زیاد است و کارایی و سرعت اهمیت دارد.
مراحل زیر نحوه انتقال فایل با استفاده از rsync بین دو سیستم لینوکسی را توضیح میدهند.
قدم ۱: ایجاد یک فایل نمونه برای انتقال
در سیستم مبدا، یک فایل برای تست فرآیند انتقال ایجاد کنید:
echo "Test file for rsync transfer" > /home/sara-pnap/Documents/rsync-test.txt
این دستور یک فایل در دایرکتوری Documents ایجاد میکند.
قدم ۲: اطمینان از نصب بودن rsync
بررسی کنید که آیا rsync روی هر دو سیستم در دسترس است یا خیر:
rsync --version
در این مورد، دستور نشان میدهد که برنامه آماده است. اگر rsync روی سیستم نصب نبود، آن را با دستور زیر نصب کنید:
sudo apt install rsync
قدم ۳: انتقال فایل به سرور ریموت
از rsync برای ارسال فایل از سیستم مبدا به سیستم مقصد استفاده کنید:
rsync /home/sara-pnap/Documents/rsync-test.txt pnap-test@192.168.56.104:/home/pnap-test/
این دستور خروجی خاصی تولید نمیکند، اما فایل را بر بستر SSH منتقل کرده و در نتیجه، برچسبهای زمانی و مجوزها را حفظ میکند.
قدم ۴: انتقال فایل از سرور ریموت به سیستم محلی
برای کپی کردن فایل از سرور ریموت به سیستم مبدا، دستور زیر را اجرا کنید:
rsync pnap-test@192.168.56.104:/home/pnap-test/rsync-test.txt /home/sara-pnap/Desktop/
فایل در دایرکتوری Desktop سیستم مبدا ظاهر میشود. با این حال، خروجی متنی در ترمینال نمایش داده نمیشود.
قدم ۵: انتقال یک دایرکتوری
یک دایرکتوری نمونه و یک فایل داخل آن ایجاد کنید:
mkdir /home/sara-pnap/Projects-rsync echo "Rsync project file" > /home/sara-pnap/Projects-rsync/file1.txt
اکنون کل دایرکتوری را با دستور زیر منتقل کنید:
rsync -r /home/sara-pnap/Projects-rsync pnap-test@192.168.56.104:/home/pnap-test/
انتقال فایل از طریق FTP
FTP یک پروتکل استاندارد شبکه است که برای انتقال فایل بین دو سرور مجازی لینوکس بر بستر شبکه مبتنی بر TCP استفاده میشود. با این حال، باید توجه داشت که این پروتکل به صورت پیشفرض رمزگذاری نشده است.
برای انجام انتقال، یک دستگاه باید نقش سرور FTP (برای دریافت فایلها) را ایفا کند و دستگاه دیگر به عنوان کلاینت به آن متصل شود. در این مثال، ما از vsftpd استفاده میکنیم که یک سرور FTP امن و سبک است و کاربرد زیادی در سیستمهای لینوکسی دارد.
مراحل زیر، فرآیند انتقال فایل از طریق FTP بین دو سیستم لینوکس را نشان میدهند.
قدم ۱: ایجاد یک فایل نمونه برای انتقال
در سیستم مبدا، یک فایل متنی ایجاد کنید تا آن را از طریق FTP آپلود کنیم:
echo "FTP test file" > /home/sara-pnap/Documents/ftp-test.txt
این فایل در دایرکتوری Documents کاربر محلی ایجاد میشود.
قدم ۲: نصب سرور FTP
در سیستم مقصد، بسته vsftpd را نصب کنید:
sudo apt install vsftpd
قدم ۳: باز کردن ترافیک FTP در فایروال
اتصالات ورودی FTP را از طریق فایروال UFW روی سیستم مقصد فعال کنید:
sudo ufw allow 21/tcp
این دستور پورت ۲۱ را که پورت پیشفرض پروتکل FTP است، باز میکند.
قدم ۴: اتصال به سرور FTP از طریق کلاینت
با استفاده از دستور ftp از سیستم مبدا، به سرور متصل شوید:
ftp 192.168.56.104
زمانی که از شما خواسته شد، نام کاربری و رمز عبور سیستم ریموت را وارد کنید.
قدم ۵: آپلود فایل به سرور FTP
پس از ورود موفقیتآمیز، فایل نمونه را با دستور put آپلود کنید:
put /home/sara-pnap/Documents/ftp-test.txt ftp-test.txt
این دستور فایل را به دایرکتوری Home کاربر ریموت منتقل کرده و آن را با نام ftp-test.txt ذخیره میکند.
قدم ۶: دانلود فایل از سرور FTP
برای دریافت یک فایل از سرور FTP و ذخیره آن روی سیستم خودتان، از دستور get استفاده کنید:
get ftp-test.txt
این دستور فایل را در دایرکتوری فعلی سیستم محلی دانلود میکند.
نکته: پروتکل FTP از انتقال دایرکتوریها به صورت بازگشتی پشتیبانی نمیکند. یعنی نمیتوانید یک پوشه و محتویاتش را یکجا منتقل کنید.
انتقال فایل از طریق sftp
پروتکل SFTP جایگزینی ایمن برای FTP است که بر بستر SSH اجرا میشود. این پروتکل هم دستورات و هم دادهها را رمزگذاری میکند که باعث محرمانگی و یکپارچگی دادهها میشود.
بنابراین، وقتی SSH در دسترس است، از SFTP برای انتقال فایل بین دو سرور مجازی لینوکس استفاده کنید.
قدم ۱: ایجاد یک فایل نمونه برای انتقال
در سیستم مبدا، یک فایل ایجاد کنید:
echo "SFTP test file" > /home/sara-pnap/Documents/sftp-test.txt
قدم ۲: اتصال به سیستم ریموت با SFTP
از سیستم مبدا، یک سشن SFTP به سمت سیستم مقصد باز کنید:
sftp pnap-test@192.168.56.104
زمانی که خواسته شد، رمز عبور را وارد کنید.
قدم ۳: آپلود فایل به سیستم ریموت
در محیط خط فرمان SFTP، فایل را با دستور زیر آپلود کنید:
put /home/sara-pnap/Documents/sftp-test.txt
این کار فایل را به دایرکتوری Home کاربر ریموت منتقل میکند.
قدم ۴: دانلود فایل از سیستم ریموت
فایل را با دستور get دانلود کنید:
get sftp-test.txt
فایل در دایرکتوری فعلی سیستم مبدا دانلود میشود.
قدم ۵: انتقال یک دایرکتوری
انتقال دایرکتوریها در SFTP از همان ساختار دستوری استفاده میکند، با این تفاوت که باید آپشن -r را اضافه کنید. برای مثال، برای آپلود دایرکتوری به نام Test از سیستم محلی، از دستور زیر استفاده کنید:
put -r /home/sara-pnap/Documents/Test
انتقال فایل با استفاده از Samba
Samba عمدتا برای اشتراکگذاری فایل بین سیستمهای لینوکس و ویندوز با استفاده از پروتکل SMB/CIFS شناخته میشود. با این حال، در شبکههای لینوکس به لینوکس نیز از Samba برای ایجاد دایرکتوریهای اشتراکی دائمی استفاده میشود که توسط چندین سیستم (با مجوزهای مناسب) قابل دسترسی هستند. این روش برای پروژههای مشترک یا زمانی که نیاز به دسترسی مداوم به دادههای اشتراکی وجود دارد، بسیار مناسب است.
روش پیشنهادی برای انتقال فایل بین دو سرور مجازی لینوکس با استفاده از Samba، متصل کردن فضای اشتراکی با دستور mount -t cifs است. مراحل زیر را برای راهاندازی اشتراک و تکمیل انتقال دنبال کنید.
قدم ۱: نصب Samba روی سیستم مقصد
در سیستم مقصد، لیست بستهها را بهروزرسانی و Samba را نصب کنید:
sudo apt install samba
قدم ۲: ایجاد دایرکتوری اشتراکی
یک دایرکتوری برای اشتراکگذاری بسازید و با دستور chmod مجوزهای آن را تنظیم کنید:
mkdir -p /home/pnap-test/Shared chmod 777 /home/pnap-test/Shared
دستور chmod دسترسی کامل خواندن، نوشتن و اجرا را به همه کاربران میدهد. این دستورات خروجی خاصی ندارند.
قدم ۳: پیکربندی اشتراک Samba
فایل تنظیمات Samba را با یک ویرایشگر متنی باز کنید. برای انجام این کار با ویرایشگر Nano، دستور زیر را اجرا نمایید:
sudo nano /etc/samba/smb.conf
سپس بخش زیر را به انتهای فایل اضافه کنید:
[Shared] path = /home/pnap-test/Shared browsable = yes read only = no guest ok = no valid users = sambauser
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
قدم ۴: راهاندازی مجدد Samba
برای اعمال تغییرات، سرویس Samba را ریاستارت کنید:
sudo systemctl restart smbd
قدم ۵: باز کردن دسترسی در فایروال
اجازه عبور ترافیک Samba از فایروال را صادر کنید:
sudo ufw allow 'Samba'
قدم ۶: دسترسی به اشتراک Samba از سیستم مبدا
ابزارهای کلاینت مورد نیاز را روی سیستم مبدا نصب کنید:
sudo apt install cifs-utils smbclient
قدم ۷: ایجاد فایل احراز هویت Samba
برای جلوگیری از نمایش نام کاربری و رمز عبور Samba در ترمینال یا تاریخچه دستورات، یک فایل حاوی مشخصات ورود بسازید.
sudo nano /etc/samba-creds
خطوط زیر را به آن اضافه کنید:
username=sambauser password=samba123
برای محافظت از اعتبارنامهها، مجوزهای فایل را تنظیم کنید:
sudo chmod 600 /etc/samba-creds
این کار تضمین میکند که فقط کاربر root میتواند فایل را بخواند یا بنویسد. این موضوع اهمیت زیادی دارد زیرا فایل حاوی اطلاعات متنی ساده برای احراز هویت است. در نتیجه، بعدا توسط دستور mount برای احراز هویت ایمن استفاده میشود.
مرحله ۸: انتقال فایل از طریق Samba Share
یک فایل نمونه را به صورت محلی روی سیستم مبدا ایجاد کنید:
echo "Sample Samba transfer file" > /home/sara-pnap/Documents/samba-sample.txt
یک نقطه اتصال ایجاد و فایل اشتراکی سامبا را متصل کنید:
sudo mkdir -p /mnt/samba sudo mount -t cifs //192.168.56.104/Shared /mnt/samba -o credentials=/etc/samba-creds,vers=3.0
این دستورات هیچ خروجی ارائه نمیدهند.
نکته: گزینه vers=3.0 نسخه پروتکل SMB را مشخص میکند. برخی از سیستمهای مدرن لینوکس به صورت پیشفرض از نسخههای قدیمی (مانند SMB1) پشتیبانی نمیکنند، بنابراین تنظیم صریح نسخه به جلوگیری از مشکلات سازگاری کمک میکند.
فایل نمونه را با استفاده از cp در Samba share نصب شده کپی کنید:
cp /home/sara-pnap/Documents/samba-sample.txt /mnt/samba/
پس از اتمام، اشتراکگذاری را از حالت اتصال خارج کنید:
sudo umount /mnt/samba
نکته: ابزار smbclient نیز برای انتقال فایل بین دو سرور مجازی لینوکس وجود دارد که یک رابط Shell شبیه به FTP را برای اشتراکهای Samba فراهم میکند و دستوراتی مثل put و get برای انتقال فایل دارد. با این حال، این ابزار دایرکتوریها را به خوبی مدیریت نمیکند و برای عملیات رایج فایل، کمتر کاربرد دارد.
انتقال فایل از طریق اشتراکگذاری تحت وب
اشتراکگذاری فایل مبتنی بر وب، روشهای متعددی را برای انتقال فایل بین دو سرور مجازی لینوکس با استفاده از پروتکلهای استاندارد وب ارائه میدهد. در میان این روشها، رویکردهای رایج شامل سرورهای فایل HTTP، پروتکل WebDAV و روشهای ذخیرهسازی ابری میشوند.
با این حال، برای انتقالهای سریع و ساده بدون نیاز به تنظیمات پیچیده، سرور HTTP داخلی پایتون کاربردی است و به خوبی پشتیبانی میشود. برای انتقال فایل با این روش، مراحل زیر را طی کنید:
قدم ۱: ایجاد یک فایل نمونه برای اشتراکگذاری
روی سیستم مبدا، یک فایل تست ایجاد کنید:
echo "Sample file for web-based sharing" > /home/sara-pnap/Documents/web-share-sample.txt
قدم ۲: اطمینان از نصب بودن پایتون روی دستگاه مبدا
با دستور زیر بررسی کنید که آیا پایتون روی دستگاه مبدا نصب است یا خیر:
python3 --version
اگر پایتون نصب نیست، آن را نصب کنید:
sudo apt install python3
قدم ۳: اجرای یک سرور HTTP
با دستور cd به دایرکتوری حاوی فایل بروید و سرور HTTP پایتون را اجرا کنید:
cd /home/sara-pnap/Documents python3 -m http.server 8000
این دستور یک سرور HTTP را روی پورت ۸۰۰۰ در دایرکتوری جاری اجرا میکند.
قدم ۴: دانلود فایل از سیستم مقصد
روی سیستم مقصد، فایل را با استفاده از curl یا wget دانلود کنید. برای مثال با curl:
curl -O http://192.168.56.103:8000/web-share-sample.txt
فایل در دایرکتوری جاری دانلود میشود.
قدم ۵: متوقف کردن سرور HTTP
روی سیستم مبدا، با فشردن کلیدهای ctrl+c سرور را متوقف کنید.
نکته: این روش برای اشتراکگذاری موقت فایل در یک شبکه قابل اعتماد بهخوبی کار میکند. با این حال، به صورت پیشفرض احراز هویت یا رمزگذاری نمیشود. بنابراین، برای اشتراکگذاری دائمی یا ایمن، پلتفرمهای WebDAV یا سرویسهای ابری مثل Nextcloud را در نظر بگیرید.
جمعبندی
در مدیریت سیستمهای لینوکسی، تسلط بر روشهای گوناگون جابهجایی دادهها یک مهارت ضروری بهشمار میرود. در این مقاله دیدیم که ابزارهای متنوعی برای پاسخگویی به نیازهای مختلف وجود دارد. اگر امنیت اولویت اصلی شماست، ابزارهای مبتنی بر SSH مانند scp و sftp بهترین گزینه هستند.
برای همگامسازی حجم زیادی از دادهها، rsync بسیار کارایی دارد. همچنین برای محیطهای ترکیبی یا اشتراکگذاری مداوم، Samba راهکاری ایدهآل محسوب میشود و برای انتقالهای سریع و موقت، سرور ساده پایتون کاربرد دارد. انتخاب صحیح روش انتقال فایل بین دو سرور مجازی لینوکس، به امنیت، سرعت و راحتی در شبکه شما بستگی دارد.























