CLI-утилита на Go для массового получения SSH-публичных ключей пользователей из различных источников: GitHub, GitLab, SourceHut, Forgejo/Gitea, ssh-keyscan для хост-ключей. Читает конфигурационный TOML-файл со списком пользователей/хостов и выдаёт JSON с их ключами. Применяется в разведке (сбор ключей потенциальных целей), управлении `authorized_keys` и `allowed_signers` в Nix/NixOS окружениях. Название — акроним: Fetch User Keys.
# go install (модульный путь SourceHut)
go install git.sr.ht/~hauleth/fuk@latest
# Из исходников
git clone https://git.sr.ht/~hauleth/fuk
cd fuk
go build -o fuk .
# Конфигурация keys.toml:
# [[entry]]
# name = "target"
# keys = [
# { github = "target_username" },
# { gitlab = "target_username" },
# { sourcehut = "~target_username" },
# ]
# [[entry]]
# name = "server"
# keys = [
# { host = [ "192.168.1.100", "server.local" ] }
# ]
# Запуск
fuk keys.toml > keys.json # JSON с ключами всех записей
# OSINT-пример: собрать ключи команды по GitHub-usernames
cat > /tmp/team.toml << 'EOF'
[[entry]]
name = "alice"
keys = [{ github = "alice" }, { gitlab = "alice_dev" }]
[[entry]]
name = "bob"
keys = [{ github = "bob123" }]
EOF
fuk /tmp/team.toml | jq '.'
Никому не нужен этот fuk… поэтому тебе придётся взять его самому.
Fetch User Keys (Получение пользовательских ключей) — простой инструмент для получения SSH-ключей из различных источников.
ssh-keyscanВ моем случае причиной была возможность легко подготовить набор SSH-ключей для использования с [agenix][], инструментом для управления секретами при работе с Nix-развертываниями. Однако область применения может быть расширена и на другие ситуации:
allowed_signers для проверки SSH-подписей под коммитами и тому подобным.authorized_keys для разрешения пользователям загружать свои ключи без ручного вмешательства администратора.Определите файл конфигурации, например keys.toml, в следующей форме:
[[entry]]
name = "hauleth"
keys = [
{ sourcehut = "~hauleth" },
{ github = "hauleth" }
]
[[entry]]
name = "heimdall"
keys = [
{ host = [ "heimdall" ] }
]
Теперь вы можете запустить
fuk keys.toml > keys.json
и получить JSON-документ, содержащий все ключи, предоставленные этими источниками:
{
"hauleth": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN7q0wm7C+EX0ORpRxeyhvWTT2BMPjSRQIZmbzPLIiHC"
],
"heimdall": [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC36MGQHLsmS1aUtRYyC40lguLR4/sRXDxwT8ieSkGgLFc95xQ/7m8tIYmtCTwIMvN9gzJkW6ufbWfuX1iBYoWVVO/QdJz/5/Nl4ZofyfdFSk4ZYaWSOnMlY7vV9K0L0WsEEf1R3Erf42Ek051PcO8IeTtYTxkaugrBOPSVmzBOZu9osnJbatCsODe7uIWRU8jd5gmL7a9pmk9Q8nWDDXzu4bWd9Dg1M1d+rIY368J4LNOzknPZUkOcK1TpLkutB6bozvaeKSBNaqihA0un1VETArhiUmUY6a0y5e34PNLQjbl5UqHS5tmU5jmolDIJV2hF78+XrgaZf+CNoQ1Ac3QJ",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEZsoYDw74ez/2YLPZMDQgN/KxyGiXHZt+CowWMiyoyL"
]
}