SSH-TPM-KEYGEN(1) ssh-tpm-keygen manual SSH-TPM-KEYGEN(1)

ssh-tpm-keygen - ابزار ایجاد کلید برای ssh-tpm-agent

ssh-tpm-keygen [OPTIONS]...

ssh-tpm-keygen --wrap PATH --wrap-with PATH

ssh-tpm-keygen --import PATH

ssh-tpm-keygen --print-pubkey PATH

ssh-tpm-keygen --supported

ssh-tpm-keygen -p [-f keyfile] [-P old passphrase] [-N new passphrase]

ssh-tpm-keygen -A [-f path prefix] [--hierarchy hierarchy]

ssh-tpm-keygen برنامه‌ای است که امکان ایجاد کلیدهای بسته‌بندی‌شده با TPM را برای ssh-tpm-agent فراهم می‌کند.

-A

تولید کلیدهای میزبان (host keys) برای تمام انواع کلید (rsa و ecdsa).

-b BITS

تعداد بیت‌های کلید برای ایجاد.
•rsa: 2048 (پیش‌فرض)
•ecdsa: 256 (پیش‌فرض) | 384 | 521

-C COMMENT

ارائه یک یادداشت (comment) همراه با کلید.

-f PATH

مسیر فایل کلید خروجی.

-N PASSPHRASE

عبارت‌عبور (passphrase) برای کلید.

-o, --owner-password PASSPHRASE

درخواست گذرواژه مالک (owner password).

-t [ecdsa | rsa]

مشخص کردن نوع کلید برای ایجاد. پیش‌فرض ecdsa است.

-I, --import PATH

وارد کردن (import) کلید موجود به ssh-tpm-agent.

--parent-handle HIERARCHY

والد (parent) برای کلید TPM. می‌تواند یک سلسله‌مراتب (hierarchy) یا یک هندل پایدار (persistent handle) باشد.

سلسله‌مراتب‌های موجود: - owner، o (پیش‌فرض) - endorsement، e - null، n - platform، p

--print-pubkey PATH

چاپ کلید عمومی با دریافت یک کلید خصوصی TPM.

--supported

فهرست کردن انواع کلیدهای پشتیبانی‌شده توسط TPM.

--hierarchy HIERARCHY

ایجاد یک کلید عمومی. تنها می‌تواند همراه با -A استفاده شود.

برای نحوه استفاده، بخش Hierarchy Keys در ssh-tpm-agent(1) را ببینید.

سلسله‌مراتب‌های موجود:

•owner, o
•endorsement, e
•null, n
•platform, p

--wrap PATH

یک کلید SSH جهت بسته‌بندی برای وارد کردن در ماشین راه دور.

--wrap-with PATH

کلید والد برای بسته‌بندی کلید SSH با آن.

ایجاد یک کلید با ssh-tpm-keygen.

$ ssh-tpm-keygen
Generating a sealed public/private ecdsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ecdsa.tpm
Your public key has been saved in /home/user/.ssh/id_ecdsa.pub
The key fingerprint is:
SHA256:NCMJJ2La+q5tGcngQUQvEOJP3gPH8bMP98wJOEMV564
The key's randomart image is the color of television, tuned to a dead channel.
$ cat /home/user/.ssh/id_ecdsa.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOTOsMXyjTc1wiQSKhRiNhKFsHJNLzLk2r4foXPLQYKR0tuXIBMTQuMmc7OiTgNMvIjMrcb9adgGdT3s+GkNi1g=

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

یک کلید ایجاد کنید، یا از یک کلید موجود استفاده نمایید.

$ ssh-keygen -t ecdsa -f id_ecdsa
Generating public/private ecdsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ecdsa
Your public key has been saved in id_ecdsa.pub
The key fingerprint is:
SHA256:bDn2EpX6XRX5ADXQSuTq+uUyia/eV3Z6MW+UtxjnXvU user@localhost
The key's randomart image is:
+---[ECDSA 256]---+
|           .+=o..|
|           o. oo.|
|          o... .o|
|       . + ..  ..|
|        S .   . o|
|       o * . oo=*|
|        ..+.oo=+E|
|        .++o...o=|
|       .++++. .+ |
+----[SHA256]-----+

کلید را با استفاده از سوییچ --import وارد کنید.

$ ssh-tpm-keygen --import id_ecdsa
Sealing an existing public/private ecdsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ecdsa.tpm
The key fingerprint is:
SHA256:bDn2EpX6XRX5ADXQSuTq+uUyia/eV3Z6MW+UtxjnXvU
The key's randomart image is the color of television, tuned to a dead channel.

در سمت کلاینت یک کلید اصلی (primary key) تحت یک سلسله‌مراتب ایجاد کنید. این مثال از سلسله‌مراتب owner به همراه یک SRK استفاده خواهد کرد.

فایل خروجی srk.pem باید به سمت راه دور که کلید را ایجاد می‌کند منتقل شود. این کار می‌تواند به عنوان بخشی از آماده‌سازی (provisioning) کلاینت انجام پذیرد.

$ tpm2_createprimary -C o -G ecc -g sha256 -c prim.ctx -a 'restricted|decrypt|fixedtpm|fixedparent|sensitivedataorigin|userwithauth|noda' -f pem -o srk.pem

در سمت راه دور یک کلید SSH از نوع p256 بدون گذرواژه ایجاد می‌کنیم و آن را با استفاده از ssh-tpm-keygen به کمک srk.pem دریافتی از سمت کلاینت بسته‌بندی می‌نماییم.

$ ssh-keygen -t ecdsa -b 256 -N "" -f ./ecdsa.key

یا با openssl:

$ openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -out ecdsa.key

بسته‌بندی با ssh-tpm-keygen:

$ ssh-tpm-keygen --wrap-with srk.pub --wrap ecdsa.key -f wrapped_id_ecdsa

در سمت کلاینت می‌توانیم wrapped_id_ecdsa را به یک کلید قابل بارگذاری بازگشایی (unwrap) کنیم.

$ ssh-tpm-keygen --import ./wrapped_id_ecdsa.tpm --output id_ecdsa.tpm
$ ssh-tpm-add id_ecdsa.tpm

~/ssh/id_rsa.tpm, ~/ssh/id_ecdsa.tpm

شامل کلیدهای خصوصی ssh مورد استفاده توسط ssh-tpm-agent است. این‌ها فایل‌های کلید TPM 2.0 TSS هستند و به‌طور امن توسط TPM بسته‌بندی شده‌اند. آن‌ها را می‌توان به‌صورت عمومی به اشتراک گذاشت زیرا فقط توسط همان TPM که روی آن ایجاد شده‌اند قابل استفاده هستند. با این حال احتمالاً بهتر است این کار را انجام ندهید.

~/ssh/id_rsa.pub, ~/ssh/id_ecdsa.pub

شامل کلیدهای عمومی ssh است. این فایل‌ها می‌توانند به‌صورت عمومی به اشتراک گذاشته شوند و قالبی مشابه با موارد ایجادشده توسط ssh-keygen(1) دارند.

ssh-agent(1), ssh(1), ssh-tpm-keygen(1), ssh-keygen(1)

مشخصات ASN.1 برای فایل‌های کلید TPM 2.0 https://www.hansenpartnership.com/draft-bottomley-tpm2-keys.html

2026-08-10 ssh-tpm-agent v0.9.0