Servery a DevOps

Git na serveru: deploy klíče pro soukromé GitHub repozitáře

Jak bezpečně klonovat soukromý repozitář na VPS – deploy klíč jen pro čtení, více repozitářů přes ~/.ssh/config, safe.directory a alternativa s tokenem.

12. 10. 2026 · 4 min čtení

Chcete na VPS udělat git clone soukromého repozitáře a pak jen git pull při každé aktualizaci. Nejhorší řešení je zkopírovat na server svůj osobní SSH klíč – ten má přístup ke všem vašim repozitářům a účtu. Správně je použít deploy klíč: SSH klíč svázaný s jediným repozitářem.

Co je deploy klíč

  • Veřejný SSH klíč přidaný do nastavení jednoho repozitáře (ne účtu).
  • Ve výchozím stavu má přístup jen pro čtení – server může stahovat, ale nemůže pushovat.
  • Když server někdo kompromituje, útočník získá přístup jen k tomuto repozitáři, a to jen ke čtení.
  • Jeden klíč lze na GitHubu použít jako deploy klíč jen u jednoho repozitáře.

Krok 1: vygenerujte klíč na serveru

Přihlaste se jako uživatel, pod kterým aplikace běží (ne root):

ssh-keygen -t ed25519 -f ~/.ssh/deploy_mojeapp -N "" -C "deploy mojeapp@$(hostname)"
cat ~/.ssh/deploy_mojeapp.pub

Klíč bez passphrase (-N "") je tu v pořádku – server ho musí používat bez interakce. Privátní klíč nikdy neopouští server.

Krok 2: přidejte klíč do repozitáře

Na GitHubu: repozitář → Settings → Deploy keys → Add deploy key. Vložte obsah .pub souboru, pojmenujte ho (např. „VPS produkce“) a nezaškrtávejte Allow write access, pokud server nemusí pushovat.

Totéž přes GitHub CLI:

gh repo deploy-key add ~/.ssh/deploy_mojeapp.pub --repo firma/mojeapp --title "VPS produkce"

Krok 3: SSH konfigurace

Aby Git věděl, který klíč použít, a aby šlo mít více repozitářů s různými klíči, vytvořte alias v ~/.ssh/config:

Host github-mojeapp
    HostName github.com
    User git
    IdentityFile ~/.ssh/deploy_mojeapp
    IdentitiesOnly yes

IdentitiesOnly yes zajistí, že SSH nezkouší jiné klíče – jinak by GitHub mohl přijmout špatný klíč a odmítnout přístup k repozitáři.

chmod 600 ~/.ssh/config ~/.ssh/deploy_mojeapp

Ověření:

ssh -T git@github-mojeapp
# Hi firma/mojeapp! You've successfully authenticated, but GitHub does not provide shell access.

Pozdrav obsahuje jméno repozitáře – poznáte, že se použil správný deploy klíč.

Krok 4: klonování

V adrese místo github.com použijte alias:

git clone git@github-mojeapp:firma/mojeapp.git /srv/mojeapp

U existujícího klonu změňte remote:

git remote set-url origin git@github-mojeapp:firma/mojeapp.git

Druhý repozitář? Nový klíč, nový deploy key v GitHubu, nový blok Host github-druhaapp v configu.

Aktualizace na serveru

Bezpečný pull, který selže místo vytvoření merge commitu, když se historie rozešla:

cd /srv/mojeapp
git pull --ff-only

Pokud na serveru nikdy nic neupravujete ručně (a neměli byste), můžete vynutit přesný stav větve:

git fetch origin
git reset --hard origin/main

Tento postup je základem automatického deploye přes GitHub Actions.

Časté problémy

Permission denied (publickey) - Spouštíte Git jako jiný uživatel (např. sudo git pull použije klíče roota). - Špatná práva k ~/.ssh (má být 700, klíče 600). - Diagnostika: ssh -vT git@github-mojeapp ukáže, který klíč se zkouší.

ERROR: Repository not found - Klíč patří k jinému repozitáři. Zkontrolujte pozdrav z ssh -T.

detected dubious ownership in repository - Složku vlastní jiný uživatel, než který Git spouští. Řešení je opravit vlastníka (sudo chown -R deploy:deploy /srv/mojeapp), případně repozitář výslovně povolit:

git config --global --add safe.directory /srv/mojeapp

Host key verification failed - Při prvním připojení k GitHubu je potřeba přijmout otisk serveru. Přidejte ho předem:

ssh-keyscan -t ed25519 github.com >> ~/.ssh/known_hosts

Otisk ověřte proti hodnotám zveřejněným v dokumentaci GitHubu (GitHub’s SSH key fingerprints).

Alternativa: fine-grained token přes HTTPS

Pokud SSH nelze použít (firewall blokuje port 22 ven), vytvořte v GitHubu fine-grained personal access token omezený na jeden repozitář s oprávněním Contents: Read-only a nastavte credential helper:

git config --global credential.helper store
git clone https://github.com/firma/mojeapp.git
# Username: váš GitHub login, Password: token

Pozor, store ukládá token v čitelné podobě do ~/.git-credentials. Token má expiraci – nastavte si připomínku. Pro serverové nasazení je deploy klíč obvykle praktičtější. Jako další alternativa existuje SSH přes port 443 (HostName ssh.github.com, Port 443).

Když server potřebuje i pushovat

Například skript, který commituje vygenerované soubory. Zaškrtněte u deploy klíče Allow write access, ale zvažte ochranu větve main a pushování do samostatné větve.

Tip

V ColdHost AI můžete připojit VPS přes SSH a pracovat s gitem na serveru (clone, pull, commit, push) přes propojení s GitHubem. Navržené příkazy vždy vidíte a každý schvalujete kliknutím.