چند ترفند ssh برای انتقال فایل
امین | سه شنبه ۱ تیر ۱۳۹۵
یکی از مشکلات همیشگی هنگام اتصال به سرورها از طریق شبکه، انتفال فایل است. ابزار هایی مثل sftp با وجود کارایی فراوان، مشکلاتی هم دارند، مثلا استفاده مکرر از آنها ملالآور است و اصلا برای اسکریپت نویسی مناسب نیستند و مشکلاتی مثل سطح دسترسی و غیره هم ممکن است رخ دهد.
یک راه حل جالب برای این مشکلات استفاده مستقیم از خود ssh است. مثلا به کمک دستور زیر میتوان فایلی را از سرور به کلاینت منتقل کرد.
حال برای مثال اگر با فایلی مواجه باشیم که خواندن آن نیاز به دستور روت دارد به سادگی میتوان نوشت:
اما مزایای این روش فقط به همین جا محدود نمیشود میتوان کار های جالب تری انجام داد که برای sftp غیر ممکن است. مثلا:
که از اولی میتوان برای دانلود مستقیم یک فایل به کمک ssh و از دومی برای بکاپ گرفتن از یک سیستم روی شبکه کمک گرفت. تقربیا میتوان از هر ترکیبی استفاده کرد. و stdout هر دستوری را که روی سرور اجرا میشود مستقیما روی کلاینت ذخیره کرد و از مزایای رمزنگاری و ارتباط امن ssh بهره برد.
علاوه بر این میتوان از این مزیت در جهت عکس نیز استفاده کرد. مثلا به کمک این دستور میتوان از سیستم بکاپ گرفت و مستقیما روی یک کامپیوتر روی شبکه ذخیره کرد:
تذکر: فراموش کردن " ها میتواند نتایج جالبی داشته باشد :)
حتی میتوان فایل هایی را بازنویسی کرد که ویرایش آنها نیاز به دستور روت دارد.
نکته: درصورت استفاده از sudo در دستورات ssh باید از سویچ -tt استفاده کنید.
علاوه بر همه این مثال ها میتوان از قدرت bash و ابرازهای مختلف استفاده کرد و به ترکیبهای هیجانانگیز بیشتری رسید. اگر مثال های جالبتری به ذهنتان رسید آنهارا باما در میان بگذارید.
آپدیت: به توصیه یکی از دوستان تصمیم گرفتم توضیح مختصری درباره دستور scp به این پست اضافه کنم.
دستور scp مثل خیلی از ابزارهای گنو/لینوکس دو خصوصیت مهم داره. سادگی: یعنی فقط یک یا چند کار خاص انجام میدهد ؛ کاربردی و قابلیت اعتماد: یعنی با اینکه فقط یک کار خاص انجام میدهد اما آن را به بهترین شکل ممکن انجام میدهد.
یکی از سادهترین کاربرد های این دستور انتقال یک فایل به یک سرور ssh است.
خب این دستور خیلی ساکته! تا وقتی کارش تموم نشده درباره سرعت و انتقال و پروسه ارسال چیزی نمیگه. برای اینکه به حرف بیاد میتونیم از سویچ -p استفاده کنیم.
در مثالهای بالا در انتقال با ssh درباره فشرده سازی فایل هنگام انتقال چند مثال داشتیم. خب الآن با سویچ -C (بزرگ) فایل قبل از ارسال فشرده شده و پس از آن روی سرور به حالت قبل برمیگرده!
از این دستور میشود برای انتقال یک پوشه هم استفاده کرد. خیلی ساده سویچ -r به صورت بازگشتی تمام شاخهها را به سرور انتقال میدهد.
علاوه بر این اگر برای امنیت سرور پورت ssh رو تغییر داده اید سویچ -P دوست شماست! (بسیاری از سویچهای ssh و scp مشابه هستند! به man مراجعه کنید!)
گفتم این انتقال فایل سادهترین کاربرد scp است. خب بریم سراغ معجزه اصلی!
درست متوجه شدید. به کمک این دستور میتوان چندین فایل را از یک سرور به سرور دیگه منتقل کرد. تصور کنید بدون این دستور این کار چقدر دردسر داره!
پ.ن: با توجه به وضعیت اینترنت پـــرسرعت این دستور میتونه خیلی هم عجیب و بیمصرف به نظر برسه! چون شما به عنوان رابط بین این دو سرور عمل میکنید و هر فایل اول برای شما و سپس به سرور دوم ارسال خواهد شد.
پ.ن 2: از دستور scp میتوان برای دانلود فایل از سرور نیز استفاده کرد.
یک راه حل جالب برای این مشکلات استفاده مستقیم از خود ssh است. مثلا به کمک دستور زیر میتوان فایلی را از سرور به کلاینت منتقل کرد.
ssh <server_ip> cat /path/to/file >/path/to/file/on/client |
ssh -tt <server_name> sudo cat /path/to/file > /path/to/save/file |
ssh <server_ip> curl http://example.com >/path/to/save ssh <server_ip> "dd if=/dev/sdx |gzip -c9" >/path/to/save |
علاوه بر این میتوان از این مزیت در جهت عکس نیز استفاده کرد. مثلا به کمک این دستور میتوان از سیستم بکاپ گرفت و مستقیما روی یک کامپیوتر روی شبکه ذخیره کرد:
"dd if=/dev/sdx| gzip -c9 |ssh <server_name> "cat > /path/to/file |
حتی میتوان فایل هایی را بازنویسی کرد که ویرایش آنها نیاز به دستور روت دارد.
cat /file/on/client |ssh -tt <server_address> sudo tee /path/to/file |
علاوه بر همه این مثال ها میتوان از قدرت bash و ابرازهای مختلف استفاده کرد و به ترکیبهای هیجانانگیز بیشتری رسید. اگر مثال های جالبتری به ذهنتان رسید آنهارا باما در میان بگذارید.
آپدیت: به توصیه یکی از دوستان تصمیم گرفتم توضیح مختصری درباره دستور scp به این پست اضافه کنم.
دستور scp مثل خیلی از ابزارهای گنو/لینوکس دو خصوصیت مهم داره. سادگی: یعنی فقط یک یا چند کار خاص انجام میدهد ؛ کاربردی و قابلیت اعتماد: یعنی با اینکه فقط یک کار خاص انجام میدهد اما آن را به بهترین شکل ممکن انجام میدهد.
یکی از سادهترین کاربرد های این دستور انتقال یک فایل به یک سرور ssh است.
scp /path/to/source/file user@server:/destination/folder |
خب این دستور خیلی ساکته! تا وقتی کارش تموم نشده درباره سرعت و انتقال و پروسه ارسال چیزی نمیگه. برای اینکه به حرف بیاد میتونیم از سویچ -p استفاده کنیم.
در مثالهای بالا در انتقال با ssh درباره فشرده سازی فایل هنگام انتقال چند مثال داشتیم. خب الآن با سویچ -C (بزرگ) فایل قبل از ارسال فشرده شده و پس از آن روی سرور به حالت قبل برمیگرده!
از این دستور میشود برای انتقال یک پوشه هم استفاده کرد. خیلی ساده سویچ -r به صورت بازگشتی تمام شاخهها را به سرور انتقال میدهد.
علاوه بر این اگر برای امنیت سرور پورت ssh رو تغییر داده اید سویچ -P دوست شماست! (بسیاری از سویچهای ssh و scp مشابه هستند! به man مراجعه کنید!)
گفتم این انتقال فایل سادهترین کاربرد scp است. خب بریم سراغ معجزه اصلی!
scp user@server1:/path/to/source/file1 /path/to/source/file2... user@server2:/destination/folder |
پ.ن: با توجه به وضعیت اینترنت پـــرسرعت این دستور میتونه خیلی هم عجیب و بیمصرف به نظر برسه! چون شما به عنوان رابط بین این دو سرور عمل میکنید و هر فایل اول برای شما و سپس به سرور دوم ارسال خواهد شد.
پ.ن 2: از دستور scp میتوان برای دانلود فایل از سرور نیز استفاده کرد.