You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GIT_SSH_COMMAND按当前目录切换SSH密钥?

排查GIT_SSH_COMMAND脚本无法正确选择SSH密钥的问题

核心问题

你写的git-ssh.sh脚本没有转发Git传递给SSH的必要参数,这是导致ssh抛出用法错误的直接原因。Git在调用自定义SSH命令时,会自动传递目标地址(比如git@github.com)和后续的Git操作命令,你的脚本只执行了带密钥的ssh命令,但没把这些参数传过去,导致ssh因为缺少必填参数报错。

修复与排查步骤

  1. 补全脚本的参数转发
    修改~/git-ssh.sh,在ssh命令末尾加上"$@",把Git传递的所有参数原封不动转发给ssh:
#!/bin/bash

dir=$(pwd)

if [[ $dir == *"work"* ]]; then
  ssh -i ~/.ssh/key_work -o IdentitiesOnly=yes "$@"
elif [[ $dir == *"personal"* ]]; then
  ssh -i ~/.ssh/key_personal -o IdentitiesOnly=yes "$@"
else
  exit 1
fi
  1. 给脚本添加可执行权限
    执行以下命令确保脚本能被shell运行:
chmod +x ~/git-ssh.sh
  1. 验证脚本逻辑与连接
  • 在~/git/work目录下手动执行~/git-ssh.sh git@github.com,如果能看到类似PTY allocation request failed on channel 0的提示后退出,说明密钥和连接逻辑正常;如果提示权限问题,检查密钥的权限(密钥文件权限应为600,目录~/.ssh应为700)。
  • 若需要精确匹配目录前缀(避免误匹配其他含work/personal的路径),可以把目录判断改成:
    if [[ $dir == "$HOME/git/work"* ]]; then
    
  1. 修正.zshrc里的路径配置
    建议用绝对路径定义GIT_SSH_COMMAND,避免shell路径解析问题:
export GIT_SSH_COMMAND="$HOME/git-ssh.sh"

修改后执行source ~/.zshrc让配置生效。

内容的提问来源于stack exchange,提问作者Eduardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:12:58