如何在远程服务器上使用本地SSH私钥向GitHub推送代码仓库
解决方案:无需复制私钥,在远程服务器用本地SSH密钥访问GitHub
核心结论
- 没必要给每台服务器单独创建SSH私钥绑定GitHub,完全可以复用你本地那把既连服务器又能访问GitHub的私钥
- 有现成方案:SSH代理转发(SSH Agent Forwarding),不用把私钥复制到远程,就能让远程Shell用本地私钥完成GitHub的推送/拉取
具体操作步骤
1. 先确保本地SSH代理正常运行
在本地终端做以下操作:
- Linux/macOS 用户:
# 检查代理是否在运行,有输出说明已启动 echo $SSH_AUTH_SOCK # 没输出的话启动代理 eval "$(ssh-agent -s)" # 把你的私钥添加到代理里 ssh-add ~/.ssh/你的私钥文件名(比如id_rsa) - Windows 用户(用Git Bash/WSL)操作和上面一致;用原生OpenSSH的话,在PowerShell里执行:
# 设置ssh-agent开机自启并启动服务 Get-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent # 添加私钥 ssh-add $env:USERPROFILE\.ssh\你的私钥文件名
2. 配置本地SSH文件,开启代理转发
编辑本地的SSH配置文件:
- Linux/macOS 路径:
~/.ssh/config - Windows 路径:
C:\Users\你的用户名\.ssh\config
给每台远程服务器添加下面的配置块:
Host 自定义服务器别名(比如my-server-01) HostName 服务器的IP或域名 User 你在服务器上的用户名 IdentityFile ~/.ssh/你的私钥文件名 ForwardAgent yes
这个配置的作用是,当你SSH连远程服务器时,会把本地的SSH代理连接转发过去,远程就能用本地的私钥了。
3. 确认VSCode Remote SSH的代理转发已开启
打开VSCode的设置,搜索remote.SSH.enableAgentForwarding,确保这个选项是勾选状态(默认一般是开的,确认下更稳妥)。
4. 验证配置是否成功
用VSCode连接到远程服务器后,在终端里执行:
ssh -T git@github.com
如果返回类似Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.的内容,说明配置生效了,现在可以正常git push/git pull了。
注意要点
- 只在你完全信任的服务器上开代理转发,避免不可信服务器滥用你的私钥权限
- 远程服务器上不用执行
ssh-add,所有密钥操作都是通过本地代理完成的 - 要是连接时有权限问题,检查本地私钥的权限:Linux/macOS下私钥文件权限必须是600,执行
chmod 600 ~/.ssh/你的私钥文件名就能搞定
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

