使用公钥认证访问 Git 仓库可替代密码登录,推荐 ed25519 算法生成密钥,配置 SSH 远程地址,服务端禁用密码登录并限制公钥权限,客户端启用 ssh-agent 保护私钥。

使用公钥认证访问 Git 仓库,能有效替代密码登录,避免凭证泄露风险,是 Linux 下最基础也最关键的加固手段。
生成并管理安全的 SSH 密钥对
密钥强度直接影响安全性。推荐使用 ed25519 算法(速度快、抗量子、密钥短),若需兼容老旧系统,可选 rsa 并确保长度 ≥ 4096 位。
生成命令示例:
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519 -N ""建议为不同用途(如工作/个人/CI)创建独立密钥,并通过 ~/.ssh/config 文件绑定 Host 别名与对应私钥,避免混用。
配置 Git 远程地址使用 SSH 协议
确认远程仓库 URL 是 SSH 格式(非 HTTPS),典型形式为:git@github.com:username/repo.git 或 git@gitlab.example.com:group/project.git。
若原为 HTTPS 地址,执行以下命令切换:
git remote set-url origin git@host:user/repo.git之后所有 git push/pull 均走 SSH 通道,自动调用本地密钥。
服务端严格限制公钥权限
在 Git 托管平台(GitHub/GitLab/Gitea)或自建服务中,仅允许上传经过审核的公钥,并禁用密码登录和弱算法(如 ssh-rsa with SHA-1)。
若自建 OpenSSH + Git 服务,检查 /etc/ssh/sshd_config 是否包含:
- PubkeyAuthentication yes
- PasswordAuthentication no
- KexAlgorithms curve25519-sha256,ecdh-sha2-nistp521
- CASignatureAlgorithms ssh-ed25519,sk-ssh-ed25519@openssh.com
重启 SSH 服务后生效:sudo systemctl restart sshd。
客户端增强:启用代理与密钥保护
避免私钥长期驻留内存,推荐启用 ssh-agent 并设置超时自动卸载:
eval "$(ssh-agent -s)"ssh-add -t 3600 ~/.ssh/id_ed25519
还可配合 gpg-agent 或硬件密钥(YubiKey)存储私钥,实现物理级防护。
对于 CI/CD 环境,使用部署密钥(Deploy Keys)而非用户密钥,并限定只读或单仓库权限,最小化暴露面。










