通过SSH执行Git命令:如何正确使用私钥?
Git克隆时指定私钥失败的解决方法
我来帮你搞定这个问题!你遇到的核心问题是把SSH的参数直接传给了git clone命令——但Git本身并不识别-key或者-i这些参数,这些是SSH客户端的专属参数,得通过正确的方式传递给SSH才行。下面给你两种靠谱的解决方案:
方法一:临时通过环境变量指定私钥
你可以用GIT_SSH_COMMAND环境变量,把SSH的参数打包传给Git。命令格式如下(注意替换成你的私钥路径和仓库地址):
GIT_SSH_COMMAND="ssh -i /绝对路径/到/你的/私钥文件" git clone 'ssh-url-for-my-git-repo' 'destination_folder'
⚠️ 重要提醒:如果你的私钥是.ppk格式(PuTTY生成的),默认Git用的OpenSSH客户端是不支持这个格式的。你需要先用PuTTYgen把它转换成OpenSSH格式:
- 打开PuTTYgen,点击「Load」加载你的
.ppk文件 - 点击菜单栏的「Conversions」→「Export OpenSSH key」
- 保存成无后缀或者
.pem格式的文件,再用这个文件作为上面命令里的私钥路径。
方法二:配置SSH Config(一劳永逸)
如果不想每次克隆都输一大串命令,可以配置SSH的config文件,以后直接用简化地址克隆:
打开SSH配置文件:
- Linux/macOS:编辑
~/.ssh/config(如果没有就新建一个) - Windows:编辑
C:\Users\你的用户名\.ssh\config(同样没有就新建)
- Linux/macOS:编辑
在文件里添加以下内容(替换成你的实际信息):
Host my-git-repo # 自定义一个别名,随便取 HostName git.example.com # Git平台的主机名,比如github.com、gitlab.com或者你的私有服务器地址 User git # Git平台的用户名,一般都是git,除非你的私有服务器有特殊设置 IdentityFile /绝对路径/到/转换后的OpenSSH私钥文件 # 注意要是转好格式的私钥 IdentitiesOnly yes # 强制只用指定的私钥,避免SSH自动尝试其他密钥干扰
- 接下来克隆的时候,直接用别名地址就行:
git clone git@my-git-repo:用户名/仓库名.git 'destination_folder'
额外注意事项
- 私钥文件的权限必须严格限制:Linux/macOS要执行
chmod 600 你的私钥文件,Windows要确保只有当前用户拥有读取权限(右键文件→属性→安全→高级,设置只有自己能访问),不然SSH会因为权限太松拒绝使用这个密钥。 - 如果还是失败,可以加上
-v参数查看详细日志,比如GIT_SSH_COMMAND="ssh -v -i /path/to/key" git clone ...,从日志里找具体的错误原因(比如密钥格式不对、权限问题、主机连接失败等)。
内容的提问来源于stack exchange,提问作者Caffeine




