Marco
09/19/2025, 12:08 PMMarvin
09/19/2025, 12:08 PMMarvin
09/19/2025, 12:13 PMgit_clone step just shells out to git in the runtime environment. It does not accept an SSH private key as a parameter. “The SSH key must be added to the worker” means the OS user that runs your Process worker must be able to use SSH to your Git host using standard Git/SSH mechanisms.
Here are supported ways to “add the key to the worker” (pick one):
1) Put the key in the worker user’s ~/.ssh
- Ensure your deployment uses an SSH URL (e.g., git@github.com:org/repo.git).
- Install the key for the user that runs `prefect worker start`:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
# write your private key to id_ed25519 (or id_rsa)
printf '%s\n' '-----BEGIN OPENSSH PRIVATE KEY----- ... -----END OPENSSH PRIVATE KEY-----' > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
# add your Git host to known_hosts (recommended)
ssh-keyscan -t rsa,ecdsa,ed25519 <http://github.com|github.com> >> ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
# test from the same user
git ls-remote git@github.com:org/repo.git
- If that test works, git_clone will work when your flow runs.
2) Use an SSH agent
- Start an agent and add the key before starting the worker so the worker inherits `SSH_AUTH_SOCK`:
eval "$(ssh-agent -s)"
ssh-add /path/to/your/key
prefect worker start --pool <your-pool>
3) Use GIT_SSH_COMMAND (no agent, key outside ~/.ssh)
- Point Git to a specific key and known_hosts file via env vars when starting the worker:
export GIT_SSH_COMMAND="ssh -i /secure/path/id_ed25519 -o IdentitiesOnly=yes -o UserKnownHostsFile=/secure/path/known_hosts -o StrictHostKeyChecking=yes"
prefect worker start --pool <your-pool>
Notes and tips
- File permissions matter: private keys must be chmod 600 or OpenSSH will refuse to use them.
- Make sure known_hosts is populated (using ssh-keyscan or your org’s approved method) to avoid strict host key failures.
- In Prefect 3.x, git_clone does not accept an ssh_key argument. The credentials or access_token parameters are for HTTPS-based auth; for SSH, rely on the worker’s SSH config.
- Example prefect.yaml pull step with SSH:
pull:
- prefect.deployments.steps.pull.git_clone:
repository: "git@github.com:org/repo.git"
branch: "main"
Docs for reference
- git_clone step: https://docs.prefect.io/v3/api-ref/python/prefect-deployments-steps-pull#git-clone
- Process worker concept: https://docs.prefect.io/v3/concepts/workers#process
If you can share:
- the OS the worker is running on
- whether it’s run interactively or as a systemd/service user
- whether you prefer not to write a key to disk (agent vs env var)
…I can tailor exact setup commands (including a systemd unit example if you’re running it as a service).