SSH-KEYSCAN(1) راهنمای دستورات کاربری SSH-KEYSCAN(1)

ssh-keyscan - جمع‌آوری کلیدهای عمومی میزبان SSH

ssh-keyscan [-46cDHqv] [-f file] [-O option] [-p port] [-T timeout] [-t type] [host | addrlist namelist]

دستور ssh-keyscan ابزاری برای جمع‌آوری کلیدهای عمومی میزبان SSH از چندین میزبان است. این ابزار برای کمک به ساخت و اعتبارسنجی فایل‌های ssh_known_hosts طراحی شده است که قالب آن‌ها در sshd(8) مستند شده است. ssh-keyscan یک رابط کاربری حداقلی مناسب برای استفاده در اسکریپت‌های پوسته (shell) و پرل (perl) فراهم می‌کند.

دستور ssh-keyscan از ورودی/خروجی سوکت غیرمسدودکننده (non-blocking) برای برقراری ارتباط همزمان و موازی با بیشترین تعداد ممکن از میزبان‌ها استفاده می‌کند، بنابراین بسیار کارآمد است. کلیدهای یک دامنه شامل ۱۰۰۰ میزبان را می‌توان در عرض چند ده ثانیه جمع‌آوری کرد، حتی اگر برخی از آن میزبان‌ها از کار افتاده باشند یا sshd(8) را اجرا نکنند. برای پویش، نیازی به دسترسی ورود به ماشین‌هایی که پویش می‌شوند نیست، و فرآیند پویش نیز شامل هیچ‌گونه رمزنگاری نمی‌شود.

میزبان‌هایی که باید پویش شوند را می‌توان با نام میزبان، آدرس یا محدوده شبکه CIDR (مانند 192.168.16/28) مشخص کرد. اگر یک محدوده شبکه مشخص شود، تمام آدرس‌های موجود در آن محدوده پویش خواهند شد.

دستور ssh-keyscan نمی‌تواند اصالت کلیدهای میزبان به‌دست‌آمده را تأیید کند، و یک مهاجم روی شبکه با امکان رهگیری ترافیک می‌تواند کلیدهای میزبان خود را جایگزین کند تا جعل هویت سرورها ممکن شود. به همین دلیل، خروجی ssh-keyscan باید خارج از باند (out of band) بررسی و اعتبارسنجی شود، یا تنها در صورتی مستقیماً برای احراز هویت میزبان استفاده شود که شبکه مورد اعتماد باشد.

گزینه‌ها به شرح زیر هستند:

-4
اجبار ssh-keyscan به استفاده از تنها آدرس‌های IPv4.
-6
اجبار ssh-keyscan به استفاده از تنها آدرس‌های IPv6.
درخواست گواهی‌ها (certificates) از میزبان‌های مقصد به‌جای کلیدهای ساده.
چاپ کلیدهای یافت‌شده در قالب رکوردهای SSHFP DNS. حالت پیش‌فرض چاپ کلیدها در قالبی است که به‌عنوان یک فایل known_hosts در ssh(1) قابل استفاده باشد.
خواندن میزبان‌ها یا جفت‌های “addrlist namelist” از file، یک مورد در هر خط. اگر به‌جای نام فایل، علامت - ارائه شود، ssh-keyscan از ورودی استاندارد خواهد خواند. نام‌های خوانده‌شده از فایل باید با یک آدرس، نام میزبان یا محدوده شبکه CIDR برای پویش آغاز شوند. آدرس‌ها و نام‌های میزبان می‌توانند به صورت اختیاری با نام‌های مستعار یا آدرس‌های جداشده با کاما دنبال شوند که به خروجی منتقل خواهند شد. به عنوان مثال:
192.168.11.0/24
10.20.1.1
happy.example.org
10.0.0.1,sad.example.org
درهم‌سازی (هش کردن) تمامی نام‌های میزبان و آدرس‌ها در خروجی. نام‌های هش‌شده می‌توانند به صورت عادی توسط ssh(1) و sshd(8) استفاده شوند، اما در صورت افشای محتوای فایل، اطلاعات هویتی را آشکار نمی‌کنند.
مشخص کردن یک گزینه به‌صورت کلید/مقدار. در حال حاضر، تنها یک گزینه پشتیبانی می‌شود:
انتخاب الگوریتم درهم‌سازی برای استفاده در هنگام چاپ رکوردهای SSHFP با استفاده از گزینه -D. الگوریتم‌های معتبر عبارتند از sha1 و sha256. حالت پیش‌فرض چاپ هر دو است.
اتصال به port مشخص‌شده روی میزبان راه دور.
حالت بی‌صدا (Quiet): نام میزبان سرور و بنرها در خطوط توضیحی چاپ نمی‌شوند.
تنظیم مهلت زمانی (timeout) برای تلاش‌های اتصال. اگر timeout ثانیه از زمان برقراری اتصال با یک میزبان یا از آخرین باری که داده‌ای از آن میزبان دریافت شد سپری شود، اتصال بسته شده و میزبان مورد نظر در دسترس تلقی نمی‌شود. مقدار پیش‌فرض ۵ ثانیه است.
تعیین نوع کلیدی که باید از میزبان‌های پویش‌شده دریافت شود. مقادیر ممکن عبارتند از: ecdsa، ed25519، ecdsa-sk، ed25519-sk یا rsa. می‌توان چندین نوع را با جدا کردن آن‌ها با کاما مشخص کرد. حالت پیش‌فرض دریافت تمامی انواع کلیدهای فوق است.
حالت پرحرف (Verbose): چاپ پیام‌های اشکال‌زدایی درباره پیشرفت فرآیند.

اگر یک فایل ssh_known_hosts با استفاده از ssh-keyscan و بدون تأیید اعتبار کلیدها ساخته شود، کاربران در برابر حملات مرد میانی (man in the middle) آسیب‌پذیر خواهند بود. از سوی دیگر، اگر مدل امنیتی چنین خطری را مجاز بداند، ssh-keyscan می‌تواند در شناسایی فایل‌های کلید دستکاری‌شده یا حملات مرد میانی که پس از ساخت فایل ssh_known_hosts آغاز شده‌اند، کمک کند.

/etc/ssh/ssh_known_hosts

چاپ کلید میزبان RSA برای ماشین hostname:

$ ssh-keyscan -t rsa hostname

پویش یک محدوده شبکه و چاپ تمام انواع کلیدهای پشتیبانی‌شده:

$ ssh-keyscan 192.168.0.64/25

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

$ ssh-keyscan -t rsa,ecdsa,ed25519 -f ssh_hosts | \
	sort -u - ssh_known_hosts | diff ssh_known_hosts -

ssh(1)، sshd(8)

RFC 4255: “Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints” (2006)

David Mazieres <dm@lcs.mit.edu> نسخه اولیه را نوشت، و Wayne Davison <wayned@users.sourceforge.net> پشتیبانی از نگارش ۲ پروتکل را اضافه کرد.

26 June 2026 OpenSSH