موثرتر کار کنیم - این قسمت ssh ِ ساده‌تر!

مقدمه

اس‌اس‌اچ از اون چیزاس که همه جا هست و همیشه خِرِه همه‌مون رو میگیره. اگه شما هم مثل من هر‌روز مجبورید به سرور‌های مختلفی login و logout کنید، این مطلب قرار کمکتون کنه که زندگیتون راحت‌تر شه!

تو این قسمت می‌خوایم راجعبه این صحبت کنیم که چطور کار با اس‌اس‌اچ رو ساده‌تر از قبل کنیم.

شیرجه توی اصل مطلب

خب تصور کنیم شما یک سروری دارید که آی‌پیش هست 10.73.71.24 و نام کاربری هم قرارِ بهش اس‌‌اس‌اچ بزنیم rostam هست، فرض کنیم برای دلایلِ مثلاً! امنیتی تصمیم گرفتید که از پورت پیش‌فرض استفاده نکنید و پورتش رو گذاشتید 2000 درنتیجه واسه اس‌اس‌اچ زدن بهش باید این دستور رو تایپ کنید:

ssh rostam@10.73.71.24 -p 2000
password: *************

همونطور که می‌بینید شما باید هربار پسوردتون رو وارد کنید که از نظر امنیتی خیلی چیزِ جالبی نیست. برای اینکه هربار اینکارُ انجام ندید، کافیه یک جفت کلید (عمومی و خصوصی) تولید کنید و کلید عمومی خودتون رو روی سرور مورد نظر کپی کنید و یک سری ‌کارها مثل تغییر حق دسترسی به کلید و ... انجام بدید. اما نکته اینجاس که این یکسری از کارهارو هم یه برنامه ای با خود ssh نصب می‌شه به اسم ssh-copy-id که اونارو واسمون انجام میده.

پس تنها کاری که شما باید بکنید اینه که کلیدهاتون رو تولید کنید و به ssh-copy-id بگید برو بقیه کارو واسم انجام بده ;-)

چطور کلیدهامون رو تولید کنیم؟ به راحتی کافیه دستور زیر رو وارد کنید که داره میگه واسه من یک جفت کلید از نوع rsa تولید کن:

ssh-keygen -t rsa

دستور بالا سه تا سوال از شما میپرسه که میتونید به راحتی سه تا Enter پشت سرهم بزنید هیچ اتفاقی نمیفته!

حالا که همه چیز ساخته شده میریم سراغ رفیقمون ssh-copy-id، تنها کاری که لازمه بکنید اینه که یکبار با این دستور به سرور مورد نظر لاگین کنید و خودش بقیه کارهارو انجام میده واستون:

ssh-copy-id rostam@10.73.71.24 -p 2000 # ssh with ease :-)

خب تا اینجای کار دیگه لازم نیست واسه این سرور هی پسورد رو وارد کنیم. همین کارو واسه بقیه سرورهاتون می‌تونید انجام بدید یعنی فقط با ssh-copy-id یکبار بهشون لاگین کنید(یک جفت کلید واسه سیستم ما هستش و نیاز به تولید به ازای هر سرور نیست این کلید‌ها توی مسیر ssh./~ وجود دارند.).

اگه کسی هست که دوست داره بدونه ssh-copy-id داره چیکار میکنه، کافیه این لینک رو دنبال کنه!

ممکنِ یکی بگه به جای اینکه هربار این دستور طولانی رو بزنیم، بریم واسش یه Alias تعریف کنیم، یه چیزی مثل پایین:

$ alias dev='ssh rostam@10.73.71.24 -p 2000'
$ dev # To connect

این ایده، خیلی بد نیست! اما خب امروز می‌خوایم یه چیز باحال‌تر بهتون معرفی کنم.



~/.ssh/config

اس‌اس‌اچ یک یک فایل کانفیگ داره که با این فایل کانفیگ نه تنها نیازی به تعریف کردن Alias ندارید،‌ بلکه خیلی کارِ باحال‌تری باهاش میشه کرد. مسیر این فایل همانطور که گفتیم ssh/config./~ هست. خب بریم سراغ اینکه اولین سرورمون رو بهش اضافه کنیم. کافیه این فایل رو باز کنیم و مشخصات سرور و پارمترهای سرورمون رو بهش بدیم:

# contents of $HOME/.ssh/config
Host rostam
hostname 10.73.71.24
port 2000
user rostam

حالا اگه می خوایم بهش وصل شیم کافیه بنویسیم(یادتون باشه اینجا tab-completion هم پشتیبانی میشه).

$ ssh rostam

نکته ای که باید یادتون باشه، توی این فایل کانفیگ ترتیب هاست‌ها مهمه یعنی اگه دوبار فایل‌های کانفیگ مختلف واسه یک سرور بنویسید اس‌اس‌اچ اونی که بالاتره رو میخونه. این فایل کانفیگ یک امکان خیلی خوب بهمون میده و اون اینه که می‌تونیم یک سری چیزها که واسه اکثر سرورها مشترکه رو یکجا بنویسیم. مثلا من بهش گفتم:
واسه همه سرور اجازه فوروارد X (رابط گرفیکی) رو به صورت پیش‌فرض بده، نام‌کاربری پیش‌فرضم root باشه، پورت ۲۲، پروتکل نسخه ۲ و از من برای چک کردن کلید سوال نپرس!

Host *
forwardx11 yes
forwardx11trusted yes
user root
port 22
protocol 2
stricthostkeychecking no

البته همه اینها درصورتی اعمال میشه که توی اون کانفیگ سرور این پارامترها مشخص نشده باشند. یعنی با کانفیگ پایین، دیگه وقتی به dev وصل میشم پورتم ۲۰۰۰ هست نه ۲۲ و ... .

Host rostam
hostname 10.73.71.24
port 2000
user rostam
Host *
forwardx11 yes
forwardx11trusted yes
user root
port 22
protocol 2
stricthostkeychecking no

اگه هرکجا نیاز به کمک داشتید که فلان پارامتر چیکار می‌کنه یادتون باشه man ssh_config رو بخونید،‌ همه‌چی اونجا به صورت کامل توضیح داده شده.

ممکنه همیشه باز کردن این فایل و ویرایش اون یکم حوصله سربر باشه،‌ یه پکیجِ پایتونی هست به اسم storm که این کارو واسه ما راحت‌تر می‌کنه. تنها عیبی که این برنامه داره اینه همیشه میره آخره فایل تنظیمات رو اضافه میکنه، اون موقع اگه از * Host استفاده کرده باشید، عملاً ممکنه به خاطر تصادم پارامتر، بعضی از پارامتر‌های خودِ هاست نادیده گرفته بشه.



نتیجه گیری

هدف من از گفتن این مطلوب این بود که اگه تایپ کردنِ پسورد واستون سخته،‌ لزومی نداره برید پسوردهای کوتاه یا غیرپیچیده انتخاب کنید مثل a یا ۱۲۳۴ بذارید،‌تا هردفعه اذیت نشید. مطمئن باشید واسه هر مساله‌ای راه‌حلی وجود داره. امیدوارم که از این مطلب خوشتون اومده باشه. در ادامه می‌خوام بیشتر برم راجعبه پایتون صحبت کنم ...

از اینجا کجا بریم

اگه جزء کسایی هستید که دوست دارید بیشتر یاد بگیرید،‌ لینک پایین رو برای شما گذاشتم، که راجعبه یک سری اصول امنیتی و best practice‌ها توی اس‌اس‌اچ صحبت می‌کنه :-)

https://www.ssh.com/ssh/copy-id