fuk

Reconnaissance

CLI-утилита на Go для массового получения SSH-публичных ключей пользователей из различных источников: GitHub, GitLab, SourceHut, Forgejo/Gitea, ssh-keyscan для хост-ключей. Читает конфигурационный TOML-файл со списком пользователей/хостов и выдаёт JSON с их ключами. Применяется в разведке (сбор ключей потенциальных целей), управлении `authorized_keys` и `allowed_signers` в Nix/NixOS окружениях. Название — акроним: Fetch User Keys.

Добавлен 16.07.2026 · Обновлён 16.07.2026 · Reconnaissance
Установка
# 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

builds.sr.ht status

Никому не нужен этот fuk… поэтому тебе придётся взять его самому.

Fetch User Keys (Получение пользовательских ключей) — простой инструмент для получения SSH-ключей из различных источников.

Источники

  • [x] Сырые — без получения, только ключ из конфигурации
  • [x] Кузницы (создатели кода)
    • [x] GitHub
    • [x] SourceHut
    • [x] GitLab
    • [x] Forgejo
  • [x] Ключи хоста через 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"
    ]
}
Комментарии
Войдите, чтобы оставить комментарий