آیا کلیدهای عمومی SSH شما را سخت می کند؟ یکی از این راه حل ها را امتحان کنید.
SSH ابزار مفیدی برای اتصال به ماشینهای راه دور است، اما ممکن است با خطای “Permission denied (publickey)” در ارتباط با کلید عمومی شما در لینوکس مواجه شوید. خوشبختانه، راهحلهای آسانی وجود دارد که میتوانید برای عیبیابی آن امتحان کنید.
کلید عمومی چیست؟
هنگامی که یک جفت کلید برای SSH در لینوکس تولید می کنید، یک کلید عمومی و یک کلید خصوصی به شما داده می شود. کلید خصوصی بهعنوان یک راز کاملاً محافظتشده با شما باقی میماند، اما کلید عمومی چیزی است که به سرورهای راه دور منتقل میشود تا به شما اجازه دهد بدون رمز عبور وارد شوید. هنگام اتصال، کلاینت SSH محلی شما، کلید عمومی را با کلید خصوصی مطابقت می دهد.
مزیت این روش این است که شما فقط باید کلید عمومی را بدهید. تا زمانی که کلید خصوصی خود را خصوصی نگه می دارید، در صورتی که کلید عمومی شما به خطر بیفتد، این امر شما را ایمن نگه می دارد. کلید عمومی به خودی خود بی فایده خواهد بود.
OpenSSH، پرکاربردترین سرویس گیرنده و سرور SSH در دنیای منبع باز، به فایلی که حاوی هر کلید عمومی در دستگاه راه دور (.”.ssh/authorized_keys” در فهرست اصلی شما) نیاز دارد تا مجوزهای خاصی داشته باشد. اگر مجوزهای نوشتن برای سایر کاربران تنظیم شده باشد، کار نخواهد کرد، که به عنوان “قابل نوشتن در جهان” شناخته می شود. از آنجایی که نام دایرکتوری با نقطه (.) شروع می شود، در لیست های ls نشان داده نمی شود مگر اینکه از دستور ls -A استفاده کنید.
اگر فایل از رایانه دیگری کپی شده باشد یا خودتان آن را ایجاد کرده باشید، ممکن است مجوزها تغییر کنند. خوشبختانه، این به راحتی قابل تعمیر است.
مجوزهای کلید عمومی خود را بررسی کنید
فایل authorized_keys به سادگی یک فایل متنی ساده است که شامل تمام کلیدهای عمومی از کلاینت هایی است که می خواهید بتوانید در دستگاه راه دور به حساب خود وارد شوید. برای مشاهده مجوزهای آن، از دستور ls با گزینه -l استفاده کنید:
ls -l ~/.ssh/authorized_keys
این تنظیمات مجوز مالک، گروه و سایر کاربران را نشان می دهد. به شش حرف آخر رشته دقت کنید. اگر «w» را در آنها میبینید، به این معنی است که گروه یا دیگران میتوانند به آن بنویسند و آن را ناامن کنند.
شما می خواهید که این فایل توسط شما قابل نوشتن باشد، اما نه توسط گروه یا دیگران. برای دسترسی به کاربران صحیح، می توانید مجوزها را با chmod تغییر دهید.
دو راه وجود دارد: عددی و نمادین.
روش عددی کوتاهتر است، اما شما باید اعداد مجوز هشتگانه را حفظ کنید:
chmod 700 ~/.ssh/authorized_keys
روش نمادین بیشتر یادگاری است:
chmod go-w ~/.ssh/authorized_keys
کپی ایمن کلیدها با استفاده از ssh-agent
شما می توانید به صورت دستی هر کلید عمومی را از دستگاه خود در فایل ~/.ssh/.authorized_keys کپی و جایگذاری کنید، اما استفاده از برنامه ssh-agent احتمال خطاهای مجوز را کاهش می دهد.
برای راه اندازی ssh-agent از این دستور استفاده کنید:
eval "$(ssh-agent-s)"
برای ورود به سرور راه دور با استفاده از ssh-agent، از گزینه -A با ssh استفاده کنید
ssh -A user@example.com
تنظیمات sshd سرور از راه دور را بررسی کنید
اگر هر یک از این تلاش ها با شکست مواجه شد، ممکن است مجبور شوید در صورت دسترسی ریشه، تغییراتی در پیکربندی سرور sshd در دستگاه راه دور ایجاد کنید. اگر نه، احتمالاً باید با مدیر سیستم تماس بگیرید تا به شما در حل مشکلات اتصال SSH کمک کند. این آخرین راه حل است زیرا می تواند امنیت سیستم شما را کاهش دهد.
فایل پیکربندی کل سیستم برای sshd /etc/ssh/sshd_config است. از آنجا که متعلق به root است، برای ویرایش آن باید از sudo استفاده کنید. به عنوان مثال، برای ویرایش آن با Vim:
sudo vim /etc/ssh/sshd_config
برای فعال کردن sshd که به شما اجازه ورود به سیستم را بدهد حتی اگر فایل authorized_keys شما قابل نوشتن جهانی باشد، گزینه “StrictModes” را در این فایل روی “no” تنظیم کنید.
آن را ذخیره کرده و سرور SSH را مجددا راه اندازی کنید:
sudo systemctl restart sshd.service
اکنون می توانید خطاهای مجوزهای کلید عمومی SSH را برطرف کنید
ممکن است در مورد کلیدهای عمومی SSH در سیستم های راه دور با خطا مواجه شوید. خوشبختانه، بیشتر اوقات تنها کاری که باید انجام دهید این است که مجوزهای فایل را بررسی و تنظیم کنید تا هیچ کس دیگری نتواند کلید شما را ببیند. همچنین می توانید از ssh-agent برای اتصالات مطمئن تر استفاده کنید. به عنوان آخرین راه حل، می توانید سرور SSH را سختگیرانه تر کنید.