لینوکس همه‌فن حریف: مدیریت ssh سرورها با کمی بش اسکریپت

شاید شما هم سرورهای لینوکسی زیادی رو داشته باشید که برای کارهای مختلف به اون‌ها SSH می‌کنید. کار سختی نیست ولی اگر ابزاری باشه که کارمون رو راحت‌تر کنه دنیا جای بهتری برای زندگی خواهد بود. امروز دوست داشتم یک کار مفید و فان انجام بدم. این شد که دست به کد شدم و یک ابزار برای خودم نوشتم. شاید اگر سرچ می‌کردم ابزار های بهتر و قدرت‌مندتری هم پیدا می‌کردم ولی اون‌وقت دیگه ماجرا فان نبود.

 اسکرین شات از جامپ

خب؛ صورت مسئله اینه که من یک چیزی می خوام که لیست سرورها و پورت‌های SSH رو توی خودش نگه داره و من رو خیلی سریع به اون‌ها وصل کنه. اسم پروژه‌م رو گذاشتم jump که می‌تونید روی گیت‌هاب کامل‌ش رو ببینید. اما یکم در مورد قسمت‌های مهم‌ش توضیح می‌دم.

نمونه لاگین با جامپ

توی قسمت زیر بررسی کردم که اگر فایل کانفیگ توی شاخه home من وجود نداشت با یک سری توضیح و یک مثال ایجادش کنه و فایل ایجاد شده رو با ادیتور متنی پیش‌فرض سیستم باز کنه تا کاربر بتونه اطلاعات مورد نیاز خودش رو در اون وارد کنه و به عبارتی کانفیگ اولیه برنامه رو پیکربندی کنه.

توی این تیکه از کد لیست سرورها رو خوندم و ریختم توی یک متغیر و به کمک whiptail که یک ابزار تولید دیالوگ‌باکس های گرافیکی تحت shell script هست یک محیط گرافیکی درست کردم که کاربر می‌تونه سرورهاش رو ببینه و تیک بزنه که به کدوم می‌خواد وصل بشه.

قدم بعدی اینه که ببینیم کدوم سرور رو انتخاب کرده و بهش SSH بزنیم که این کار رو به وسیله کد زیر انجام دادم.

و نتیجه این شد که الان ابزاری دارم که خیلی راحت می‌تونه کانکشن‌های SSH من رو مدیریت کنه و کاملا می‌دونم چجوری کار می‌کنه و هر وقت نیاز به توسعه یا تغییر داشته باشه خیلی راحت قابل انجامه. مهم‌تر از اون این‌که اینطور کارها تجربه و دانش آدم رو افزایش می‌ده.

شما هم دست به کد بشید چیزهایی تولید کنید که کارهای روزانه‌تون رو راحت‌تر و بهتر کنه. اگر چیز جالبی تولید کردید اپن سورس منتشرش کنید و به من در mindfs.com روی جیمیل اطلاع بدید تا همینجا معرفی‌ش کنم (:

تجربه کنید و شاد باشید.

پی‌نوشت:
قبلا هم گفتم من خیلی bash script نویس با تجربه‌ای نیستم و قطعا می‌شده این برنامه رو بهینه‌تر و کاربردی‌تر نوشت. اما خوبی لینوکس در اینه که هر کسی با سطح دانش و مهارت خودش می‌تونه کار خودش رو پیش ببره.

لینوکس همه‌فن حریف: اطلاع سریع از نتایج انتخابات

بلاخره بعد از یک انتخابات با مشارکت بالا زمان شمارش رای‌ها فرا رسیده و از دیشب تا حالا اخبار غیر رسمی راست و دروغ زیادی از نتایج پخش شده. سوال اصلی اینه که چرا نباید یک سیستم رای‌گیری مکانیزه داشته باشیم تا این همه کاغذ دور ریخته نشه و این همه وقت و نیروی انسانی هدر نره. البته شاید یک دلیلش نداشتن زیرساخت پایدار برای این کار باشه، یا شاید هم بر می گرده به ترس‌های امنیتی دوستان که البته با نمونه‌کار هایی که بعضا ارائه کردن واقعا جای ترس هم داره وقتی در طراحی یک سایت ساده مشکلات بنیادین دارن که از یک آماتور هم بعیده. بگذریم.

بعد کلی آمار غیر رسمی و شایعه‌گونه بلاخره ستاد انتخابات کشور یک خبر منتشر کرد که نتایج قطعی و رسمی روی اون منتشر می‌شه و در واقع یک خبر هست که مدام آپدیت می‌شه. از اینکه چرا ارقام و عناوین بصورت plane text و غیرجدولی ارائه شده هم می‌گذریم. حالا برای اینکه بدونیم توی حوزه انتخابی ما چه کسایی رای آوردن باید هی بریم این لینک رو ریفرش کنیم و توی صفحه سرچ کنیم ببینیم خبری شده یا نه.

اما ما که لینوکس بلدیم از این کار های داغون نمی‌کنیم. دست به کد می‌شیم. یه فایل bash script ساده می نوسیم که هر بار که اجرا می‌شه آدرس اون لینک رو باز کنه و توش دنبال متنی که ما می گیم -که در اینجا قراره اسم شهر یا استان ما باشه- بگرده. اگر اون متن رو پیدا کرد دستور beep رو اجرا کنه تا سیستم بوق بزنه. برای اینکه اسپیکر سیستم رو فعال کنیم و در واقع ماژول‌ش رو کرنل ما لود کنه دستور زیر رو اجرا میکنیم:

و حالا اسکریپت‌مون رو به این شکل می‌نویسیم و ذخیره می‌کنیم :

حالا باید به فایل‌مون دسترسی اجرا شدن بدیم:

حالا باید طوری اجراش کنیم که توی یک بازه‌ی زمانی مشخص مدام فایل اجرا بشه و اگر نتیجه اون چیزی بود که ما می‌خواستیم بهمون خبر بده. برای اینکار از دستور watch استفاده می‌کنیم:

این دستور برنامه ما رو هر ده ثانیه اجرا می کنه و هر وقت به نتیجه برسه با سه تا بوق به ما اطلاع می‌ده. نکته این که ورودی دستور رو به صورت regex دادیم تا بتونیم بصورت داینامیک دنبال هر چیزی توی خروجی بگردیم و دست‌مون باز باشه در اعمال فیلتر (البته فیلتر در کاربرد خوبش ، نه فیلترهای چرند فیلترچی).

امیدوارم افراد منتخب شما جزء انتخابات شده‌ها باشن و امیدوارم به لیست اصلاحات رای داده باشید D:

پی‌نوشت:
من بش‌اسکریپت نویس خوبی نیستم و ممکنه راه حل‌های معقول‌تری هم برای انجام این کار وجود داشته باشه. ولی خوبی لینوکس اینه که هر کسی با دانش خودش می‌تونه ازش بهره ببره.

اگر برنامه‌نویس یا ادمین سیستم هستید یک نظر سنجی منتظر شماست

همونطور که می‌دونید ما در کشورمون در مورد خیلی از چیزها هیچ آمار رسمی نداریم یا اصلا آمار نداریم. شاید چون برای دولت دونستن خیلی از آمارها مهم نیست یا شاید حتا به نفع‌ش هم باشه که بعضی از آمار ها در دسترس نباشه! مجموعه‌های خصوصی هم تا حالا به سمت تهیه آمار و گزارش نرفتن یا اگر مجموعه غیر دولتی هست که کارهای آماری می‌کنه من ازش بی اطلاعم.

اما حالا جادی در این روزهای آخر سال ۹۴ یک نظر سنجی فراهم کرده برای بررسی نوع کار، مزایای شغلی، تکنولوژی‌های مورد استفاده، حقوق و بعضی رفتارهای شغلی و شخصی قشر برنامه‌نویس‌ها و مدیر سیستم‌ها. نکته‌ی مهم‌ش اینه که قراره نتایج این نظرسنجی رو بصورت آزاد در اختیار همه بذاره و این خوبه. آمار ها و اطلاعات باید آزاد باشن. لیست دارایی های شخصیت‌های سیاسی جزء چیز های یواشکی و محرمانه نباید باشه اگر ما قراره یک جامعه مدرن‌تر داشته باشیم (:

خیلی از استارت‌آپ‌های دنیا مبتنی بر استفاده و گزارش‌گیری از اطلاعات هست. اگر یک کسی ایده داره که یک برنامه بنویسه که نزدیک‌ترین کارواش رو مثلن به شما معرفی کنه درستش اینه که یک دیتابیسی از مشاغل توسط اتحادیه‌ها از طریق یک API معقول در دسترس توسعه دهنده‌ها باشه. بگذریم، من توی این نظر سنجی شرکت کردم و از شما هم دعوت می‌کنم شرکت کنید و از دوستان‌تون هم بخواید توی این نظرسنجی شرکت کنن تا آمار به دست اومده حاصل یک جامعه آماری وسیع و قابل اتکا باشه. (توضیحات خود جادی در مورد نظرسنجی)

از جادی هم تشکر می‌کنم بابت این‌که خیلی وقت‌ها به ما یادآوری می‌کنه که چه کارهای ساده و خوبی می‌شه انجام داد. ممنون جادی (:

پی‌نوشت:
من رای می‌دم، اگر براتون مهمه که به کی ؟ به اصلاح‌طلب‌ها رای میدم. به نظرم مجلسی که با دولت همراه باشه و البته منتقد و منصف هم باشه برای آینده‌ی کشور بهتره. از طرفی این نظر شخصی من هست و ممکنه اشتباه کرده باشم. پس شما هم خودتون تحقیق کنید و به هر کسی که خواستید رای بدید (:

شاد و سرسبز باشید.