gtlssh-keygen(1) General Commands Manual gtlssh-keygen(1)

gtlssh-keygen - مدیریت کلیدها برای gtlssh

gtlssh-keygen [options] <command> [command options]

برنامه gtlssh-keygen برای تسهیل مدیریت کلیدها در gtlssh به کار می‌رود.

به‌طور کلی، هنگامی که استفاده از gtlssh را روی یک سیستم آغاز می‌کنید، دستور زیر را اجرا می‌کنید:


gtlssh-keygen keygen

و این دستور کلیدها را برای شما ایجاد می‌کند. همین کار را باید روی هر سیستم مقصدی که می‌خواهید با gtlssh به آن وارد شوید نیز انجام دهید. سپس فایل default.crt موجود در دایرکتوری $HOME/.gtlssh خود را به دایرکتوری $HOME/.gtlssh/allowed_certs سیستم مقصد کپی کنید. پس از آن دستور


gtlssh rehash

را روی سیستم مقصد اجرا کنید تا هش‌ها تولید شوند. پس از آن باید بتوانید بدون گذرواژه وارد سیستم شوید.

هنگامی که نیاز به تولید مجدد کلیدهای خود دارید، دستور زیر را دوباره اجرا کنید:


gtlssh-keygen keygen

این دستور برای جایگزینی از شما تأیید می‌خواهد. اگر کلیدها را جایگزین کنید، کلیدهای قدیمی با پسوند «.1» به انتهای نام فایل ذخیره می‌شوند. پس از جایگزینی کلیدها، باید کلیدهای جدید را به تمام مقاصد خود ارسال کنید. می‌توانید دستور


gtlssh-keygen pushcert target1 [target2 [....]]

را برای به‌روزرسانی کلیدها روی تمام آن مقاصد اجرا نمایید. این دستور از اعتبارنامه‌های قدیمی (با پسوند «.1») برای این کار استفاده می‌کند، بنابراین باید به آسانی کار کند.

برخلاف ssh، کلیدهای ssl دارای طول عمر (مدت اعتبار) هستند. به‌طور پیش‌فرض gtlssh طول عمر ۱ ساله برای کلیدها تعیین می‌کند، هرچند می‌توانید این مقدار را تغییر دهید. اگرچه این مسئله ممکن است کمی آزاردهنده باشد، اما جایگزینی دوره‌ای کلیدها ایده بسیار خوبی است، بنابراین می‌توان آن را یک ویژگی مثبت در نظر گرفت.

برنامه gtlssh به شما امکان می‌دهد برای مقاصد مشخصی کلید ایجاد کرده و به‌طور خودکار از آن‌ها استفاده کنید. برای نمونه فرض کنید می‌خواهید برای ورود به مقصد abc.my.domain از کلید متفاوتی استفاده کنید. دستور زیر را اجرا می‌کنید:


gtlssh-keygen keygen abc.my.domain

و این دستور یک کلید و گواهی را در دایرکتوری .gtlssh/keycerts با نام‌های abc.my.domain.crt و abc.my.domain.key ایجاد می‌کند. شما باید آن گواهی (نه default.crt) را به مقصد دوردست خود کپی کنید. gtlssh وجود آن کلیدها را تشخیص می‌دهد و هنگام ورود شما به abc.my.domain به‌طور خودکار از آن‌ها استفاده خواهد کرد. دستور pushcert نیز این موضوع را متوجه می‌شود و هنگام ارسال کلیدها به abc.my.domain، کلیدهای مناسب را انتقال می‌دهد.

شما همچنین می‌توانید پورت‌ها را نیز به فرایند تولید کلید اضافه کنید، و کلید تنها در صورتی استفاده خواهد شد که به مقصد مشخص روی پورت مشخص متصل شوید. این قابلیت می‌تواند برای ser2net مفید باشد.

برنامه gtlsshd روی ویندوز کار می‌کند، و تا حدی بدون گذرواژه (ورود فقط با گواهی) کار خواهد کرد، اما برخی موارد کار نمی‌کنند زیرا نشست ورود (logon) هیچ اعتبارنامه‌ای ذخیره نکرده است و قادر به ایجاد یک linked token برای ورودهای مدیریتی نیست؛ در نتیجه نمی‌توانید کارهای مدیریتی (admin) انجام دهید.

برای دور زدن این مشکل و همچنان مجاز شمردن ورود با گواهی، دو راهکار در پیش دارید:

می‌توانید از دستور storepw در gtlssh-keygen برای ذخیره گذرواژه خود در دایرکتوری .gtlssh استفاده کنید. این راهکار ایده‌آل نیست، اما به‌هر‌حال کلیدهای خصوصی شما نیز آنجا هستند، بنابراین تفاوت بزرگی ندارد. مدیران سیستم (Administrators) روی سیستم شما قادر به مشاهده گذرواژه‌تان خواهند بود، پس به این نکته توجه داشته باشید.

می‌توانید از گزینه --require-password در gtlsshd استفاده کنید. این کار باعث می‌شود حتی در صورت تأیید اعتبار گواهی، باز هم از شما گذرواژه درخواست شود. این کار یکی از اهداف داشتن گواهی (عدم نیاز به وارد کردن گذرواژه) را خنثی می‌کند، اما همچنان مزیت اصلی احراز هویت در سطح گواهی را، که امنیت بیشتر است، فراهم می‌سازد.

ایجاد یک کلید RSA با تعداد بیت‌های داده‌شده. مقدار پیش‌فرض 2048 است. معمولاً 1024، 2048، یا 4096.
ایجاد کلیدی که پس از تعداد روزهای مشخص‌شده منقضی می‌شود. مقدار پیش‌فرض 365 است.
دایرکتوری پایه برای gtlssh. مقدار پیش‌فرض $HOME/.gtlssh است. کلیدهای پیش‌فرض در اینجا قرار می‌گیرند.
مسیری برای قرار دادن کلیدهای غیرپیش‌فرض تولیدشده. مقدار پیش‌فرض برای گواهی‌های کاربری $HOME/.gtlssh/keycerts است. برای گواهی‌های سرور در یونیکس در sysconfdir (عموماً /etc) زیر /gtlssh قرار دارد. در ویندوز این مسیر ../etc/gtlsshd نسبت به دایرکتوری فایل اجرایی است.

توجه داشته باشید که در ویندوز، باید مجوزهای دایرکتوری کلید (یا خود کلیدها) را طوری تنظیم کنید که تنها System و Administrators به آن دسترسی داشته باشند. در غیر این صورت gtlsshd با خطای مربوط به مجوزهای کلید متوقف خواهد شد.

تنظیم common name در گواهی. مقدار پیش‌فرض برای گواهی‌های عادی نام کاربری شما و برای گواهی‌های سرور نام کامل دامنه (FQDN) است (که در صورت مشخص بودن keyname، نام کلید به عنوان پیشوند به آن افزوده می‌شود).
استفاده از الگوریتم داده‌شده برای تولید کلید؛ یکی از rsa، ec، یا ed25519. مقدار پیش‌فرض ed25519 است.
هیچ سؤالی نپرس، فقط عملیات را اجباری انجام بده. احتیاط کنید، این کار داده‌ها را بدون پرسش بازنویسی می‌کند.
چاپ شماره نسخه و خروج.
خروجی راهنما

دستورها عبارتند از:

راه‌اندازی دایرکتوری پایه (اگر از پیش راه‌اندازی نشده باشد) و ایجاد کلیدها. اگر چیزی مشخص نشود، کلید پیش‌فرض را در <basedir>/default.key و <basedir>/default.crt ایجاد می‌کند. در غیر این صورت کلیدها را به شکل <keydir>/<host>[,<port>].key و <keydir>/<host>[,<port>].crt ایجاد می‌نماید.
مشابه keygen، اما هیچ گزینه‌ای نمی‌پذیرد و تنها گواهی پیش‌فرض را ایجاد می‌کند.
کتابخانه openssl مورد استفاده توسط gtlssh نیاز دارد که گواهی‌های موجود در یک کتابخانه هش شوند تا بتواند آن‌ها را بیابد. این دستور هش‌ها را در دایرکتوری‌های داده‌شده مجدداً بازتولید می‌کند. اگر هیچ دایرکتوری مشخص نشود، عملیات هش‌گذاری مجدد را روی <basedir>/allowed_certs و <basedir>/server_certs انجام می‌دهد.

توجه داشته باشید که اگر کلیدهایی به این دایرکتوری‌ها اضافه کنید، باید آن‌ها را rehash کنید وگرنه کار نخواهند کرد.

rehash به‌طور خودکار تمام گواهی‌هایی را که منقضی شده‌اند حذف خواهد کرد.

افزودن فایل داده‌شده به عنوان یک گواهی عمومی مجاز برای hostname داده‌شده. این دستور فایل را در دایرکتوری <basedir>/allowed_certs با نام "hostname.crt" نصب می‌کند. همچنین دایرکتوری را rehash می‌نماید. اگر -i مشخص شده باشد، ورودی از stdin دریافت می‌شود و به فایل نیازی نبوده و استفاده نخواهد شد. اگر فایل مقصد از پیش موجود باشد، نام آن به "hostname.crt.1.crt" تغییر خواهد کرد.
قرار دادن گواهی محلی مربوط به میزبان داده‌شده روی میزبان دوردست، تا بتوان از آن برای ورود استفاده کرد. در صورت وجود، از اعتبارنامه‌های قدیمی (اعتبارنامه‌هایی با پسوند .1 در انتهای نام، مطابق با keygen) استفاده می‌کند. این ویژگی زمانی مفید است که گواهی خود را به‌روزرسانی کرده‌اید و باید گواهی جدید را به تعدادی از میزبان‌های دوردست ارسال کنید. این دستور نام گواهی را مطابق با آنچه در دستور keygen شرح داده شد پیدا می‌کند. در صورت وجود اعتبارنامه‌های قدیمی، از آن‌ها برای برقراری اتصال با gtlssh و ارسال گواهی استفاده خواهد کرد. در غیر این صورت از اعتبارنامه‌های پیش‌فرض استفاده کرده و امیدوار است که کار کند؛ این حالت احتمالاً تنها زمانی مفید خواهد بود که گذرواژه‌ها پذیرفته شوند. این قابلیت تنها تا یک مرحله قبل keygen کار می‌کند؛ اگر دستور keygen را دو بار برای یک میزبان اجرا کرده باشید، باید گواهی را به‌صورت دستی انتقال دهید. به‌طور پیش‌فرض نام اعتبارنامه در میزبان دوردست برابر با خروجی دستور 'hostname -f' در ماشین محلی است، گزینه -n این رفتار را بازنویسی می‌کند.
تنها مخصوص ویندوز است؛ برای جزئیات به بخش "ترفندهای ویندوز (WINDOWS HACKS)" در بالا مراجعه کنید. گذرواژه شما را دریافت کرده و در دایرکتوری .gtlssh ذخیره می‌کند.
ایجاد کلیدها برای سرور، معمولاً در /etc/gtlssh/gtlsshd.key و /etc/gtlssh/gtlsshd.crt. برای انجام این کار معمولاً باید کاربر ریشه (root) باشید. برای راه‌اندازی اولیه gtlsshd استفاده می‌شود.

اگر یک keyname مشخص کنید، common name مورد استفاده برای کلید به‌طور پیش‌فرض به صورت "<keyname>.<hostname>" خواهد بود، مگر اینکه آن را با --commonname تنظیم کنید. اگر یک keyname مشخص نکنید (که به‌طور پیش‌فرض gtlsshd در نظر گرفته می‌شود)، common name صرفاً همان hostname خواهد بود. این کار از مشکل زیر جلوگیری می‌کند...

نکته: اگر چندین سرور را روی یک سیستم اجرا می‌کنید، باید برای هر کدام یک common name متفاوت در نظر بگیرید. برخی از نسخه‌های openssl به گواهی دیگری با common name یکسان به عنوان بخشی از همان زنجیره گواهی نگاه می‌کنند و با این خطا مواجه خواهید شد:


authority and subject key identifier mismatch

بنابراین اگر برای نمونه برنامه‌های ser2net و gtlsshd را روی یک سیستم اجرا می‌کنید، باید common nameهای متفاوتی داشته باشند.

در ویندوز، باید تمامی مجوزها را از فایل کلید به جز برای SYSTEM و Administrator حذف کنید. اگر gtlssh اجرا نشد، این اولین موردی است که باید بررسی کنید. (می‌توانید همان‌طور که در ادامه توضیح داده شده یک کنسول SYSTEM باز کنید و "gtlssh -d" را اجرا نمایید تا به شما خطا بدهد؛ این کار برای اشکال‌زدایی مفید است.) متأسفانه این برنامه هنوز این کار را به‌طور پیش‌فرض انجام نمی‌دهد. برای انجام این کار باید فایل را به عنوان کاربر SYSTEM پیکربندی کنید. مراحل به این صورت است:

یک کنسول مدیر سیستم (administrator console) اجرا کنید.

دستور "psexec -sid cmd"; را برای اجرای یک کنسول به عنوان SYSTEM اجرا کنید.

دستور "explorer" را اجرا کنید.

در explorer به سراغ فایل کلید بروید، روی آن راست‌کلیک کرده و Properties و سپس Security را انتخاب کنید؛ از آنجا می‌توانید آن را تغییر دهید.

gtlssh(1), gtlsshd(8)

هیچ موردی وجود ندارد.

Corey Minyard <minyard@acm.org>

01/02/19 Key handling for gtlssh