شاید شما هم سرورهای لینوکسی زیادی رو داشته باشید که برای کارهای مختلف به اونها SSH میکنید. کار سختی نیست ولی اگر ابزاری باشه که کارمون رو راحتتر کنه دنیا جای بهتری برای زندگی خواهد بود. امروز دوست داشتم یک کار مفید و فان انجام بدم. این شد که دست به کد شدم و یک ابزار برای خودم نوشتم. شاید اگر سرچ میکردم ابزار های بهتر و قدرتمندتری هم پیدا میکردم ولی اونوقت دیگه ماجرا فان نبود.
خب؛ صورت مسئله اینه که من یک چیزی می خوام که لیست سرورها و پورتهای SSH رو توی خودش نگه داره و من رو خیلی سریع به اونها وصل کنه. اسم پروژهم رو گذاشتم jump که میتونید روی گیتهاب کاملش رو ببینید. اما یکم در مورد قسمتهای مهمش توضیح میدم.
توی قسمت زیر بررسی کردم که اگر فایل کانفیگ توی شاخه home من وجود نداشت با یک سری توضیح و یک مثال ایجادش کنه و فایل ایجاد شده رو با ادیتور متنی پیشفرض سیستم باز کنه تا کاربر بتونه اطلاعات مورد نیاز خودش رو در اون وارد کنه و به عبارتی کانفیگ اولیه برنامه رو پیکربندی کنه.
1 2 3 4 5 6 7 8 9 |
if [ ! -f "$HOME/.jump.list" ]; then cd $HOME echo '# You have to add/edit your ssh connections in this file. with below structure:' > .jump.list echo '# Just add your connections and save to continue' >> .jump.list echo '#Alias:IP:PORT' >> .jump.list echo '# For example :' >> .jump.list echo 'Local server:127.0.0.1:22' >> .jump.list sensible-editor .jump.list fi |
توی این تیکه از کد لیست سرورها رو خوندم و ریختم توی یک متغیر و به کمک whiptail که یک ابزار تولید دیالوگباکس های گرافیکی تحت shell script هست یک محیط گرافیکی درست کردم که کاربر میتونه سرورهاش رو ببینه و تیک بزنه که به کدوم میخواد وصل بشه.
1 2 3 4 5 |
servers=$(cat $HOME/.jump.list | grep -v '^#' | awk -F':' '{print "\"" $2 "\" " "\"" $1 "\" OFF "}') dlg="whiptail --title \"Jump ssh manager \" --radiolist \"Choose Destination\" 20 50 10 " dlg="$dlg $servers 3>&1 1>&2 2>&3" selected=$(eval $dlg) |
قدم بعدی اینه که ببینیم کدوم سرور رو انتخاب کرده و بهش SSH بزنیم که این کار رو به وسیله کد زیر انجام دادم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
user=$1 if [ -z $user]; then user='root' fi remote_name=$(echo $server | awk -F':' '{print $1}') remote_ip=$(echo $server | awk -F':' '{print $2}') remote_port=$(echo $server | awk -F':' '{print $3}') echo "==================================================" echo "Created by S.M.Hosseini - mindfs.com. just smile :)" echo "==================================================" echo "Connecting to $remote_name ($remote_ip) on port $remote_port as $user ...." echo "" eval "ssh $user@$remote_ip -p$remote_port $2" |
و نتیجه این شد که الان ابزاری دارم که خیلی راحت میتونه کانکشنهای SSH من رو مدیریت کنه و کاملا میدونم چجوری کار میکنه و هر وقت نیاز به توسعه یا تغییر داشته باشه خیلی راحت قابل انجامه. مهمتر از اون اینکه اینطور کارها تجربه و دانش آدم رو افزایش میده.
شما هم دست به کد بشید چیزهایی تولید کنید که کارهای روزانهتون رو راحتتر و بهتر کنه. اگر چیز جالبی تولید کردید اپن سورس منتشرش کنید و به من در mindfs.com روی جیمیل اطلاع بدید تا همینجا معرفیش کنم (:
تجربه کنید و شاد باشید.
پینوشت:
قبلا هم گفتم من خیلی bash script نویس با تجربهای نیستم و قطعا میشده این برنامه رو بهینهتر و کاربردیتر نوشت. اما خوبی لینوکس در اینه که هر کسی با سطح دانش و مهارت خودش میتونه کار خودش رو پیش ببره.