Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ssh-tpm-agent — SSH 에이전트로서 TPM으로 봉인된 키를 생성 및 관리하여 하드웨어 바인딩 인증을 제공하며, 키 생성, 가져오기, 래핑, PIN 보호 및 프록시 폴백을 지원합니다. | Kitploit
도구/GitHubGitHub/foxboron/ssh-tpm-agent
Encryption/Decryption ToolsCloud SecurityDevSecOpsHardware SecurityIdentity & Access Management (IAM)Authentication
GitHubfoxboron/ssh-tpm-agent

ssh-tpm-agent

SSH 에이전트로서 TPM으로 봉인된 키를 생성 및 관리하여 하드웨어 바인딩 인증을 제공하며, 키 생성, 가져오기, 래핑, PIN 보호 및 프록시 폴백을 지원합니다.

저장소 보기
7433962일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

TPM용 SSH 에이전트

ssh-tpm-agent는 SSH 서버 인증을 위해 TPM(Trusted Platform Module)에서 키를 생성할 수 있는 ssh-agent 호환 에이전트입니다.

TPM 봉인 키는 TPM(Trusted Platform Module) 내부에서 생성되어 .tpm 접미사가 붙은 파일에 봉인된 개인 키입니다. 이 키는 생성된 하드웨어에 바인딩되며 다른 시스템으로 전송할 수 없습니다.

이를 통해 기존 PKCS11 라이브러리를 ssh-agent 및/또는 ssh 클라이언트에 사이드로드할 필요 없이 네이티브 클라이언트를 활용할 수 있습니다.

이 프로젝트는 go-tpm-keyfiles 프로젝트를 통해 구현된 TPM 2.0 Key Files를 사용합니다.

기능

  • 작동하는 ssh-agent.
  • TPM에서 보호된 SSH 키 생성.
  • 가져오기를 위한 원격 래핑 SSH 키 생성.
  • PIN 지원, TPM의 사전 공격 방어 기능으로 암호 대신 낮은 엔트로피 PIN 사용 가능.
  • TPM 세션 암호화.
  • 대체를 위한 다른 ssh-agent 서버 프록시 지원.

SWTPM 지원

TPM을 직접 사용하는 대신 --swtpm 또는 export SSH_TPM_AGENT_SWTPM=1을 사용하여 swtpm으로 백업된 ID를 생성할 수 있으며, 이 ID는 /var/tmp/ssh-tpm-agent 아래에 저장됩니다.

참고: swtpm은 보안 속성을 제공하지 않으며 테스트 용도로만 사용해야 합니다.

설치

이 플러그인을 설치하는 가장 간단한 방법은 다음을 실행하는 것입니다:

root@kitploit:~
go install github.com/foxboron/ssh-tpm-agent/cmd/...@latest

또는 사전 빌드된 바이너리를 다운로드하세요.

사용법

root@kitploit:~
# Create key
$ ssh-tpm-keygen
Generating a sealed public/private ecdsa key pair.
Enter file in which to save the key (/home/fox/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/fox/.ssh/id_ecdsa.tpm
Your public key has been saved in /home/fox/.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/fox/.ssh/id_ecdsa.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOTOsMXyjTc1wiQSKhRiNhKFsHJNLzLk2r4foXPLQYKR0tuXIBMTQuMmc7OiTgNMvIjMrcb9adgGdT3s+GkNi1g=

# Using the socket
$ ssh-tpm-agent -l /var/tmp/tpm.sock

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

$ ssh [email protected]

참고: ssh-tpm-agent의 경우 명령줄 플래그 -o 또는 --owner-password를 사용하여 TPM 소유자 암호를 지정할 수 있으며, 이 방법이 권장됩니다. 또는 환경 변수 SSH_TPM_AGENT_OWNER_PASSWORD를 사용할 수 있습니다.

기존 키 가져오기

TPM에서 키를 일상적으로 사용하면서 원격 보안 저장소에 키를 백업하려는 경우 유용합니다.

root@kitploit:~
# Create a key, or use an existing one
$ 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 fox@framework
The key's randomart image is:
+---[ECDSA 256]---+
|           .+=o..|
|           o. oo.|
|          o... .o|
|       . + ..  ..|
|        S .   . o|
|       o * . oo=*|
|        ..+.oo=+E|
|        .++o...o=|
|       .++++. .+ |
+----[SHA256]-----+

# Import the key
$ 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.

사용자 서비스 설치

소켓 활성화 서비스를 사용하면 시스템에서 필요할 때 ssh-tpm-agent를 시작할 수 있습니다.

root@kitploit:~
# Using the socket
$ ssh-tpm-agent --install-user-units
Installed /home/fox/.config/systemd/user/ssh-tpm-agent.socket
Installed /home/fox/.config/systemd/user/ssh-tpm-agent.service
Enable with: systemctl --user enable --now ssh-tpm-agent.socket

$ systemctl --user enable --now ssh-tpm-agent.socket

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

$ ssh [email protected]

프록시 지원

root@kitploit:~
# Start the usual ssh-agent
$ eval $(ssh-agent)

# Create a strong RSA key
$ ssh-keygen -t rsa -b 4096 -f id_rsa -C ssh-agent
...
The key fingerprint is:
SHA256:zLSeyU/6NKHGEvyZLA866S1jGqwdwdAxRFff8Z2N1i0 ssh-agent

$ ssh-add id_rsa
Identity added: id_rsa (ssh-agent)

# Print looonnggg key
$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]8TWynQ== ssh-agent

# Create key on the TPM
$ ssh-tpm-keygen -C ssh-tpm-agent
Generating a sealed public/private ecdsa key pair.
Enter file in which to save the key (/home/fox/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Confirm passphrase:
Your identification has been saved in /home/fox/.ssh/id_ecdsa.tpm
Your public key has been saved in /home/fox/.ssh/id_ecdsa.pub
The key fingerprint is:
SHA256:PoQyuzOpEBLqT+xtP0dnvyBVL6UQTiQeCWN/EXIxPOo
The key's randomart image is the color of television, tuned to a dead channel.

# Start ssh-tpm-agent with a proxy socket
$ ssh-tpm-agent -A "${SSH_AUTH_SOCK}" &

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

# ssh-tpm-agent is proxying the keys from ssh-agent
$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]8TWynQ== ssh-agent
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNo[...]q4whro= ssh-tpm-agent

ssh-tpm-add

root@kitploit:~
$ ssh-tpm-agent --no-load &
2023/08/12 13:40:50 Listening on /run/user/1000/ssh-tpm-agent.sock

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

$ ssh-add -L
The agent has no identities.

$ ssh-tpm-add $HOME/.ssh/id_ecdsa.tpm
Identity added: /home/user/.ssh/id_ecdsa.tpm

$ ssh-add -L
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJCxqisGa9IUNh4Ik3kwihrDouxP7S5Oun2hnzTvFwktszaibJruKLJMxHqVYnNwKD9DegCNwUN1qXCI/UOwaSY= test

원격 서버에서 클라이언트 머신을 위한 개인 키 생성 및 래핑

클라이언트 측에서 계층 아래에 기본 키를 생성합니다. 이 예제에서는 SRK와 함께 소유자 계층을 사용합니다.

출력 파일 srk.pem은 키를 생성하는 원격 측으로 전송되어야 합니다. 이는 클라이언트 프로비저닝의 일부로 수행될 수 있습니다.

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

원격 측에서 비밀번호 없이 p256 SSH 키를 생성하고, 클라이언트 측의 srk.pem을 사용하여 ssh-tpm-keygen으로 래핑합니다.

root@kitploit:~
$ ssh-keygen -t ecdsa -b 256 -N "" -f ./ecdsa.key
# OR with openssl
$ openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -out ecdsa.key

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

클라이언트 측에서 wrapped_id_ecdsa를 로드 가능한 키로 언래핑할 수 있습니다.

root@kitploit:~
$ ssh-tpm-keygen --import ./wrapped_id_ecdsa.tpm -f id_ecdsa.tpm
$ ssh-tpm-add id_ecdsa.tpm

ssh-tpm-hostkey

ssh-tpm-agent는 TPM 내부에 호스트 키를 저장하는 것도 지원합니다.

root@kitploit:~
$ sudo ssh-tpm-keygen -A
2023/09/03 17:03:08 INFO Generating new ECDSA host key
2023/09/03 17:03:08 INFO Wrote /etc/ssh/ssh_tpm_host_ecdsa_key.tpm
2023/09/03 17:03:08 INFO Generating new RSA host key
2023/09/03 17:03:15 INFO Wrote /etc/ssh/ssh_tpm_host_rsa_key.tpm

$ sudo ssh-tpm-hostkeys --install-system-units
Installed /usr/lib/systemd/system/ssh-tpm-agent.service
Installed /usr/lib/systemd/system/ssh-tpm-agent.socket
Installed /usr/lib/systemd/system/ssh-tpm-genkeys.service
Enable with: systemctl enable --now ssh-tpm-agent.socket

$ sudo ssh-tpm-hostkeys --install-sshd-config
Installed /etc/ssh/sshd_config.d/10-ssh-tpm-agent.conf
Restart sshd: systemd restart sshd

$ systemctl enable --now ssh-tpm-agent.socket
$ systemd restart sshd

$ sudo ssh-tpm-hostkeys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCLDH2xMDIGb26Q3Fa/kZDuPvzLzfAH6CkNs0wlaY2AaiZT2qJkWI05lMDm+mf+wmDhhgQlkJAHmyqgzYNwqWY0= root@framework
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAoMPsv5tEpTDFw34ltkF45dTHAPl4aLu6HigBkNnIzsuWqJxhjN6JK3vaV3eXBzy8/UJxo/R0Ml9/DRzFK8cccdIRT1KQtg8xIikRReZ0usdeqTC+wLpW/KQqgBLZ1PphRINxABWReqlnbtPVBfj6wKlCVNLEuTfzi1oAMj3KXOBDcTTB2UBLcwvTFg6YnbTjrpxY83Y+3QIZNPwYqd7r6k+e/ncUl4zgCvvxhoojGxEM3pjQIaZ0Him0yT6OGmCGFa7XIRKxwBSv9HtyHf5psgI+X5A2NV2JW2xeLhV2K1+UXmKW4aXjBWKSO08lPSWZ6/5jQTGN1Jg3fLQKSe7f root@framework

$ ssh-keyscan -t ecdsa localhost
# localhost:22 SSH-2.0-OpenSSH_9.4
localhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCLDH2xMDIGb26Q3Fa/kZDuPvzLzfAH6CkNs0wlaY2AaiZT2qJkWI05lMDm+mf+wmDhhgQlkJAHmyqgzYNwqWY0=

ssh-config

ssh-tpm-keygen으로 생성된 공개 키를 SSH 구성 내에서 사용할 수 있습니다.

아래 예제는 ssh-tpm-agent를 사용하고, 에이전트에서 모든 ID가 유출되지 않도록 공개 키도 전달합니다.

root@kitploit:~
Host example.com
    IdentityAgent $SSH_AUTH_SOCK

Host *
    IdentityAgent /run/user/1000/ssh-tpm-agent.sock
    IdentityFile ~/.ssh/id_ecdsa.pub

라이선스

MIT 라이선스에 따라 라이선스가 부여됩니다. LICENSE 또는 https://opensource.org/licenses/MIT를 참조하세요.

도구 다운로드