资讯详情

资讯详情

SSH密钥配置与GitHub代码上传实战指南

1. 为什么需要SSH密钥上传代码第一次用GitHub上传代码时我直接用了HTTPS协议每次push都要输账号密码烦得要命。直到同事告诉我SSH密钥验证这个神器——配置一次就能永久免密操作这才发现原来GitHub还能这么玩。SSH密钥本质上是一对加密字符串私钥放在本地~/.ssh目录千万别泄露公钥上传到GitHub。当你推送代码时GitHub会用公钥验证本地私钥的匹配性。这种加密验证比密码更安全还能避免中间人攻击。我后来查资料才知道像Linux服务器登录、CI/CD自动化流程都在用这套机制。2. 生成SSH密钥对的全过程2.1 检查现有密钥打开终端先跑这个命令ls -al ~/.ssh如果看到id_rsa、id_ecdsa这类文件说明已有密钥。我当初就是没检查直接生成新密钥结果把旧的覆盖了导致服务器登录出问题——血泪教训啊2.2 生成ED25519密钥推荐现在都用更安全的ED25519算法了ssh-keygen -t ed25519 -C your_emailexample.com-C参数是密钥注释建议用邮箱。系统会问保存路径直接回车用默认的~/.ssh/id_ed25519就行。然后要你设密码短语passphrase这个不是必填但我强烈建议设置万一电脑丢了别人也动不了你的密钥。重要提示如果公司电脑有域控策略可能需要用RSA算法ssh-keygen -t rsa -b 4096 -C your_email3. 把公钥交给GitHub3.1 复制公钥内容用cat命令打印公钥cat ~/.ssh/id_ed25519.pub看到类似这样的内容ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJv6Q5JbZqFZOnZ8WkYw1jzJ7KX9t8YDjyxlN4KbX7J your_emailexample.com全选复制注意别多空格或少字符。我刚开始用vim打开复制结果漏了最后一个字母折腾半天才发现。3.2 GitHub后台配置右上角头像 → Settings左侧SSH and GPG keys点New SSH keyTitle写设备标识比如MBP-2023Key type保持Authentication Key粘贴公钥内容这里有个坑GitHub现在允许同一个公钥重复添加。我有次手抖点了两次提交结果SSH连接时报错排查半天才发现密钥重复了。4. 测试SSH连接运行诊断命令ssh -T gitgithub.com第一次会问是否信任主机输入yes后应该看到Hi username! Youve successfully authenticated...如果报错Permission denied八成是公钥没粘贴完整本地ssh-agent没启动防火墙拦截了22端口我遇到最奇葩的情况是公司网络屏蔽了SSH后来改用HTTPS端口cat ~/.ssh/config EOF Host github.com Hostname ssh.github.com Port 443 EOF5. 本地仓库SSH化改造5.1 新仓库初始化mkdir my-project cd my-project git init git remote add origin gitgithub.com:username/repo.git注意.git/config里url应该是ssh格式的别用https://开头。5.2 已有仓库迁移查看当前远程地址git remote -v如果显示https地址用这条命令切换git remote set-url origin gitgithub.com:username/repo.git有次我忘了改地址push时依然走HTTPS协议还纳闷SSH怎么没生效...6. 多账号密钥管理实战我有两个GitHub账号公司和个人配置如下生成第二个密钥ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C workcompany.com创建~/.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_ed25519_work克隆时替换域名git clone gitgithub.com-work:company/project.git7. 常见故障排查指南7.1 密钥权限问题SSH对文件权限极其严格必须这样设置chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519*7.2 验证代理情况查看ssh-agent是否加载了密钥ssh-add -l如果没加载手动添加eval $(ssh-agent -s) ssh-add ~/.ssh/id_ed255197.3 调试模式遇到玄学问题时加-vvv参数ssh -Tvvv gitgithub.com输出会显示详细握手过程我靠这个发现过公司代理篡改SSH流量的问题。8. 安全防护建议密钥密码短语一定要设我同事笔记本被偷幸亏有密码短语保护定期轮换密钥企业级项目必须做GitHub后台开启双因素认证用ssh-keygen -y -f ~/.ssh/id_ed25519可以验证密钥指纹离职前记得删除相关公钥最后分享个冷知识GitHub的SSH服务其实跑在22和443双端口上后者能绕过很多网络限制。遇到连不上的情况可以试试修改~/.ssh/configHost github.com Hostname ssh.github.com Port 443
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →