لاگین اتوماتیک به ماشین‌های راه دور

وقتی به طور مرتب با ماشین‌های راه دور کار می‌کنیم، وارد کردن اسم کاربری و پسورد تبدیل به یه پروسه حوصله سربر می‌شه. واسه همین بهتره راه حلی پیدا کنیم که مشکل لاگین رو حل کنه.
لاگین اتوماتیک به ماشین‌های راه دور دو تا روش اصلی داره:
روش اول: استفاده از فایل ‪.netrc‬
خیلی از برنامه‌هایی که با ماشین‌های راه دور کار می‌کنند می‌تونند از فایل ‪.netrc‬‬ استفاده کنند. در واقع می‌شه یوزر و پسورد برای هر ماشین رو تو این فایل ذخیره کرد تا برنامه‌های دیگه ازش استفده کنند. فرمت این فایل به این شکله:

فکر کنم به قدر کافی واضحه.

نکته مهم این که این روش برای هر پروتکلی که با OpenSSH کار می‌کنه (مثل ssh، scp و sftp) کار نمی‌کنه.
روش دوم: استفاده از کلیدهای ssh
برای استثناهای حالت قبل می‌شه به راحتی از کلیدهای ssh استفاده کرد.
مراحل کار:
اول جفت کلیدهای نامتقارنمون رو می‌سازیم: (یک بار برای همیشه)

چند تا سوال تو این مرحله پرسیده می‌شه که همش رو مقادیر پیش‌فرض رو قبول می‌کنیم.
تو مرحله بعد کلید عمومی به کامپوتر مقصد کپی می‌شه:

به همین راحتی.

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

اشتراک مخزن git

مساله اینه که من می‌خوام مخازن git که روی راسبری‌پی خونه دارم رو با بقیه اعضای تیم به اشتراک بزارم. قبلا کارهای مربوط به dynamic dns و port forwarding رو انجام دادم (+ و +) و می‌شه از طریق ssh با یه آدرس ثابت به خونه وصل شد. بقیه کار سادست. الان مراحل کار رو می‌گم و بعد یه مثال می‌زنم.

۱- برای هر کدوم از اعضای تیم یه یوزر می‌سازم.
۲- برای هر پروژه یه گروه می‌سازم.
۳- اعضای هر پروژه رو به گروه اون پروژه اضافه می‌کنم.
۴- یه فولدر تو روت فایل سیستم می‌سازم به اسم git.
۵- برای هر پروژه تو فولدر git یه فولدر می‌سازم و مالکش رو به گروه اون پروژه تغییر می‌دم.
توجه: دستورات قدم‌های ۱ تا ۵ رو می‌تونید تو این لینک پیدا کنید.
۶- قدم خیلی مهم: تنظیم می‌کنم که از این به بعد هر فایل جدیدی که تو فولدر پروژه ساخته می‌شه مال گروه همون پروژست. (منبع)
۷- یه ریپو خالی تو اون دایرکتوری ایجاد می‌کنم. (+)
۸- حالا کاربر می‌تونه از راه دور به مخزن وصل بشه و پوش کنه.

مثال کاربر user1 برای پروژه myproject:

و در سمت کاربر:

به روز رسانی:
دستورات رو اصلاح کردم و به علاوه چک می‌کنم که پروژه‌ای که ساخته شده حتما برای کار با گروه‌ها تنظیم شده باشه. (+)

به روز رسانی ۲:
برای اضافه کردن ریپوی اشتراکی یه اسکریپت کوچیک دارم که رو گیست به اشتراک گذاشته‌ام.

دستورات کار با گروه‌ها، کاربران و دسترسی‌ها

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

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

اضافه کردن یه کاربر جدید

اضافه کردن یک کاربر جدید به علاوه ساختن فولدر home برای او

عوض کردن پسورد کاربر

اضافه کردن یه کاربر جدید به یه گروه جدید

اضافه کردن یه کاربر جدید به دو گروه

گرفتن اطلاعات کاربر

لیست کل کاربران

لیست کل گروه‌ها

لیست گروه‌های کاربر

اضافه کردن یه گروه جدید

اضافه کردن یه کاربر موجود به یه گروه

حذف کاربر از یک گروه

حذف کاربر به طور کلی

حذف کاربر و فولدر خانه‌اش

فایل‌ها و مجوزها
تو سیستم فایل ext هر فایلی سه تا خاصیت داره:
۱. یک کاربر مالک
۲. یک گروه مالک
۳. مجوزهای دسترسی برای کاربر مالک، گروه مالک و هر کس دیگری غیر این دو

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

دیدن اطلاعات فایل

جلوی هر فایل مجوزها، اسم کاربر و اسم گروه نمایش داده می‌شه. فرمت مجوزها به شکل drwxrwxrwx هست. کاراکتر اول اگه – باشه یعنی یه فایل معمولیه و اگه d باشه یعنی یه دایرکتوریه. rwx اول مربوط به کاربر، rwx بعدی مربوط به گروه و rwx آخر مربوط به همه افراده. r نشون دهنده حق خوندن، w نشون دهنده حق نوشتن و x نشون دهنده حق اجرا کردنه. اگر کسی هر کدوم از این مجوزها رو نداشته باشه به جاش یه – نمایش داده می‌شه. مثلا اگه مجوز یه فایل drwxr–r-x باشه یعنی کاربر مالک فایل می‌تونه فایل رو بخونه، روش بنویسه و اجراش کنه، گروه فایل می‌تونه فقط بخونتش و همه افراد دیگه می‌تونن فایل رو بخونن و اجرا کنن.

تغییر دسترسی دایرکتوری برای گروه به شکل بازگشتی

تو این دستور حرف g برای گروهه. برای مالک اصلی o برای همه از a استفاده می‌شه. اگه هیچ حرفی نباشه اتوماتیک a در نظر گرفته می‌شه. + برای اعطای دسترسی و – برای سلب دسترسیه.

تغییر مالک فایل‌ها

تغییر مالک یک دایررکتوری به شکل بازگشتی

تغییر گروه فایل

تغییر گروه یک دایرکتوری به شکل بازگشتی

تغییر مالک و گروه

ادامه یک پروسه بعد از قطع ارتباط ssh

فرض کنید با یه ارتباط ssh با یه کامپیوتری ارتاط برقرار کردید. وقتی جلسه ssh شما بسته بشه، اتوماتیک تمام پروسه‌هایی هم که تو اون جلسه اجرا کردید بسته میشن. اما برای اینکه اون پروسه‌ها ادامه پیدا کنه (مثل یه دانلود یا اجرای کد) راه‌های مختلفی وجود داره:

۱- می‌شه به سیستم گفت که این پروسه مال من نیست (+). یعنی بعد از اجرای پروسه با ctl+z نیگرش داریم و بعد وارد کنیم:

۲- با استفاده از دستور nohup برنامه رو در مقابل سیگنال HUP (سیگنال اختمام تماس hangup) محفوظ کنیم (+). مثلا:

۳- با یه دستوری screen به یه ترمینال مجازی تو خود سیستم وصل بشیم که بعد از قطع تماس هم ادامه پیدا می‌کنه. این روش منعطف‌تره و پر دنگ و فنگ‌تر. برای اطلاعات بیشتر اینجا رو ببینید.

کندی لاگین ssh تو اوبونتو

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

علی ای حال.

با اوبونتو که می‌خوام به ssh وصل بشم یک عالمه معطل می‌کنه. علت اینه که اوبونتو با یه مکانیزمی داره چک می‌کنه که کسی خودش را جای سرور ما جا نزنه و پسوردمون رو ندزده. برای منی که دارم رو شبکه داخلی کار می‌کنم این کنترل امنیتی زیادی سخت‌گیرانه است. برای حل مشکل خیلی ساده می‌شه این دستور رو اجرا کرد: (پی‌نوشت رو ببینید)

منبع (+)

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

پی‌نوشت: دستور بالا خطای Permission denied می‌داد. ظاهرا sudo فقط روی یه دستور کار می‌کنه (+). به خاطر همین دستور به این شکل اصلاح شد: (با تشکر از tee عزیز)

پی‌نوشت ۲: روی یکی از سیستم‌هام روش بالا هم جواب نداد. تو اون سیستم مجبور شدم فایل ‭ /etc/ssh/ssh_config‬رو ویرایش کنم و دو خط زیر رو کامنت کنم:

و بعد هم سرویس sshd رو دوباره راه‌اندازی کردم.

منبع (+)