SSH密钥生成与配置
SSH密钥是Git中用于身份验证的重要工具,通过非对称加密实现安全通信。生成和配置SSH密钥可以避免每次操作时输入密码,同时提升仓库访问的安全性。
生成SSH密钥对
在本地生成SSH密钥对是配置的第一步。打开终端执行以下命令:
ssh-keygen -t ed25519 -C "your_email@example.com"
如果系统不支持Ed25519算法,可以使用RSA:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
命令执行后会提示:
- 选择密钥保存路径(默认
~/.ssh/id_ed25519
) - 设置密钥密码(可选但推荐)
生成完成后会在~/.ssh
目录下出现两个文件:
- 私钥文件:
id_ed25519
- 公钥文件:
id_ed25519.pub
查看并复制公钥
使用以下命令查看公钥内容:
cat ~/.ssh/id_ed25519.pub
输出示例:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3B5YVhNz7JkR6XQ1wJ8Xz7Y6Lk7FtZw9TqYd0jKL your_email@example.com
复制全部内容(包括开头的算法类型和末尾的注释)
添加密钥到ssh-agent
确保ssh-agent运行并将密钥添加进去:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
如果设置了密钥密码,此时需要输入
配置Git平台
GitHub配置
- 登录GitHub进入Settings
- 选择SSH and GPG keys
- 点击New SSH key
- 粘贴公钥内容
GitLab配置
- 进入User Settings → SSH Keys
- 粘贴公钥并设置过期时间(可选)
码云配置
- 进入安全设置 → SSH公钥
- 需填写标题后粘贴内容
多账号配置
当需要为不同平台使用不同密钥时:
- 生成第二个密钥对:
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_work
- 创建或修改
~/.ssh/config
文件:
# 个人账号
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
# 工作账号
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work
- 克隆仓库时使用对应host:
git clone git@github.com-work:company/project.git
测试连接
验证配置是否成功:
ssh -T git@github.com
成功时会显示认证的用户名
常见问题处理
权限问题
确保密钥文件权限正确:
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
连接被拒绝
检查防火墙设置或尝试详细输出:
ssh -vT git@github.com
密钥不生效
确认使用的URL是SSH格式:
git remote set-url origin git@github.com:user/repo.git
密钥轮换与更新
定期更换密钥的推荐步骤:
- 生成新密钥对
- 将新公钥添加到所有平台
- 测试新密钥可用后删除旧密钥
- 更新本地所有仓库的remote URL
自动化部署场景
在CI/CD环境中使用SSH密钥:
// Node.js示例:通过child_process自动添加密钥
const { execSync } = require('child_process')
const fs = require('fs')
// 将密钥内容写入临时文件
fs.writeFileSync('/tmp/deploy_key', process.env.SSH_PRIVATE_KEY)
execSync('chmod 600 /tmp/deploy_key')
// 配置SSH
execSync(`ssh-add /tmp/deploy_key`)
安全最佳实践
- 私钥绝不外传
- 为不同服务使用不同密钥
- 使用强密码保护密钥
- 定期检查已授权的密钥列表
- 在不可信设备上使用临时密钥
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn
下一篇:Git代理设置