آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

پرسش و پاسخ شماره ۶۹

پرسش و پاسخ شماره ۶۹

می‌خواهم یک ارتباط ssh (یا scp، یا sftp) را خودکار نمایم، اما نمی‌دانم چطور کلمه عبور را ارسال کنم

ایست!

اول از همه، اگر شما واقعاً کلمه عبور خود را در جایی از اسکریپت تعبیه کنید، می‌تواند در تمام جهان قابل رؤیت بشود(یا حداقل، برای هر شخصی که بتواند فایلهای سیستم شما را بخواند). این امر تمامی هدف از داشتن کلمه عبور برای حساب راه دور شما را بر باد می‌دهد.

اگر تمام آنچه شما می‌خواهید، برای آنست که توسط ssh به کاربر اعلان کلمه ورود داده شود، واقعاً مطمئن شوید که اسکریپت شما در ترمینال اجرا می‌گردد و آن فرمان ssh شما در پیش‌زمینه اجرا می‌شود(به طور معمول). اگر سرویس‌دهنده راه دور کلمه عبوری برای اعتبارسنجی نیاز داشته باشد، ssh اعلانی برای کلمه عبور به کاربر می‌دهد. نیازی نیست اسکریپت شما با آن درگیر شود.

مخصوصاً، خودتان از کاربر کلمه عبورش را نپرسید که در یک اسکریپت ذخیره و سپس ارسال آن به ssh را آزمایش کنید. این کار به شدت امنیت شما را کاهش می‌دهد.

اگر می‌خواهید به طورکلی کلمه عبور تأیید اعتبار را کنار بگذارید، آنوقت به جای آن باید از public key authentication(کلید عمومی تصدیق اعتبار) استفاده کنید. صفحه man در مورد ‎ssh-keygen(1)‎ را بخوانید و بفهمید، یا برای یک مرور کوتاه، SshKeys را ببینید. این صفحه به شما می‌گوید که چگونه یک زوج کلید عمومی و خصوصی تولید کنید(در یکی از قالب‌های RSA 1 یا DSA )، و چطور از این کلیدها بدون ارسال هیچ کلمه عبوری برای تصدیق هویت در سیستم راه دور استفاده کنید.

این هم یک خلاصه فشرده از طرز کار:

ssh-keygen -t rsa
ssh me@remote "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
ssh me@remote date     # اعلان ورود کلمه عبور نمی‌دهد‎
                       # اما کلید شما می‌تواند یک عبارت عبور داشته باشد

اگر کلید شما شامل یک عبارت عبور باشد، و شما می‌خواهید از تایپ آن در هر نوبت اجتناب کنید، ‎ssh-agent(1)‎ را بررسی کنید. به هر حال این موضوع فراتر از محدوده این نوشته است. اگر اسکریپت شما باید به طور خودکار اجرا شود، آنوقت لازم است شما عبارت عبور را از کلید پاک کنید. این کار امنیت شما را کاهش می‌دهد، به علت آنکه بعد شخصی که کلید را برباید می‌تواند با عنوان شما به سرویس‌دهنده راه دور متصل شود( این معادل قرار دادن کلمه عبور در یک فایل است). اگر چه، گاهی اوقات با یک ریسک قابل قبول این کار صلاح دانسته می‌شود.

اگر حتی با یک کلید عمومی درج شده در فایل authorized_keys راه دور، به شما اعلان کلمه عبور داده می‌شود ،احتمال می‌رود شما مشکل مجوزها در سیستم راه دور دارید. برای بحث در مورد این قبیل مشکلات SshKeys را ملاحظه کنید.

اگر اینطور نیست، پس مطمئن شوید که املای آن به صورت authorised_keys نباشد. SSH از املای US به صورت authorized_keys استفاده می‌کند.

اگر شما واقعاً می‌خواهید به جای استفاده از کلیدهای عمومی، کلمه عبور را در یک متغیر ذخیره کنید و بعد آن را به برنامه‌ای عبور بدهید، اول ببین آفتاب به سرت نتابیده. آنوقت، اگر , بازهم می‌خواهید از کلمه عبور استفاده کنید، ‎expect(1)‎ را به کار ببرید (یا ‎empty(1)‎ کمتر کلاسیک اما بیشتر موافق bash). اما از ما برای کمک در مورد آن نپرسید.

expect همچنین در انواع متفاوت مربوط به telnet یا FTP این پرسش صدق می‌کند. با این وجود هرکس که هنوز هم بدون یک دلیل خوب telnetd را اجرا می‌کند، لازم است اخراج و جایگزین بشود.


پرسش و پاسخ 69 (آخرین ویرایش ‎2011-11-08 14:23:33‎ توسط pgas)


  1. مترجم: RSA نام متداولترین الگوریتم تهیه کلید عمومی و کلید خصوصی رمزنگاری می‌باشد، که از حروف اول نام ابداع کنندگان این روش اخذ گردیده است که سه نفر به نام‌های ‎Ron Rivest , Adi Shamir , Leonard Adleman‎ می‌باشند، ایشان در سال 1977 این شیوه رمزنگاری را ابداع نمودند، امنیت RSA به استناد دشواری یافتن عوامل مؤثر در تولید اعداد خیلی بزرگ می‌باشد. در حال حاضر این دشواری، امنیت لازم را تامین می‌نماید اما ممکن است در آینده هکرها بتوانند روش آسانی برای غلبه بر آن ابداع کنند! شایان ذکر است که حق امتیاز RSA متعلق به شرکت امنیتی با همین نام بود که در سپتامبر سال 2000 منقضی گردیده است.
    روش DSA نیز که سرنام Digital Signature Algorithm می‌باشد، یک استاندارد ‎U.S. federal‎ است که در سال 1991 توسط موسسه ملی تکنولوژی و استانداردها در امریکا تهیه گردیده است.
    (بازگشت)